#时间序列分析之holtwinters和ARIMA
时间序列是指按时间先后顺序排列的随机序列。所谓时间序列分析,就是根据有序随机变量或观测得到的有序数据之间相互依赖所包含的信息,用概率统计方法定量地建立一个合适的数学模型,并根据这个模型对相应序列所反映的过程或系统作出预报或进行控制。
1.对于任意的时间t,其均值恒为一常数;
2.对于任意的时间t和s,其自协方差和自相关系数只依赖于时间间隔t-s,而与t和s的起止点无关。
这样的时间序列被称为平稳时间序列。也可以认为,如果一个时间序列无明显的上升或下降趋势,各观察值围绕其均值上下波动,这个均值相对于时间来说是一个常数,那么时间序列为平稳序列(弱平稳(Weak stationarity))。
事实上,有两种关于平稳的定义,还有一种强平稳过程:
**强平稳过程(Strict stationarity)?*对于所有可能的n,所有可能的 t 1 , t 2 , . . . , t n t_{1},t_{2},...,t_{n} t1,t2,...,tn,如果所有可能的 Z t 1 , Z t 2 , . . . , Z t n Z_{t_{1}},Z_{t_{2}},...,Z_{t_{n}} Zt1,Zt2,...,Ztn的联合分布与 Z t 1 − k , Z t 2 − k , . . . , Z t n − k Z_{t_{1}-k},Z_{t_{2}-k},...,Z_{t_{n}-k} Zt1−k,Zt2−k,...,Ztn−k相同时,称其为强平稳。
两种平稳过程并没有包含关系,弱平稳不一定是强平稳,强平稳也不一定是弱平稳。强平稳是事实上的平稳,而弱平稳是统计量在观测意义上的平稳(均值、方差)。
平稳的基本思想是:时间序列的行为并不随时间改变。平稳性刻画的是时间序列的统计性质关于时间平移的不变性。我们研究时间序列很重要的一个出发点 是希望通过时间序列的历史数据来得到其未来的一些预测,换言之,我们希望时间序列在历史数据上的一些性质,在将来保持不变,这就是时间平移的不变性。反之,如果时间序列不是平稳的,由历史数据得到的统计性质对未来预测毫无意义。
###2.时间序列的组成
每个时间序列的主要组成部分:
移动平均法存在很多问题:
所有的指数平滑法都要更新上一时间步长的计算结果,并使用当前时间步长的数据中包含的新信息。它们通过”混合“新信息和旧信息来实现,而相关的新旧信息的权重由一个可调整的参数来控制。
####2.1 一次指数平滑法
一次指数平滑法的递推关系如下:
s i = a x i + ( 1 − α ) s i − 1 , 其 中 0 ≤ α ≤ 1 s_{i}=ax_{i}+(1-\alpha)s_{i-1},其中 0 \leq \alpha \leq 1 si=axi+(1−α)si−1,其中0≤α≤1
其中, s i s_{i} si是时间步长i上经过平滑后的值, x i x_{i} xi是这个时间步长上的实际数据。 α \alpha α可以是0和1之间的任意值,它控制着新旧信息之间的平衡:当 α \alpha α接近1,就只保留当前数据点;当 α \alpha α接近0时,就只保留前面的平滑值(整个曲线都是平的)。这个递推关系式很眼熟,cpu_load就是这样计算的!我们展开它的递推关系式:
KaTeX parse error: No such environment: split at position 7: \begin{̲s̲p̲l̲i̲t̲}̲ s_{i}&=\alpha …
可以看出,在指数平滑法中,所有先前的观测值都对当前的平滑值产生了影响,但它们所起的作用随着参数 α \alpha α的幂的增大而逐渐减小。那些相对较早的观测值所起的作用相对较小。从某种程度来说,指数平滑法就像是拥有无限记忆(平滑窗口足够大)且权值呈指数级递减的移动平均法。一次指数平滑所得的计算结果可以在数据集及范围之外进行扩展,因此也就可以用来进行预测。预测方式为:
x i + h = s i x_{i+h}=s_{i} xi+h=si
s i s_{i} si是最后一个已经算出来的值。
####2.2 二次指数平滑法
一次指数平滑法适用于没有总体趋势的时间序列。如果用来处理有总体趋势的序列,平滑值将总是滞后于原始数据,除非 α \alpha α的值接近1,但这样一来就没有平滑性可言。二次指数平滑法保留了趋势的详细信息,从而改正了这个缺点。即我们保留并更新两个量的状态:平滑后的信号和平滑后的趋势。公式如下:
KaTeX parse error: No such environment: split at position 7: \begin{̲s̲p̲l̲i̲t̲}̲ s_{i}&=\alpha …
第二个等式描述了平滑后的趋势。当前趋势的未平滑”值“是当前平滑值和上一个平滑值的差;也就是说,当前趋势告诉我们在上一个时间步长里平滑信号改变了多少。要想使趋势平滑,我们用一次指数平滑法对趋势进行处理,并使用参数 β \beta β。为获得平滑信号,我们像上次那样进行一次混合,但要同时考虑到上一个平滑信号及趋势。假设单个步长时间内保持着上一个趋势,那么第一个等式的最后那项就可以对当前平滑信号进行估计。
若要利用该计算结果进行预测,就取最后那个平滑值,然后每增加一个时间步长就在该平滑值上增加一次最后那个平滑趋势:
x i + h = s i + h t i x_{i+h}=s_{i}+ht_{i} xi+h=si+hti
####2.3 三次指数平滑法
为了描述季节性,我们在二次指数平滑法基础上再添加一个量。公式如下:
KaTeX parse error: No such environment: split at position 7: \begin{̲s̲p̲l̲i̲t̲}̲ s_{i}&=\alpha …
其中, p i p_{i} pi是指”周期性“部分, k k k是这个周期的长度。预测公式如下:
x i + h = s i + h t i + p i − k + h x_{i+h}=s_{i}+ht_{i}+p_{i-k+h} xi+h=si+hti+pi−k+h
对于三次指数平滑法,我们必须初始化一个完整的”季节“的值。至于如何选择参数 α \alpha α, β \beta β, γ \gamma γ,一个比较笨拙但可行的方法是反复试验,定义一个误差,比如平均绝对误差(Mean Absolute Error,MAE)或平均平方误差(Mean Squared Error,MSE),设定几个参数的范围,然后找到范围内误差最小的那组参数值。
##三、ARIMA
ARIMA模型是时间序列分析中应用最广泛的模型之一,ARIMA(p,d,q)由三个部分组成:
AR§模型很好理解,一般而言,时间序列的变量具有时序上的相关性。比如说一列火车的速度,当时间间隔足够小时,上一个时间点速度如果慢,下一个时间点往往也很慢,或许你要称它为惯性,也没什么不可,这种内在的相关性,使得我们可以根据最近几个时间点的观测值来预测下一个时间点的值。
MA(q)有点难以理解,先提出结论吧,MA模型是无穷阶AR模型的等价表示。公式推导如下:
假设有一个特殊的无穷阶的AR模型:
(1) X t = ε t + ϕ X t − 1 − ϕ 2 X t − 2 + ϕ 3 X t − 3 − ϕ 4 X t − 4 + . . . \tag {1}X_{t}=\varepsilon_{t}+\phi X_{t-1}-\phi ^{2}X_{t-2}+\phi^{3}X_{t-3}-\phi^{4}X_{t-4}+... Xt=εt+ϕXt−1−ϕ2Xt−2+ϕ3Xt−3−ϕ4Xt−4+...(1)
将(1)中的t用t-1替代,得到:
(2) X t − 1 = ε t − 1 + ϕ X t − 2 − ϕ 2 X t − 3 + ϕ 3 X t − 4 − ϕ 4 X t − 5 + . . . \tag{2}X_{t-1}=\varepsilon_{t-1}+\phi X_{t-2}-\phi ^{2}X_{t-3}+\phi^{3}X_{t-4}-\phi^{4}X_{t-5}+... Xt−1=εt−1+ϕXt−2−ϕ2Xt−3+ϕ3Xt−4−ϕ4Xt−5+...(2)
将(2)的左右两边同乘以 ϕ \phi ϕ:
(3) ϕ X t − 1 = ϕ ε t − 1 + ϕ 2 X t − 2 − ϕ 3 X t − 3 + ϕ 4 X t − 4 − ϕ 5 X t − 5 + . . . \tag{3} \phi X_{t-1}=\phi \varepsilon_{t-1}+\phi ^{2}X_{t-2}-\phi ^{3}X_{t-3}+\phi ^{4}X_{t-4}-\phi^{5}X_{t-5}+... ϕXt−1=ϕεt−1+ϕ2Xt−2−ϕ3Xt−3+ϕ4Xt−4−ϕ5Xt−5+...(3)
将(3)代入(1)得到:
(4) X t = ε t + ϕ ε t − 1 \tag{4} X_{t}=\varepsilon_{t}+\phi \varepsilon_{t-1} Xt=εt+ϕεt−1(4)
式(4)就是MA(1),注意这里没有 μ \mu μ,MA模型中可以分为不带 μ \mu μ和带 μ \mu μ两种情形。根据式(1)和(4)可以得到MA(1)相当于一个无穷阶的AR模型。这个例子很特殊,但是可以给我们一个启发,通过调整参数,无穷阶的AR模型可转换为相应的MA模型。同样的,对于任意的q,MA(q)均可以找到一个AR模型与之对应。因此我们可以得到,时间序列数据归根到底是可以统一用AR模型来表示的。之所以需要MA模型,是因为如果只有AR模型,那么一些时间序列可能需要很高的阶数来刻画。阶数p越大,待估参数越多,付出的代价越大,因此需要用低阶的MA模型来替换高阶的AR模型。
###2.ARIMA模型
ARIMA模型是在ARMA模型的基础上加上差分,差分的作用上面说了,是为了得到平稳序列。一般来说,是先对序列进行差分运算,再用自相关图检验其平稳性,得到一个d阶的差分序列,然后对差分时间序列进行ARMA模型预测,再将预测值还原。假设p=1,q=2,且进行了一阶差分后,序列平稳了,那么:
X ^ t − X t − 1 = ϕ 1 ( X t − 1 − X t − 2 ) + θ 1 ε t − 1 + θ 2 ε t − 2 \hat{X}_{t}-X_{t-1}=\phi_{1}(X_{t-1}-X_{t-2})+\theta_{1}\varepsilon_{t-1}+\theta_{2}\varepsilon_{t-2} X^t−Xt−1=ϕ1(Xt−1−Xt−2)+θ1εt−1+θ2εt−2
即:
X ^ t = X t − 1 + ϕ 1 ( X t − 1 − X t − 2 ) + θ 1 ε t − 1 + θ 2 ε t − 2 \hat{X}_{t}=X_{t-1}+\phi_{1}(X_{t-1}-X_{t-2})+\theta_{1}\varepsilon_{t-1}+\theta_{2}\varepsilon_{t-2} X^t=Xt−1+ϕ1(Xt−1−Xt−2)+θ1εt−1+θ2εt−2
其中, X ^ t \hat{X}_{t} X^t为预测值。ARIMA(p,d,q)模型可定义为:
( 1 − ∑ i = 1 p ϕ i L i ) ( 1 − L ) d X t = ( 1 + ∑ i = 1 q θ i L i ) ε t (1-\sum_{i=1}^{p}\phi_{i}L^{i})(1-L)^{d}X_t=(1+\sum_{i=1}^{q}\theta_{i}L^{i})\varepsilon_{t} (1−i=1∑pϕiLi)(1−L)dXt=(1+i=1∑qθiLi)εt
其中L是滞后算子(Lag operator),d ∈ Z , d > 0 。 \in \mathbb{Z},d>0。 ∈Z,d>0。
ARIMA模型运用有一个较为通用的流程,如下所示:
1.根据时间序列的散点图、自相关函数和偏自相关函数图识别其平稳性。
2.对非平稳的时间序列数据进行平稳化处理。直到处理后的自相关函数和偏自相关函数的数值非显著非零。
3.根据所识别出来的特征建立相应的时间序列模型。平稳化处理后,若偏自相关函数是截尾的,而自相关函数是拖尾的,则建立AR模型;若偏自相关函数是拖尾的,而自相关函数是截尾的,则建立MA模型;若偏自相关函数和自相关函数均是拖尾的,则序列适合ARMA模型。
4.参数估计,检验是否具有统计意义。
5.假设检验,判断(诊断)残差序列是否为白噪声序列。
6.利用已通过检验的模型进行预测。
##四、讨论与分析
由于良好的统计特性,ARIMA模型是应用最广泛的时间序列模型,各种指数平滑模型都可以用ARIMA模型来实现。即通过Holter-winters建立的模型,用ARIMA同样可以得到。即便ARIMA非常灵活,可以建立各种时间序列模型(AR,MA,ARMA)但是ARIMA也有局限性,最主要的局限在于ARIMA只能建立线性的模型,而现实世界中纯线性模型往往不能令人满意。事实上,用单独一种方法建立的模型往往不能满足需求,参考文献[3]提出用ARIMA和人工神经网络(Artificial Neural Networks,ANNs)结合建立时间序列模型,取得了良好的预测效果。长短期记忆(Long Short-Term Memory,LSTM)是一种时间递归神经网络(RNN),LSTM非常适合于处理和预测时间序列中间隔和延迟非常长的重要事件。利用神经网络可以帮助建立非线性模型,不过神经网络比较适合用于大数据处理,即数据量较大的场景。
通过历史信息,基于回归的方法(ARIMA)基本上能满足需求。这个方法可以提供一个群体的发展趋势,但对于个体的差异带来的预测结果和观测值的波动很难处理。如果这个时候加进去一些额外的特征,使得对不同类型、变化趋势的个体得以区分,从而提高一下性能。这些额外的特征就是RNN之类方法的用武之地了吧。
机器学习上有一个定理,叫***没有免费午餐定理***(No Free Lunch,NFL),表示的是没有通用的对每个问题都最优的算法,离开具体环境,具体问题,算法都将一文不值!具体问题应该具体分析。
##参考文献
1.时间序列预测模型ARIMA
2.维基百科:ARIMA模型
3.Zhang G P. Time series forecasting using a hybrid ARIMA and neural network model[J]. Neurocomputing, 2003, 50: 159-175.
4.ARIMA模型详解
5.《数据之魅——基于开源工具的数据分析》 by Philipp K.Janert