原文标题 :Multivariate Time Series Forecasting with Deep Learning
使用深度学习进行多元时间序列预测
使用 LSTM 网络进行时间序列预测并解释结果
预测,即对未来的预测,在任何想要维持成功业务的公司的决策过程中都起着关键作用。这是因为明天的成功取决于今天做出的决定,这些决定是基于预测的。因此,良好的预测至关重要,例如,预测销售以更好地计划库存、预测经济活动以告知业务发展决策,甚至预测人员在组织内的流动以改进人员规划。
在这篇文章中,我们展示了如何结合循环神经网络 (RNN),特别是长短期记忆 (LSTM) 网络 [1],利用多个历史时间序列来预测未来。此外,我们使用基于 DeepLIFT [4] [5] 的方法来解释结果。
我们选择这种建模方法是因为它在传统方法不适合的环境中提供了最先进的性能。特别是,当时间序列数据很复杂时,意味着趋势和季节性模式会随着时间而变化,LSTM 网络等深度学习方法是 ARMA(自回归移动平均)[2] 等更传统方法的可行替代方案。 LSTM 模型最初是为自然语言处理 (NLP) 任务开发的,现已进入时间序列预测领域,因为与文本一样,时间序列数据按顺序出现,并且序列不同部分之间的时间关系对于确定预测结果很重要.
此外,我们希望通过找到对预测贡献最大的重要特征来阐明经过训练的神经网络。
我们使用的示例是根据价格本身的历史时间序列以及其他特征(例如交易量和日期衍生特征)来预测比特币的未来价格。我们选择这些数据是因为它体现了个人投资者在决定购买或出售资产时所做决策的动态变化的行为方面。这些方面也确实出现在其他预测问题中,例如引言中提到的那些。这篇文章仅用于教育目的,您不应将其视为投资建议。[0]
Data Exploration & Preparation
该数据集包括从 2016 年 7 月到 2021 年 7 月的每日价格,包括开盘价、最高价、最低价、收盘价(均以美元报价)以及成交量(以美元计的每日交易量)。[0]
下图显示了每日收盘价的时间序列(图 1)。您已经可以看到,时间序列的特点是频繁出现高峰、低谷以及不断变化的(局部)趋势。
Time Series Stationarity
传统的统计预测技术要求数据是平稳的,即具有恒定的均值、标准差和自相关。但是,如果不满足平稳性条件,则预测技术(如 ARMA)无法模拟数据随时间的依赖结构,因此必须使用其他技术。
让我们仔细看看我们的例子并做一些视觉检查。只需观察上述价格时间序列(图 1),您就可以看到它不是静止的,因为均值随时间而变化。典型的时间序列问题,下一步是转换时间序列以使其稳定。我们取价格水平的一阶百分比差异来获得每日价格变化。此外,我们计算了每日价格随时间变化的滚动平均值和滚动标准差。在图 2 中,您可以看到每日价格变化的均值和标准差都不是恒定的,因此时间序列不是平稳的。
时间序列显示出传统预测技术不太适合的强大、不规则的动态。另一方面,RNN,尤其是 LSTM 模型,已经证明可以很好地处理更复杂的时间序列,正如在许多 Kaggle 比赛中所看到的那样,这就是我们关注它们的原因。
特征生成和准备
我们从数据集中获得了另外两个特征,包括高点和低点之间的百分比差异作为当日价格变动的衡量标准,以及第二天开盘和收盘之间的百分比差异作为隔夜价格变动的衡量标准。此外,我们从日期列中导出三个特征,包括星期几、一年中的月份和一年中的季度,以帮助预测我们的目标特征,即收盘价 (Close)。
鉴于我们的金融时间序列数据相对干净且结构化,我们不必花太多时间清理和准备数据。准备步骤包括将我们的数据集拆分为训练集和测试集,以及将所有特征重新缩放到 0 到 1 之间的通用比例,这有助于防止在特征处于不同比例时模型过度拟合。通常,我们会在分析结束时保留一个保留数据集来评估模型,但在我们的案例中观察模型在测试数据集上的性能就足够了。
多元时间序列预测
接下来,我们致力于建立一个时间序列预测模型,该模型可以将多个变量(及其各自的历史)作为输入,来预测未来的价格。
Objective
在我们深入建模方面之前,必须确定与业务目标一致的目标(或成本)功能,以确保模型实际上可以帮助实现预期的业务成果。目标是创建一个预测模型,尽可能准确地预测价格,同时优先考虑更持久的价格变动(例如每周趋势),而不是更小、更可变的周内变动。
我们做出以下考虑:
- 我们选择均方误差 (MSE) 作为我们的主要成本函数,因为我们的数据集是高质量的,即没有异常值作为数据错误的结果,否则可能导致使用此错误度量的模型过度拟合。
- 我们实际上选择 Root-MSE (RMSE),见图 3,而不是 MSE,原因很简单,因为 RMSE 具有与预测变量相同的单位,因此具有更好的可解释性。
- 在其他情况下,例如预测销售,数据可能是错误的,例如如果不考虑假期。该模型会错误地预测低销售额,并且由此产生的大错误将在训练期间受到错误的惩罚。
- 鉴于我们的数据中存在一些大而罕见的价格波动,RMSE 可能会导致模型过度拟合。此外,我们更感兴趣的是预测总体趋势,而不是时间序列的短期变动。因此,我们选择包括平均绝对误差(MAE),见图 4,作为额外的性能度量,因为它比 RMSE 更能容忍异常值。
我们的目标是最小化 RMSE 和 MAE。
递归神经网络和长期短期记忆
让我们专注于构建预测模型。为此,我们将快速回顾递归神经网络 (RNN) 以及长短期记忆 (LSTM) 网络。
RNN 是一种神经网络架构,主要用于检测序列数据中的模式,例如语言,或者在我们的例子中,是数字时间序列。为了检测数据中的顺序模式,信息通过网络循环传递,即信息被传输回模型[3]。这使得 RNN 除了当前输入 X(t) 之外,还可以考虑先前的输入 X(t-1)。在图 5 中,您可以看到信息 h(t) 如何从网络的一个步骤传递到下一个步骤。
更多关于如何通过时间反向传播训练 RNN 的信息也可以在 [3] 中找到。随着序列变得更长,当前隐藏状态将需要保留越来越多的来自先前隐藏状态的信息,这对于非常长的序列可能会出现问题。随着每个时间步长,梯度可以随着更多的变换而减小(或增加),最终导致梯度消失(或爆炸)。这意味着远早于当前时间步发生的状态的贡献将丢失(或占主导地位)。
LSTMs 是一种特殊类型的 RNN,旨在比标准 RNN [1][3] 更好地处理这种长距离依赖关系。与 RNN 类似,LSTM 具有链状结构,但与标准 RNN 相比,每个重复块(一个 LSTM 单元)具有 3 个额外的全连接层(图 6)。这些附加层也称为门层,因为它们与标准层 (tanh) 相比具有不同的激活 (sigmoid)。当信息通过每个 LSTM 单元时,可以通过门层添加或删除信息来更新单元状态 C(t)。这就是 LSTM 模型决定是保留还是删除先前时间步长的信息的方式。
有关 LSTM 的更多细节和确切结构,您可以参考 [1]。
模型训练和评估
我们的特定预测模型由两个 LSTM 层和一个全连接层组成,用于预测第二天的价格。我们使用一个数据集类来生成序列长度为 30 天的特征集的时间序列,并使用一个数据加载器类来批量加载它们。我们使用 Adam 优化器和 RMSE 以及 MSE 作为损失函数(在单独运行期间)训练模型。此外,如果没有显着的性能改进,我们实施了提前停止以允许训练工作提前完成。
由于输入数据被缩放到 0 到 1 之间的水平,我们必须将模型的输出缩减(去缩放)到原始比例,以便能够根据实际价格水平评估预测。重点不是调整最佳模型,因此我们只使用一组超参数进行训练,并将其视为基线模型。在对模型进行大约 10-15 个 epoch 的训练并对其输出进行缩放后,该模型在测试数据集上实现了大约 10,000 的 RMSE 和大约 6,500 的 MAE。
让我们看一下对测试数据的预测(图 7)。您可以看到该模型在预测测试数据集第一季度的整体价格发展方面做得相对较好,这是我们的目标。在中间(300-450 天)左右,该模型似乎不断高估价格,并且未能预测到最后(680 天及之后)的极端价格上涨,这解释了上面提到的大错误。
如果我们仅在测试数据集的前 30 天验证模型的性能,它就会显着提高。 RMSE 和 MAE 均降至 750 左右,这意味着模型的预测平均与价格相差约 750。我们可以在图 7 中看到,模型的预测如何随着训练时间(第 0 天)的流逝而恶化。在时间序列预测中,必须经常重新训练模型,以便它可以从最新的观察中学习。在更新的数据上训练模型使其能够学习和整合最新的模式和信号。
该模型未能预测价格的几个高峰和低谷这一事实表明缺少输入因素。向训练数据集添加更多特征有助于进一步改进模型预测。
这不是对模型预测误差的详尽分析,但足以满足我们的目的。接下来,我们将使用这个基线模型并尝试解释它的预测。
Important Features
在神经网络的情况下,理解模型做出预测的原因可能很困难。我们使用一种基于 DeepLIFT 算法 [4][5] 的方法,该算法近似于经典博弈论中已知的 SHAP 值。基本上,这种方法试图回答一个特征在模型存在时(在输入中)与它不存在时(不在输入中)相比对模型预测的贡献有多大的问题,从而得出该特征的重要性。更具体地说,该方法通过将网络中所有神经元的贡献反向传播到输入的每个特征来分解神经网络对特定输入的输出预测。然后它将每个神经元的激活与其参考激活进行比较,并根据差异分配贡献分数(或乘数)。参考输入表示根据域选择的一些默认或中性输入,例如零或特征平均值。一旦基于代表性数据集(或背景数据集)计算了乘数,我们就可以根据一些样本输入计算输入特征对模型输出的贡献,并按照贡献最大的顺序对特征进行排序以获得它们的重要性。
我们使用 900 个训练数据样本作为背景数据集和 100 个测试数据样本来解释模型的输出。由于在每个时间步计算每个输入样本的特征重要性,我们对所有 100 个输入样本进行平均,并按特征和时间步绘制重要性(图 8)。前 3 个输入特征是成交量、收盘价和盘中高低百分比价格变化。我们还可以看到,与更远的时间步长(第 -30 天到 -8 天)(其中第 0 天是预测时间)相比,最近的时间步长(第 -7 天到 -1 天)在预测中发挥了更重要的作用。
了解深度学习模型的预测对于减少在需要可解释性的应用程序中采用的障碍至关重要。除了以一定的准确性预测结果之外,我们现在还可以衡量其最重要的贡献者。例如,如果我们要预测一家公司的产品销售,通过应用这种特征重要性技术,我们可以更深入地了解销售变化的原因以及促进预期业务成果的设备行动计划(例如,通过支持特定的营销活动来增加销售有助于提高销售额)。
此外,从发现重要特征中获得的见解也有助于为模型优化过程提供信息。例如,在这里,减少输入序列长度以及删除不重要的特征会提高训练和推理速度,同时可能不会对预测性能产生太大影响。
Conclusion
在这篇文章中,我们展示了如何构建基于 LSTM 网络的多元时间序列预测模型,该模型适用于具有复杂模式的非平稳时间序列,即在传统方法缺乏的领域。在将预测目标与我们的“业务”目标保持一致后,我们几乎不需要准备数据即可训练和评估模型。此外,我们使用基于 DeepLIFT 的技术发现了哪些特征(以及哪些时间步长)推动了模型的预测。这使我们能够解释深度学习模型并从中得出更好的决策。
这篇博文附带的 Github 代码可以在这里找到。[0]
References:
[1] Hochreiter 和 Schmidhuber。 “长短期记忆”。 (1997)
[2] 盒子和詹金斯。 “时间序列分析、预测和控制”。 (1994)
[3] 施密特。 “循环神经网络 (RNN):一个温和的介绍和概述”。 (2019)
[4] Shrikumar、格林赛德和昆达杰。 “通过传播激活差异学习重要特征”。 (2017)
[5] 伦德伯格和李。 “解释模型预测的统一方法”。 (2017)
文章出处登录后可见!