关注微信公众号“时序人”获取更好的阅读体验
时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。
需要明确一点的是,与回归分析预测模型不同,时间序列模型依赖于数值在时间上的先后顺序,同样大小的值改变顺序后输入模型产生的结果是不同的。如之前的文章所介绍,时间序列可以分为平稳序列,即存在某种周期,季节性及趋势的方差和均值不随时间而变化的序列,和非平稳序列。如何对各种场景的时序数据做准确地预测,是一个非常值得研究的问题。
本文为大家总结时间序列预测的有关方法,浅析这些技术并探索如何可以提高这些方法的预测效果。
要预测一个时间序列,我们首先需要发现其变化的规律。最基本的方法,就是通过人工经验,挖掘时序数据的演化特征,找到时序变化的周期,从而预估时间序列的未来走势。具体的观察一个时间序列,当序列存在周期性时,提取时间序列的周期性特征进行预测。
之前我们介绍了时间序列的统计分析方法,arma。该方法可以将时间序列的演化变为数学参数,天然的,我们可以通过拟合好的模型,进行时间序列的预测。
传统的参数预测方法可以分为两种,一种拟合标准时间序列的餐顺方法,包括移动平均,指数平均等;另一种是考虑多因素组合的参数方法,即AR,MA,ARMA等模型。这类方法比较适用于小规模,单变量的预测,比如某门店的销量预测等。总的来说,基于此类方法的建模步骤是:
这类方法一般是统计或者金融出身的人用的比较多,对统计学或者随机过程知识的要求比较高。而在数据挖掘的场景中比较难适用,因为需要大量的参数化建模。比如有一个连锁门店的销售数据,要预测每个门店的未来销量,用这类方法的话就需要对每个门店都建立模型, 这样就很难操作了。
这类方法可以参考:时间序列统计分析
时间序列分解法是数年来一直非常有用的方法,一个时间序列往往是一下几类变化形式的叠加或耦合:
加法模型的形式如下:
X t = T t + S t + C t + I t X_t = T_t + S_t + C_t + I_t Xt=Tt+St+Ct+It
加法模型中的四种成分之间是相互独立的,某种成分的变动并不影响其他成分的变动。各个成分都用绝对量表示,并且具有相同的量纲。
乘法模型的形式如下:
X t = T t × S t × C t × I t X_t = T_t \times S_t \times C_t \times I_t Xt=Tt×St×Ct×It
乘法模型中四种成分之间保持着相互依存的关系,一般而言,长期趋势用绝对量表示,具有和时间序列本身相同的量纲,其他成分则用相对量表示。
以上两种方式的混合
在原时间序列内依次求连续若干期的平均数作为其某一期的趋势值,如此逐项递移求得一系列的移动平均数,形成一个平均数时间序列。
使用回归分析中的最小二乘法,以时间t或t的函数为自变量拟合趋势方程。常用的趋势方程如下:
时间序列短期会受季节等短期因素影响,从而存在一些周期性
乘法模型中的季节成分通过季节指数来反映。常用的方法称为移动平均趋势剔除法。步骤如下:
时序长期来看会存在一个循环往复,通常通过剩余法来计算循环变动成分C:
除了以上三种变动信息,剩下的为不规律的时序变动信息。如有需要,可以进一步分解出不规则变动成分:
I = T × S × C × I T × S × C I = \frac{T \times S \times C \times I}{T \times S \times C} I=T×S×CT×S×C×I
对于一个时间序列,剔除长期趋势,季节性,循环变动因素之后,剩下的就是不规则变动因素
这里特别提一个Facebook 所服务化的时间序列预测工具,prophet,官网可以参考官网说明(英文)。该方法类似于STL时序分解的思路,增加考虑节假日等信息对时序变化的影响。
近年来时间序列预测方法,多采用机器学习方式。机器学习的方法,主要是构建样本数据集,采用“时间特征”到“样本值”的方式,通过有监督学习,学习特征与标签之前的关联关系,从而实现时间序列预测。常用的场景有:
在时间序列预测中的标准做法是使用滞后的观测值 x t − 1 x_{t-1} xt−1,作为输入变量来预测当前的时间的观测值 x t x_t xt。这被称为单步单变量预测。
另一种预测问题类型是使用过去的观测序列 { x t − 1 , x t − 2 , . . . } \{x_{t-1},x_{t-2},...\} {xt−1,xt−2,...}来预测未来的观测序列 { x t , x t + 1 , . . . } \{x_t, x_{t+1},...\} {xt,xt+1,...}。这就是多步预测或序列预测。
另一个重要的时间序列称为多元时间序列,即每个时间有多个观测值, { X t = ( x t a , x t b , x t c , . . . ) } t T \{X_t=(x_t^a, x_t^b, x_t^c,...)\}_t^T {Xt=(xta,xtb,xtc,...)}tT。这意味着我们通过不同的测量手段得到了多种观测值,并且希望预测其中的一个或几个值。例如,我们可能有两组时间序列观测值 { x t − 1 a , x t − 2 a , . . . } \{x_{t-1}^a, x_{t-2}^a,...\} {xt−1a,xt−2a,...}, { x t − 1 b , x t − 2 b , . . . } \{x_{t-1}^b, x_{t-2}^b,...\} {xt−1b,xt−2b,...},我们希望分析这组多元时间序列来预测 x t a x_t^a xta。
基于以上场景,许多监督学习的方法可以应用在时间序列的预测中,比如svm/xgboost/逻辑回归/回归树/…
深度学习方法近年来逐渐替代机器学习方法,成为人工智能与数据分析的主流,对于时间序列的分析,有许多方法可以进行处理,包括:循环神经网络-LSTM模型/卷积神经网络/基于注意力机制的模型(seq2seq)
循环神经网络(RNN)框架及其变种(LSTM/GRU/…)是为处理序列型而生的模型,天生的循环自回归的结构是对时间序列的很好的表示。所采用的方式也是监督学习,不过不需要人为的构建时序特征,可以通过深度学习网络拟合时序曲线,捕捉时间先后顺序关系,长期依赖,进行特征学习与预测。
传统的卷积神经网络(CNN)一般认为不太适合时序问题的建模,这主要由于其卷积核大小的限制,不能很好的抓取长时的依赖信息。 但是最近也有很多的工作显示,特定的卷积神经网络结构也可以达到很好的效果,
方法描述:将笛卡尔坐标系下的一维时间序列,转化为极坐标系表示,再使用三角函数生成GAF矩阵。
计算过程:
- 数值缩放:将笛卡尔坐标系下的时间序列缩放到[0,1]或[-1,1]区间
- 极坐标转换:使用坐标变换公式,将笛卡尔坐标系序列转化为极坐标系时间序列
- 角度和/差的三角函数变换:若使用两角和的cos函数则得到GASF,若使用两角差的cos函数则得到GADF
方法描述:在语音信号处理场景使用很广泛,其目标主要将时间序列转为时频图像,进而采用卷积网络进行特征分析。
时间卷积网络(TCN)是一种特殊的卷积神经网络,针对一维空间做卷积,迭代多层捕捉长期关系。具体的,对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。和传统的卷积神经网络的不同之处在于,TCN不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此又被称为因果卷积。
在RNN中分析时间序列需要我们一步步的顺序处理从 t-n 到 t 的所有信息,而当它们相距较远(n非常大)时RNN的效果常常较差,且由于其顺序性处理效率也较低。基于注意力机制(Attention)的模型,采用跳步的方式计算每个数值之间的两两关联,然后组合这些关联分数得到一个加权的表示。该表示通过前馈神经网络的学习,可以更好的考虑到时序的上下文的信息。
主要设计思想:
难点:
更多原创内容与系列分享,欢迎关注微信公众号“时序人”获取。