logo

时间序列预测-深度学习

王哲峰 / 2022-04-25


目录

深度学习方法近年来逐渐替代机器学习方法,成为人工智能与数据分析的主流, 对于时间序列的分析,有许多方法可以进行处理。 常见的利用神经网络技术来做时间序列预测的方法有 CNN、RNN、LSTM、GRU、Seq2Seq 等

相对于传统的树模型需要人工构建相关模型特征, 神经网络模型通常需要喂入大量的数据来进行训练, 因此如果同类时序的数据量够多(有够多彼此间相关性较强的时序), 那么训练一个通用型的端对端的神经网络预测有时也有不错的效果, 比如使用 LSTM 一方面可以较容易地整合外部变量, 另一方面 LSTM 有能较好地自动提取时序特征的能力

深度学习的思路是尽量只使用原始的序列和其它相关输入信息,基本不做特征工程, 希望通过各类模型结构自动学习到时序的隐含表达,进而做端到端的预测输出

循环神经网络 RNN

循环神经网络(RNN)框架及其变种(LSTM/GRU/…)是为处理序列型而生的模型, 天生的循环自回归的结构是对时间序列的很好的表示。所采用的方式也是监督学习, 不过不需要人为的构建时序特征,可以通过深度学习网络拟合时序曲线, 捕捉时间先后顺序关系,长期依赖,进行特征学习与预测

LSTM

GRU

DeepAR

亚马逊提出的一个网络架构,也是基于 Seq2Seq,不过 DeepAR 的输出是一个概率分布, 这也是它与传统 RNN 系列最大的一个区别

img

LSTNet

Long-and Short-term Time-series Network(LSTNet) 专门设计用于时间序列预测的深度学习网络, 该网络特点有如下5点:

网络结构

img

预测包含两部分,最终结果是非线性预测和线性预测的结合:

网络参数

Seq2Seq

img

基本是借鉴了 NLP 里的经典架构,使用 RNN/GRU/LSTM 作为基本单元, encoder 中做训练窗口中的信息提取,然后在 decoder 中做预测 horizon 的多步输出

WaveNet

NN 系列模型不好并行,所以突然发现谷歌提出的这个空洞因果卷积感觉很高级, 性能理论上也比 RNN 之类的好很多,它的结构大致长这样

img

TFT

可以与树模型匹敌的深度学习模型了!这就是 Google AI 提出的 Temporal Fusion Transformers。 也是本文提到的第一个带 transformer 结构的模型

卷积神经网络 CNN

传统的卷积神经网络(CNN)一般认为不太适合时序问题的建模,这主要由于其卷积核大小的限制, 不能很好的抓取长时的依赖信息。但是最近也有很多的工作显示, 特定的卷积神经网络结构也可以达到很好的效果,通常将时间序列转化为图像,再应用基于卷积神经网络的模型做分析

格拉姆角场 GAF

格拉姆角场,Gramian Angular Field(GAF) 的核心思想是:将笛卡尔坐标系下的一维时间序列, 转化为极坐标系表示,再使用三角函数生成 GAF 矩阵。计算过程如下:

短时傅里叶变换 STFT

短时傅里叶变换,Short Time Fourier Transform(STFT) 在语音信号处理场景使用很广泛, 其目标主要将时间序列转为时频图像,进而采用卷积网络进行特征分析

时间卷积网络 TCN

时间卷积网络,Time Convolution Network(TCN) 是一种特殊的卷积神经网络,针对一维空间做卷积,迭代多层捕捉长期关系。 具体的,对于上一层 $t$ 时刻的值,只依赖于下一层 $t$ 时刻及其之前的值。 和传统的卷积神经网络的不同之处在于,TCN 不能看到未来的数据,它是单向的结构,不是双向的。 也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此又被称为因果卷积

基于注意力机制的模型 Attention

在 RNN 中分析时间序列需要一步步按顺序处理从 $t-n$$t$ 的所有信息, 而当它们相距较远($n$ 非常大)时 RNN 的效果常常较差,且由于其顺序性处理效率也较低。 基于注意力机制(Attention)的模型,采用跳步的方式计算每个数值之间的两两关联, 然后组合这些关联分数得到一个加权的表示。该表示通过前馈神经网络的学习,可以更好的考虑到时序的上下文的信息

CNN 和 RNN 和 Attention

结合 CNN + RNN + Attention,作用各不相同互相配合,主要设计思想:

Transformer

N-Beats

出自 Element AI,Bengio 是其中的 Co-Founder。第一次见到它是来自 M5 比赛亚军的分享, 不过他也只是在 top-level 的预测中使用了一下 N-Beats 模型

img

N-Beats 专注于做单变量的时序预测,且可以具有一定的 seasonality,trend 的可解释性, 跟 Prophet 很相似。从论文的实验来看,作者使用了非常重的 ensemble, 每个序列搞了 180 个模型的 bagging。这感觉有点过于“杀鸡用牛刀”了……我们实测下来也没有取得很好的效果, 而且看起来还不好加额外的特征变量,使用场景很受限

参考