Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

8.9 深度学习方法

传统的时间序列模型,如ARIMA,在许多问题上被熟知并发挥了重要作用。然而,这些传统方法也存在不少局限性。传统的时间序列模型只是线性函数或简单的线性变换,需要手动调整参数,例如时间依赖性,并且在数据出现损坏或缺失时效果不佳。

如果我们关注时间序列预测领域的深度学习进展,我们会发现循环神经网络(RNN)近年来备受瞩目。这些方法能够发现结构和模式,如非线性,能够轻松地处理具有多个输入变量的问题,并且对缺失数据相对稳健。RNN模型可以通过将其自身的输出作为下一步的输入来保持状态。这些深度学习模型可以称为时间序列模型,因为它们可以利用过去的数据点来进行未来预测,类似于传统的时间序列模型,如ARIMA。因此,在金融领域,这些深度学习模型具有广泛的应用前景。让我们一起来探索用于时间序列预测的深度学习模型吧。

1. 循环神经网络(RNNs)

循环神经网络(RNNs)被称为“循环”,因为它们对序列的每个元素执行相同的任务,输出取决于先前的计算。RNN模型具有记忆,它记录了迄今为止计算的信息。如图所示,循环神经网络可以被想象为同一个网络的多个副本,每个副本将消息传递给下一个继承者。

图:循环神经网络

XtX_t代表时间步tt的输入。OtO_t代表时间步t的输出。StS_t代表时间步t的隐藏状态,它是网络的记忆。它根据前一个隐藏状态和当前步的输入计算得出。

RNN的主要特征就是这个隐藏状态,它捕获了序列的一些信息,并在需要时相应地使用它。

2. 将时间序列数据修改为监督学习模型的过程

时间序列是按时间索引排序的一系列数字。监督学习是指我们有输入变量(X)和输出变量(Y)的情况。给定一个时间序列数据集的数字序列,我们可以将数据重组成一组预测变量和预测目标变量,就像在监督学习问题中一样。我们可以通过使用先前的时间步作为输入变量,并使用下一个时间步作为输出变量来实现这一点。让我们通过一个例子来具体说明。

我们可以将下图左侧表中显示的时间序列重组为一个监督学习问题,方法是使用前一个时间步的值来预测下一个时间步的值。一旦我们以这种方式重新组织了时间序列数据集,数据看起来会像右边的表格所示。

在我们的监督学习问题中,我们可以看到前一个时间步是输入(X),而下一个时间步是输出(Y)。观察值之间的顺序被保留,当使用该数据集训练监督模型时,必须继续保留这种顺序。在训练监督模型时,我们将删除第一行和最后一行,因为我们既没有X的值,也没有Y的值。

在Python中,帮助将时间序列数据转换为监督学习问题的主要函数是来自Pandas库的shift()函数。我们将在案例研究中演示这种方法。利用先前的时间步来预测下一个时间步的方法被称为滑动窗口、时间延迟或滞后方法。

在讨论了监督学习和时间序列模型的所有概念之后,让我们转向案例研究。