【时序】M4竞赛冠军方案:一种用于时间序列预测的指数平滑和递归神经网络的混合方法
时间:2022-12-10 05:30:00
论文名称:A hybrid method of exponential smoothing and recurrent neural networks for time series forecasting
论文下载:https://www.sciencedirect.com/science/article/pii/S0169207019301153
论文年份:2020
273(2022/04/30)
论文代码:https://github.com/M4Competition/M4-methods
论文总结
论文组织
【时间序列预测两种建模方法】:
- 交叉学习:使用多个序列训练单个模型。
- 统计时间序列算法:为每个序列训练一个单独的模型。
【本文提出的方法概述】
本文提出了将指数平滑的模型和混合方法LSTM结合起来,预处理参数来自指数平滑族中某些模型的更新公式。ES 方程使这种方法它能有效地捕获季节性和水平等单个序列的主要成分 LSTM 网络允许非线性趋势和交叉学习。在这方面,分层使用数据,这意味着使用局部和全局组件提取和组合序列或数据集级别的信息,以提高预测准确性。该方法具有以下两个特点:
- 它是混合从某种意义上说,统计建模(ES 模型)与 ML 算法(LSTM 同时结合网络)。
- 它本质上是分层的,从某种意义上说,全局(适用于所有序列的大子集)和局部(分别适用于每个序列)参数被用来实现交叉学习,同时也强调被预测时间序列的特殊性。
这种混合预测方法有三个主要要素:
-
i)去季节化和自适应标准化(deseasonalization and adaptive normalization)
-
ii)预测的生成(generation of forecasts)
-
iii)集成(ensembling)
【本文提出的方法细节?
由于数据没有给出每个时间序列,因此使用指数平滑模型进行去季节性。此外,神经网络对输入数据的小变化不敏感,在两个差异较大的范围内,归一化后几乎相同,导致损失趋势。因此,归一化应该是自适应和局部的。事实上,实现也很简单,即每次使用窗口使用窗口水平的最后一个值时,窗口中的每个值都可以除以它。至于去季节性,假设乘法是季节性的,将时间序列除以指数平滑学习的季节性分量。
本文使用的 LSTM 一般有三种LSTM,膨胀LSTM和注意力LSTM。
同时采用了不同的模型集成策略,称为专家组合主要思想是,当数据集包含大量来自未知来源的序列时,有理由假设这些序列可以分组为子集。这样,如果每组使用单独的模型而不是整个数据集,则将提高整体预测的准确性。专家集成算法同时训练多个模型 (神经网络和每个序列参数),迫使它们专注于序列的子集。该算法在 3.2.2 介绍。另外,还是用不同的。epoch集成获得的模型,如使用最后五个模型epoch集成训练模型。
Abstract
This paper presents the winning submission of the M4 forecasting competition. The submission utilizes a dynamic computational graph neural network system that enables a standard exponential smoothing model to be mixed with advanced long short term memory networks into a common framework. The result is a hybrid and hierarchical forecasting method.
本文介绍了 M4 预测比赛的获奖作品。提交使用动态计算图神经网络系统,将标准指数平滑模型与先进的长期短期记忆网络混合到一个通用框架中。结果是一种混合和分层的预测方法。
1. Introduction
近几十年来,神经网络 (NN) 和其他机器学习 (ML) 算法在图像和语音识别、自然语言处理等各个领域都取得了显著的成功 (NLP)、自动驾驶汽车和游戏 (Makridakis, 2017) 等等。成功的关键在于,在给定大型代表性数据集时,ML 算法可以学习识别复杂的非线性模式,探索非结构化关系,而无需验地假设。因此,ML 算法不受假设或预定义数据生成过程的限制,这允许数据自己说话。
然而,在预测方面,ML 优势不明显。虽然 ML 能源预测算法 (Dimoulkas, Mazidi, & Herre, 2019) 一些应用程序取得了成功 (Weron, 2014),在这些应用中,预测(extrapolated)序列通常很多、很长并且伴随着解释变量,但 ML 在更典型的时间序列预测中,算法的性能通常是有限的,不能使用回归,通常低于预期(Makridakis、Spiliotis 和 Assimakopoulos,2018b)。尚未为时间序列预测创造流行 ML 用于预测算法和预处理时间序列数据。
ML 算法的优点实际上是它们成功使用的要求交叉学习(cross-learning),即使用许多序列来训练单个模型。这与标准的统计时间序列算法不同,后者为每个序列开发一个单独的模型。但是,为了跨多个时间序列学习,需要仔细考虑预处理。 NNs 这方面特别敏感,稍后会扩大。
预处理有很多好的规则,但仍然是实验密集型艺术。这种方法是 M4 成功的最重要因素之一是动态预处理,这是训练过程的固有部分。重要的是,该预处理参数正在通过 NN 更新权重相同的整体优化程序(随机梯度下降),其总体目标是准确预测(预测误差最小化)。
实际上,预处理参数来自指数平滑族某些模型的更新公式(略微简化)。所以这里介绍的是一种混合预测方法,它将指数平滑 (ES) 高级长短记忆模型 (LSTM) 混合神经网络在通用框架中。 ES 方程使这种方法它能有效地捕获季节性和水平等单个序列的主要成分 LSTM 网络允许非线性趋势和交叉学习。在这方面,分层使用数据,这意味着提高预测准确性。
本文的其余部分安排如下。 2 第一节介绍了这种方法,并在一般意义上描述了它 3 实现细节更多。 4 最后,节日总结了最近 NN 在此背景下,系统和概率编程语言提供的一些通用建模可能性可以追溯到本文所描述的模型的发展。
2. Methodology
2.1. Intuition and overview of the hybrid method
该方法有效 ES 模型与 LSTM 结合网络,提供比纯统计或 ML 该方法生成的预测更准确,以避免它们的缺点,同时利用它们的优点。这种混合预测方法有三个主要要素:
-
i)去季节化和自适应标准化(deseasonalization and adaptive normalization)
-
ii)预测的生成(generation of forecasts)
-
iii)集成(ensembling)
使用第一个元素状态空间 ESstyle 公式实现的。初始季节性分量(例如,季度序列设置为 4)和平滑系数(在单个季节性系统中,设置为 2)是每个序列的参数,并通过随机梯度下降 (SGD) 与全局 NN 一起拟合权重。了解这些参数和序列值计算季节性成分和水平,用于去季节性和标准化。季节性序列的去季节化是 M4 比赛很重要,因为序列是作为没有任何时间戳的数字向量提供的,所以不能结合期几或月份数字等日历特征。此外,该序列来自许多来源,因此它们的季节性模式各不相同。
第二个元素是一个神经网络(NN),它对去季节化和标准化数据进行操作,提供未来的视野步长(例如,在每月序列的情况下为 18 个点)输出,这些输出随后被重新标准化和重新季节性化以产生预测。 NN 是全局的,可以跨多个时间序列进行学习。
最后一个元素是集成上一步中的预测。这包括集成由多个独立运行的单个模型产生的预测,有时由同时训练的模型的一个子集产生,以及对最近训练时期产生的预测进行平均。该过程进一步增强了该方法的稳健性,减轻了模型和参数的不确定性(Petropoulos, Hyndman, & Bergmeir, 2018),同时还利用了组合的有益效果(Chan & Pauwels, 2018)。
基于以上所述,可以说该方法具有以下两个特殊特征:
- 它是混合的,从某种意义上说,统计建模(ES 模型)与 ML 算法(LSTM 网络)同时结合。
- 它本质上是分层的,从某种意义上说,全局(适用于所有序列的大子集)和局部(分别适用于每个序列)参数被用来实现交叉学习,同时也强调被预测时间序列的特殊性。
2.2. Method description
2.2.1. Deseasonalization and normalization
M4 时间序列,即使在同一频率(例如每月)子集中,也来自许多不同的来源,并表现出季节性模式。此外,没有提供该序列的开始日期。在这种情况下,NN 无法学习如何有效地处理季节性问题。一个标准的补救措施是在预处理时应用去季节化。该解决方案足够但并不理想,因为它将预处理与预测完全分开,并且分解的质量可能在接近序列末尾时最差,在该序列中它对预测最重要。人们还可以观察到,去季节化算法,无论多么复杂和强大,都不是为 NN 设计的好的预处理器。经典统计模型,例如来自指数平滑序列的统计模型,展示了一种更好的方法:预测模型具有处理季节性的组成部分。
在包括 LSTM 在内的大多数 NN 变体中,权重 wij 的更新大小与最终误差成正比,但也与相关信号强度的绝对值(从当前层的神经元 i 到下一层的神经元 j)成正比。因此,NN 的行为类似于模拟设备,即使在数字计算机上实现也是如此:小值输入在学习过程中的影响很小。将每个序列全局标准化为 [0-1] 之类的区间也是有问题的,因为要预测的值可能位于此范围之外,更重要的是,对于在其生命周期内变化很大的序列,序列中具有小的值将被忽略。最后,关于趋势强度的信息丢失了:两个序列的长度和形状相似,但一个从 100 增长到 110,另一个从 100 增长到 200,在 [0-1] 标准化后看起来非常相似。因此,虽然归一化是必要的,但它应该是自适应的和局部的,其中“归一化器”遵循序列值。
2.2.2. Exponential smoothing formulas
请记住,M4 序列都具有正值,因此选择了具有乘法季节性的 Holt (Gardner, 2006) 和 Holt and Winters (Hyndman, Koehler, Ord, & Snyder, 2008) 模型。然而,这些通过消除线性趋势得到了简化:NN 的任务是产生一个最有可能是非线性的趋势。此外,根据数据的频率,使用了非季节性(年度和每日数据)、单季节(每月、每季度和每周数据)或双季节(每小时数据)模型(Taylor,2003)。每种情况的更新公式如下:
参数说明:
- y t y_t yt :序列在点 t t t 处的值
- l t l_t lt :水平分量
- s t s_t st :季节性分量
- u t u_t ut :第二季节性分量
- K K K :每个季节期间的观察次数,即对于季度,其值为 4,对于每月,其值为 12,对于每周,其值为 52。
- L L L 是季节性周期内每秒的观察次数(对于每小时数据,为 168)。
- s t s_t st 和 u t u_t ut 始终为正,而平滑系数 α α α、 β β β 和 γ γ γ 取值介于 0 和 1 之间。通过将 e x p ( ) exp() exp() 应用于初始季节性分量的基础参数,并将 s i g m o i d ( ) sigmoid() sigmoid() 应用于平滑系数的基础参数,可以轻松实现这些限制。
2.2.3. On-the-fly preprocessing
上述公式允许为每个序列的所有点计算水平和季节性分量。然后,这些组件在动态预处理期间用于去季节化和自适应归一化。此步骤是该方法的关键部分,在本节中进行了描述。
每个序列都针对每个训练时期重新进行预处理,因为参数(初始季节性分量和平滑系数)以及结果水平和季节性分量在每个时期都不同。
应用了恒定大小、滚动输入和输出窗口的标准方法,如图 1 所示,对于每月序列的情况。输出窗口的大小始终等于预测范围(例如,每周序列为 13),而输入窗口的大小由一个规则确定,对于季节性序列,它应该至少覆盖一个完整的季节性周期(例如,在季度序列的情况下 ≥ 4),而对于非季节性序列,输入窗口的大小应接近预测范围。但是,确切的大小是在进行实验(回测)之后定义的。请注意,与许多其他基于循环神经网络 (RNN) 的序列处理系统不同,输入大小大于 1。这效果更好,因为它允许 NN 直接接触该序列的直接历史。
预处理相当简单:在每一步中,输入和输出窗口中的值通过将它们除以输入窗口中水平的最后一个值(图 1 上的粗蓝点)进行归一化,然后,在这种情况下季节性时间序列,进一步除以相关的季节性成分。这导致输入和输出值接近 1,而与序列的原始幅度及其历史无关。最后,应用了一个压缩函数 log()。压缩函数可防止异常值对学习产生过大且令人不安的影响。
此外,时间序列的域(例如金融或宏观)被独热编码为六长向量,并附加到时间序列派生的特征上。域信息是唯一可用的元信息,我认为将 NN 暴露给它是谨慎的。
在对 NN 进行预处理时,通常值得增加输入窗口的大小并提取更复杂的特征,例如季节性强度或可变性,但由于多种原因,这里没有采用这种方法。最重要的是,许多序列太短而无法提供大的输入窗口,这意味着它们不能用于回测。另一个原因是,创建有效总结序列特征的特征(无论其长度如何)并不简单。直到比赛结束后,我才注意到一个名为 tsfeatures 的有前途的 R 包(Hyndman, Wang, & Laptev, 2015; Kang, Hyndman, & Smith-Miles, 2017)。
2.2.4. Forecast by NNs
如上所述,NNs 在去季节化、自适应归一化和压缩值上运行。他们的输出需要通过以下方式“展开”:
对于非季节性模型:
其中 x 是预处理的输入(向量),NN(x) 是 NN 输出(向量),lt 是时间 t(最后一个已知数据点)的水平值,h 是预测范围。所有操作都是元素级的。以上总结在图 2 中。
请注意,最终预测实际上是许多此类预测的集合,该过程将在本文后面解释。
2.2.5. Architectures of neural networks
为了更好地理解实现,将预测系统的参数分为以下三组:
- 局部常数:这些参数反映了单个序列的行为;在我们浏览该序列时,它们不会改变。例如,ES 模型的平滑系数以及初始季节性分量是局部不变(恒定)参数。
- 局部状态:这些参数随着时间的推移而变化。例如,水平和季节成分,以及循环的 NN 状态,都是局部状态。
- 全局常数:这些参数反映了在大序列集合中学习到的模式,并且是常数;它们不会在我们浏览序列内容时发生变化。例如,用于 NN 系统的权重是全局常数。
典型的统计时间序列方法是在单个序列上训练的,这意味着它们只涉及局部常数和局部状态参数。另一方面,标准 ML 方法通常在大型数据集上进行训练,仅涉及全局参数。这里描述的混合方法使用所有三种类型的参数,部分是全局的,部分是特定于时间序列的。通过使用动态计算图 (dynamic computation graph, DCG) 系统,这种类型的建模成为可能,例如 DyNet (Neubig, Dyer, Goldberg, Matthews, Ammar, Anastasopoulos, et al., 2017), PyTorch (Paszke, Gross, Chintala, Chanan , Yang, DeVito, et al., 2017) 和 TensorFlow 在“急切模式”(Abadi, Agarwal, Barham, Brevdo, Chen, Citro, et al., 2015)。静态和动态计算图系统之间的区别在于后者能够为每个样本重新创建计算图(由 NN 系统在幕后构建),这里是每个时间序列。因此,每个序列可能具有部分唯一和部分共享的模型。对于每种频率和输出类型(点预测或预测间隔),部署的架构都不同。
在高层次上,模型的神经网络是 dilated (膨胀的) LSTM-based 堆栈 (Chang, Zhang, Han, Yu, Guo, Tan, et al., 2017),有时后跟一个非线性层,并且总是后跟一个线性“适配器 (adapter)”层,其目标是使最后一层的状态大小适应输出层的大小 (预测范围,或者在预测区间 (PI) 模型的情况下是预测范围的两倍)。LSTM堆栈由许多块 (这里是1–2) 组成。在两个 (理论上更多) 块的情况下,使用 Resnet 风格的快捷方式将一个块的输出添加到下一个块的输出。每个块都是一到四层的序列,属于三种类型的膨胀 LSTMs之一:标准 (Chang et al., 2017),具有注意机制 (Qin, Song, Chen, Cheng, Jiang, & Cottrell, 2017) 和特殊残差版本 (Kim, El-Khamy, & Lee, 2017)。
膨胀 LSTM 使用来自先前(但不一定是最新)步骤的隐藏状态作为其输入的一部分。在标准LSTMs和相关单元中,t 时刻的部分输入是来自步骤 t-1 的隐藏状态。在膨胀因子为 k 的单元中,隐藏状态取自步骤 t-k,例如 k=3,这里是 t-3。这提高了长期记忆性能。按照膨胀 LSTM 的惯例 (Chang et al., 2017),它们被部署在具有不断增加的扩张的单元堆栈中。类似的标准非膨胀 LSTM 块的表现稍差。如果将循环神经网络替换为非循环神经网络,性能会出现更大的下降,这表明循环神经网络状态对于更一般地处理时间序列和序列很有用。
循环 NN 注意力机制的一般思想是,不是像标准 LSTM 中那样使用先前的隐藏状态,也不是像扩张 LSTM 那样使用延迟状态,而是计算应用于多个过去隐藏状态的权重为了创建一个人为的加权平均状态。这允许系统动态地 “关注” 特定的单个状态或一组过去的状态。我的实现是膨胀 LSTM 的扩展,因此最大后视范围等于扩张。在每周序列的情况下,网络由具有两层的单个块组成,编码为注意力 (1,52)。第一层膨胀等于 1,因此它是标准 LSTM,但第二层计算过去 52 个隐藏状态的权重(当它们变得可用时,因此在第 53 点或更晚的时候逐步通过一序列时)。权重是使用嵌入到 LSTM 中的单独的标准两层 NN 计算的;它的输入是 LSTM 输入和最后一个隐藏状态的串联,它的权重通过对所有其他参数进行操作的相同梯度下降机制进行调整。
图 3 显示了三个配置示例:
第一个生成季度序列的点预测 (PF)
第二个生成月序列的 PF
第三个生成年度序列的预测区间 (PI)
- a)NN 由两个块组成,每个块都包含两个膨胀 LSTM,它们通过第二个块周围的快捷方式连接。最后一个元素是“适配器层”,它只是一个标准线性层(传递函数等于恒等式),它将来自第四层(膨胀 = 8 的层)的隐藏输出(通常为 30-40 长)调整为预期的输出大小(此处为 8)。
- b)NN 由一个由四个扩张的 LSTM 组成的单个块组成,具有根据 (Kim et al., 2017) 的残差连接。请注意,快捷箭头正确指向残差 LSTM 单元的内部;这是一个非标准的残差捷径。
- c)NN 由一个单个块组成,该块由两个具有注意机制的扩张 LSTM 组成,然后是一个密集的非线性层(使用 tanh() 激活),然后是一个输出两倍大小的线性适配器层,以便同时生成下限和上限的预测。注意机制 (Qin et al., 2017) 显着减慢了计算速度,但有时表现最好。
后来,我提供了一个表格,列出了所有案例的架构和超参数,而不仅仅是这三个。请记住,虽然图表仅显示模型的全局部分,但每个序列的部分同样重要。
3. Implementation details
本节提供了关于混合方法的更多实现细节。这包括关于损失函数、模型的超参数和集合过程的信息。
3.1. Loss function
3.1.1. Point forecasts
M4竞赛中针对 PFs 案例使用的误差测量是对称平均绝对误差 (symmetric mean absolute error, sMAPE) 和平均标度误差 (mean scaled error , MASE) 的组合 (Makridakis、Spiliotis和Assimakopoulos,2018a)。这两个指标在本质上非常相似,因为它们都是序列的预测值和实际值之间的标准化绝对差值。回想一下,该系统中神经网络的输入已经去季节化和归一化,我假设训练损失函数不需要包括归一化:它可能只是目标值和预测值之间的简单绝对差。然而,在回溯测试期间,很明显模型倾向于具有正偏差,这可能是由于对神经网络的时间序列导出输入和输出应用了压缩函数 log() 的结果。系统在对数空间中学习,但是最终的预测误差在线性空间中计算。为了应对这种情况,使用了 τ 值略小于 0.5 (通常为0.45–0.49) 的 pinball loss。pinball loss 定义如下:
因此,pinball 函数是不对称的,对分位数以上和分位数以下的实际值进行不同的惩罚,以便允许该方法处理偏差。它本身就是一个重要的损失函数;最小化它会产生分位数回归 (Takeuchi,Le,Sears,&Smola,2006)。
3.1.2. Prediction intervals
弹球损失函数也可以用于生成 PI。要求的覆盖率为95%,因此可以尝试预测 2.5% 和 97.5% 的间隔。然而,PI 的竞争度量并不是基于上下弹球的单独损失;相反,它是一个称为平均刻度间隔分数 (mean scaled interval score, MSIS) 的单一公式 (Makridakis et al., 2018a)。再一次省略了MSIS的分母,因为神经网络的输入已经不再是季节性的和标准化的。应当指出的是,尽管该方法在所有提交的方法中提供了最精确的指标值,但在指标值的情况下仍然可以观察到上述正偏差,超过上限区间的频率比超过下限区间的频率低。
在这一点上,我想提请读者注意基于神经网络的系统的伟大实用特征:创建与商业/科学目标一致的损失函数的简便性。对于此应用程序,损失函数与 M4 竞赛中使用的精度指标保持一致。
3.1.3. Level wiggliness penalty
直观上,该水平应该是时间序列的平滑版本,没有季节性模式。人们会认为这是次要的,更多的是审美层面的要求。然而,事实证明,水平的平滑度对预测精度有很大影响。似乎当神经网络的输入平滑时,神经网络集中于预测趋势,而不是过度拟合一些虚假的季节性相关模式。平稳的水平也意味着季节性成分适当地吸收了季节性。在函数数据分析中,二阶导数平方的平均值是对曲线波动的一种普遍惩罚(Ramsay & Silverman,2002)。然而,这种惩罚可能过于严格,在应用于偶尔有较大偏移的时间序列时不够稳健。在这方面,使用了这一惩罚的修改版本,计算如下:
该惩罚,乘以50-100范围内的常数参数,称为水平可变性惩罚 (level variability penalty, LVP),被添加到 PFs 和 PIs 损失函数中。水平摆动罚分显著影响了该方法的性能,可以想象,如果没有它,该提交物就不会赢得M4竞赛。
3.2. Ensembling and data subsetting
为六个单频率子集 (每日、每周等) 中的每一个建立了两个模型(一个用于PFS,一个用于PI)。每一个模型实际上都是几个层次的集成,如下所示。
3.2.1. Independent runs
一次运行包括模型的完整训练以及为子集中的所有序列生成预测。然而,由于参数初始化是随机的,所以对给定序列的每次运行都会产生稍微不同的预测。由不同运行构建的集成模型可以减轻随机性的影响,降低不确定性。回溯测试表明,将运行次数增加到6–9以上并不能提高预测的准确性,因此,独立运行的次数也相应地受到了限制。
3.2.2. Ensemble of specialists or simple ensemble
当它在计算上可行时,除了月度和季度序列之外,结果是所有的模型都是这样的,使用几个同时训练的模型,从不同的序列子集学习,而不是训练一个单一的模型。这种方法被称为**“专家集合”**,最初是由 Smyl (2017) 提出的,现总结如下。
主要思想是,当数据集包含来自未知来源的大量序列时,有理由假设这些序列可能被分组为子集,这样,如果对每个组使用单独的模型而不是对整个数据集使用单一模型,则整体预测准确性将会提高。但是,没有直接执行分组任务的方法,因为来自不同来源的序列可能看起来和行为类似。此外,使用通用度量对序列进行聚类可能对提高预测准确性没有帮助。在这方面,专家集成算法同时训练多个模型 (神经网络和每序列参数),并迫使它们专注于序列的子集。该算法总结如下:
- 创建一个模型池 (如七个模型),并随机分配一部分 (如时间序列的一半) 给每个模型。
- 对于每个模型:
- (a) 在分配的子集上执行单个训练。
- (b) 记录整个训练集的表现 (样本内,一个序列训练部分所有点的平均值)。
- 对每个序列的模型进行排序,然后将每个序列分配给前N个 (例如两个) 最佳模型。
- 重复步骤 2 和 3,直到验证区域的平均误差开始增大。
因此,特定序列的最终预测是前 N 个模型产生的预测的平均值。这里的主要假设是连续性:如果特定模型擅长预测序列的样本内部分,那么它也有望在序列的样本外部分显示准确的结果。用于各个模型的架构和输入保持不变。不同时期之间的不同并被积极操纵的是每个模型的训练数据集的组成。图 4 显示了十个序列在总共七个模型和两个顶级模型中的分配示例。
一种更简单的方法,这里称为简单集合,用于月度和季度数据,而不是专家集合。在这种情况下,数据在每次运行开始时被分成两个不重叠的集合,然后对模型进行训练并对两半进行预测。这是一种装袋,而且效果也很好。
值得一提的是,在 Smyl (2017) 的工作中,专家团队将 M3 月度数据集的预测准确度提高了约 3%。然而,报告的差异并不稳定,这取决于数据和所用模型的质量。因此,需要做更多的工作来清楚地描述每种方法的优势领域。
3.2.3. Stage of training
由最近训练时期中的几个(例如 4-5 个)生成的预测被集成以提供单一预测。整个训练通常使用 10-30 个 epoch;因此,以 20 个 epoch 为例,最终预测实际上是 16、17、18、19 和 20 epoch 产生的预测的平均值。
3.3. Backtesting
回测通常是通过从每个序列中删除最后一个水平点数中的一个,但有时是两个(例如,每月数据为 18 或 36 个),并在具有此类缩短序列的集合上训练系统。然而,虽然训练步骤从未暴露于移除的值,但系统在每个 epoch 之后都在验证(移除)区域进行了测试,结果指导了架构和超参数的选择。在实践中,在最后一个水平点数和倒数第二个水平点数上进行测试时,验证结果之间存在非常强的相关性,通常使用前一种方法,因为它也承认更大数量的序列(许多也是如果删除了一个以上的水平点数,则用于回测)。
虽然许多序列很短,但也有许多非常长,例如代表 300 多年的月度数据。此类序列的早期部分对预测准确性的用处并不明显,但它们涉及明显的计算需求。因此,长序列被缩短,只保留最近的“最大长度”点。最大长度超参数经过测试并从一个相对较小的值增加,直到在回测中没有观察到准确度的进一步有意义的提高。它与其他超参数一起列在表 1 中。
3.4. Hyperparameters
所有超参数都是使用推理、直觉和回测的某种组合来选择的。用于防止过拟合的主要工具是提前停止:在训练期间,验证区域的平均准确率(通常是最后输出水平的点数,参见图 1)在每个训练时期后计算。在进行最终(使用所有数据)学习和预测时,记录具有最低验证错误的时期并用作最大时期数。学习率计划也是通过观察每个 epoch 后的验证错误来决定的。
表 1 列出了所有使用的 NN 架构和超参数。如果 PI 模型使用与 PF 模型相同的值,则不会重复这些值。关于每个的一些评论:
集成(ensembling)
简单的集成或专家的集成。在后一种情况下,它被详细描述为 topN/numberOfAllModels,例如4/5,见第 3.2.2 节。在年度数据的情况下,两种集成方法都进行了尝试,但在每日、每周和每小时数据的情况下,专家的集成是在没有实验的情况下选择的,因为相信它应该会提供更好的结果。
NN 架构
它被编码为一个块序列,在括号中,参见第 2.2.5 节。块周围的残差捷径,或在根据 Kim (2017) 的LSTMs 的特殊情况下,层周围的剩余快捷方式。每种序列的架构:
- 月度序列使用单个块的特殊残差层。
- 每季度、每天和每小时的序列使用了可能应该是标准架构的东西(因为它似乎在 M4 竞赛之外的其他环境中也能很好地工作):两个扩展的 LSTM 层的两个块。
- 年度序列的点预测模型使用单个带有注意力的扩张 LSTM 块,编码为注意力 (1,6),而预测间隔模型添加了一个标准的带 tanh() 激活的密集层,我称之为非线性层 (NL ),因此这被编码为attentive (1,6), NL。
- 如上所述,每周序列的架构使用了细心的 LSTM。
- 与表中的其他情况一样,所选择的架构是一些推理/信念和实验的结果。我认为,在季节性序列的情况下,至少一个膨胀应该等于季节性,而另一个应该在预测范围的范围内。架构很可能过度拟合回测结果;例如,更标准的架构 (1,3)– (6,12) 或 (1,3,12) 几乎肯定也适用于月度序列(没有特殊的剩余架构)。
LVP
LVP 代表水平可变性惩罚,是应用于水平摆动惩罚的乘数。它仅适用于季节性车型。该值不是很敏感,因为即使更改 50% 也不会产生太大影响。但是,它仍然很重要。
- 时期数(Number of epochs):最终训练和预测运行的训练时期数是通过实验选择的,以使验证区域的误差最小化。学习率和 epoch 数之间存在明显的相互作用:更高的学习率需要更少的 epoch。影响它们的另一个因素是子集的计算要求:子集中的大量序列迫使偏好更少的时期(因此更高的学习率)。
- 学习率:第一个数字是初始学习率,在训练期间通常会降低。例如,在年度 PI 模型的情况下,它从 1e-4 开始,但在第 17 期减少到 3e-5,在第 22 期再次减少到 1e-5。时间表是观察验证行为的结果每个训练时期后的错误。当他们在大约两个 epoch 上趋于平稳时,学习率降低了 3-10 倍。
- 最大长度:该参数列出了所用系列的最大长度,请参见第 3.3 节。在每小时系列的情况下,没有截断,所有系列都以原始长度使用。
- 训练百分比:见第 3.1.1 节。
- LSTM 的状态大小:LSTM 单元维护一个数字向量,称为状态,它是它们的记忆。状态的大小不是一个敏感参数,大于 30 的值运行良好。较大的值会减慢计算速度,但会略微减少所需的时期数。使用更大的状态对准确性没有好处。
3.5. Implementation
该方法通过四个程序实现:两个使用专家集成,两个使用简单集成,如前所述。每对包含一个用于生成 PF 的程序和另一个用于估计 PI 的程序。如果比赛今天发生,可能只需要两个程序,一个使用专家集成,另一个使用简单集成,因为 PI 和 PF 可以通过修改损失函数和架构从单个程序生成。该方法是用 C++ 编写的,依赖于 DyNet 库 (Neubig et al., 2017)。它可以在Windows、Linux或Mac上编译运行,并且可以选择写入关系数据库,如 SQL Server 或 MySQL,方便分析回测结果,在实践中非常有用。这些程序使用 CPU,而不是 GPU,并且旨在并行运行。该代码可在 M4 GitHub 存储库 (https://github.com/M4Competition/M4-methods) 上公开获得,以促进可复制性并支持未来的研究 (Makridakis, Assimakopoulos, & Spiliotis, 2018)。代码注释很好,是对方法的最终描述。
3.6. What did not work well and recent changes
该方法对大多数频率产生了准确的预测,尤其是每月、每年和每季度的预测。然而,对于每日和每周数据的情况,准确性并不理想。这可以部分解释为作者专注于“三大”子集:月度、年度和季度,因为它们涵盖了 95% 的数据,并且在它们上表现出色是竞争成功的关键。然而,随后对每日和每周数据的研究证实,在这些频率上表现不佳是一个真正的问题。
自比赛结束以来,已经尝试了几项改进。其中一项尝试在每日和每周数据的准确性上取得了显着提高,使性能达到最佳基准的水平如下。在分析平滑系数的值时,由于它们随着经过的训练时期而变化,很明显它们似乎并没有在后期时期趋于平稳,因为梯度下降似乎没有足够强烈地推动它们。因此,为它们分配了一个单独的、更大的学习率,它是主学习率的三倍数,这具有所需的效果。 nts 变化很快,最终在后期趋于稳定。
4. Hybrid, hierarchical, and understandable ML models
本节首先总结模型的主要特征,然后概述其技术和方法的概括和更广泛的含义。同样在这种情况下,我回顾了导致本文描述的模型制定的步骤。
获胜的解决方案是一种混合预测方法,它混合了受指数平滑启发的公式,用于对序列进行去季节化和标准化,并使用先进的神经网络来推断序列。同样重要的是该方法的层次结构,它将通过许多时间序列(NN 的权重)学习的全局部分与时间序列的特定部分(平滑系数和初始季节性分量)相结合。该方法的第三个主要组成部分是在多个层次上广泛使用集成。前两个功能是由现代神经网络自动微分系统和动态计算图提供的强大功能实现的(Paszke et al., 2017)。
自动微分允许构建使用由两组组成的表达式的模型:一个相当广泛的基本函数列表,如 sin()、exp() 等,以及一个运算符列表,如矩阵和元素乘法、加法,倒数等。使用矩阵运算和一些非线性函数的神经网络只是允许的表达式的示例。梯度下降机制适合所有这些表达式的参数。在这里描述的模型中,既有 NN 部分也有 nonNN 部分(受指数平滑启发的公式)。构建对复杂的技术或业务知识进行编码的模型是非常可行的。
动态计算图允许构建具有全局和局部(此处为每个时间序列)表达式和参数的层次模型。也可以有每组部分。模型可以很笼统;例如以经典的统计方式:
Student performance = School impact + Teacher impact + Individual impact.
请注意,每个组件都可以是一个单独的 NN,一个难以理解的黑匣子。但是,我们可以观察和量化每个黑匣子的影响,无论是一般情况下还是在每种情况下,我们都会得到一个部分可理解的 ML 模型。
自动微分也是概率编程语言 Stan 的一个基本特征(Carpenter, Hoffman, Brubaker, Lee, Li, & Betancourt, 2015)。它主要使用 Hamiltonian Markov chain Monte Carlo 拟合模型,因此优化是不同的,但底层的自动微分感觉非常相似。 Stan 和 DyNet 之间建模能力的相似性导致了所提出模型的制定,如下文更详细描述的那样。
到 2016 年年中,我和我的合作者在 Stan 中成功地创建了 Holt 和 Holt-Winters 模型的扩展和推广(我将这个模型家族称为 LGT:局部和全局趋势模型;参见 Smyl & Zhang,2015 和 Smyl , Bergmeir, Wibowo, & Ng, 2019),并尝试将它们与 NN 模型一起使用 (Smyl & Kuber, 2016)。后来,我还尝试为 M3 Competition 数据集构建 NN 模型(Smyl,2017)。我能够在年度(因此非季节性)子集上击败经典统计算法,但无法在月度子集上做到这一点。对于季节性系列,我使用 STL 分解作为预处理的一部分,因此显然它效果不佳。此外,在 M3 数据的每个类别中,我的 LGT 模型都比我的 NN 模型更准确。因此,当我意识到 DyNet 和 Stan 一样,允许对广泛的模型进行自由编码时,我决定将 LGT 的想法(例如处理季节性)应用于 NN 模型。这就是 M4 获胜解决方案的诞生方式。