Press "Enter" to skip to content

使用Cassandra和TensorFlow预测股票数据

这篇博客将涵盖的场景是特定股票价格的时间序列预测。这个问题本身非常普遍且广为人知。话虽如此,这只是一个技术演示,并不意味着市场建议。演示的目的是展示Astra和TensorFlow如何共同工作进行时间序列预测。第一步是设置数据库。

获取测试数据

现在,您已经在计算机上拥有了数据库、凭据和捆绑文件,让我们确保您获取到运行本教程所需的数据。这些数据是开源的,可以在许多平台上获取。其中之一是Kaggle平台,人们已经通过API收集了这些数据。

这是那些数据的链接。

另一个适用于这个问题的数据源是特斯拉数据集,该数据集也在GitHub上开放。

最简单的选择是克隆我们的Github存储库(无论如何,我们都会介绍),我们还添加了一些示例数据让您立即开始编码。

现在,让我们直接进入代码吧!

教程代码

本教程的代码可以在GitHub上找到我们的存储库链接中。如果您已经熟悉Git和JupyterLabs,只需克隆并重新运行笔记本步骤即可。

存储库上的自述文件中还应包含所有启动代码所需的详细信息。

使用存储库

在本节中,我们确保涵盖了完成本教程所需的一些步骤,并突出了一些所需的详细信息。

在克隆代码之后,导航到项目目录,并通过以下命令安装依赖项(请注意,如果您使用的是GitPod部署方法,则这将自动发生):

pip install -r requirements.txt

请注意,本示例中使用的Python版本是3.10.11,因此请确保您已经安装了该版本,或者使用pyenv创建了一个虚拟环境(哪个对您最好都可以)。

Jupyter[Lab]安装

最后但并非最不重要的是,在运行代码之前,请确保您的计算机上安装了Jupyter。您可以通过运行以下命令来安装:

pip install jupyterlab

请注意,这里我们正在安装JupyterLab,它是Jupyter笔记本的更高级版本。它除了传统的笔记本功能外,还提供了许多其他功能。

安装完成后,在终端中键入jupyter-lab。它应该会在您的浏览器中打开一个窗口,列出您的工作目录的内容。如果您在克隆的目录中,您应该能够看到笔记本,并能够按照步骤进行操作。

如果它没有自动启动,您可以通过单击终端中的URL导航到JupyterLabs服务器:

现在,您已经从工作目录运行了Jupyter命令,您应该在浏览器中看到项目树,并导航到文件。首先,让我们确保在开始编码之前配置了机密信息,因此请确保打开local_secrets.py文件并填写从AstraDB网站设置数据库详细信息后提供/提取的详细信息。

现在,我们可以导航到笔记本。让我们从读取数据并将其存储在AstraDB中开始。

将数据存储在AstraDB中

此步骤只是展示您可以使用AstraDB为模型提供数据。AstraDB首先是一个功能强大且可扩展的数据库。数据必须存储在某个地方,无论您是已经在Astra或Cassandra上工作,还是刚刚开始使用这些工具,本教程都向您展示了如何轻松地将Astra用作后端。

使用CQL语言创建表并将本教程的示例数据加载到其中很容易。逻辑应该如下所示:

完成上一步后,让我们再次读取数据,并确保将其按时间序列预测问题的顺序进行排序。这是一个数据管理步骤,以确保数据按系列有序。

使用以下代码读取您的时间序列数据,并为TensorFlow准备好:

数据分析

我们现在可以编写一些代码来理解和分析数据,并使用一些图形来展示。下面的图表,例如,展示了股票的开盘价和收盘价(市场开盘时的价格和市场收盘时的价格)在2016年至2020年的4年时间段内的情况。

您可以在笔记本中找到更多图表,描述了一些其他因素,并分析了价格随时间的波动。

现在让我们开始构建模型本身。

构建模型

在这个例子中,我们将使用LSTM模型(或者长短期记忆模型),这是一种深度学习模型,以识别数据中的模式而闻名,它非常适用于我们要演示的问题。

还需要注意的是,我们将使用Keras(Python的深度学习API)作为我们TensorFlow示例的后端。该模型由2个LSTM层组成:一个密集层,一个dropout层,最后是另一个密集层。

另一个重要的方面是数据的归一化和缩放。

模型的性能对实际数据值的规模和变化非常敏感;因此,将数据归一化并转换为一致的范围或分布是至关重要的。我们使用了机器学习中最受欢迎的缩放器之一,即最小-最大缩放器进行数据归一化。我们还实现了将数据分割成训练集和测试集。

在这种情况下,为了演示的目的,我们使用了95%的数据作为训练集,剩下的用于测试。

一旦完成数据和模型的转换和配置,我们就可以开始拟合步骤,也称为训练步骤。

使用数据

一旦您的模型在训练数据上训练完成,您就可以使用它进行时间序列预测。

运行以下命令将生成预测数据:

predictions = model.predict(x_test)

但请注意,由于我们使用了minMaxScaler对值进行了缩放,因此此时生成的预测值都在缩放范围内,如果想将它们还原到原始尺度,我们需要对Tensorflow所做的操作进行逆操作;只需运行以下代码即可完成。

predictions = scaler.inverse_transform(predictions)

下图显示了训练数据随时间的演变以及我们模型生成的测试与预测数据。

请注意图表右侧的不同颜色。橙色代表实际数据的测试子集。绿线代表预测的股票价格。在这种情况下,我们的预测相对较好地预测了股价下跌。预测线是任何预测的主要结果。

请注意,对于这个回归问题,我们还使用了一些模型评估指标。均方误差(MSE)和均方根误差(RMSE)用于评估,下面是对应实现的代码片段:

# 评估指标

mse = np.mean(((predictions - y_test) ** 2))

rmse = np.sqrt(mse)

模型存储

现在让我们继续进行模型存储。在这一部分中,我们将再次与我们的数据库AstraDB交互,并将模型和误差指标存储在一个表中。出于可见性的目的,我们选择了一个简单的结构。

表的模式如下:

模型数据本身将作为blob存储;为此,我们需要将我们的模型数据转换为JSON,然后将其存储在我们的表中。下面的代码描述了您如何轻松完成这个过程:

现在我们已经存储了模型的数据,我们可以编写一些逻辑来再次检索它,以供不同的目的使用。我们可以加载模型,提供服务,并即时运行一些预测,或者可以重新加载它,并在一些批处理数据上运行模型以进行一些批处理预测。

读取模型

以下是允许读取模型的代码。根据需要,您可以运行任何预测方法。

我们还可以查看模型的摘要,并确保它与我们之前训练和存储的模型完全一致:

loaded_model.summary()

你应该会看到像这样的内容:

恭喜你!你已经完成了本教程的学习!

在本文的结尾,你已经学会了如何与AstraDB交互,并将其作为模型工件和数据的来源。

总结

在本文中,我们探索了TensorFlow和AstraDB的强大组合。在整个教程中,我们介绍了设置环境、安装必要的依赖项以及将TensorFlow与AstraDB集成的基本步骤。我们还探讨了如何使用TensorFlow的丰富函数库执行常见任务,如数据摄取、预处理和模型训练。此外,我们还讨论了AstraDB的灵活模式设计和强大的查询功能如何实现高效的数据检索和操作。

通过结合TensorFlow和AstraDB,开发者可以为创建先进的机器学习应用程序打开一扇大门。从大规模数据分析到实时预测,这个强大的组合使我们能够构建能够处理海量数据集并提供准确结果的智能系统。

Leave a Reply

Your email address will not be published. Required fields are marked *