算法 | 时间序列: 从平稳到非平稳ARIMA 模型

Posted 擎创夏洛克AIOps

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法 | 时间序列: 从平稳到非平稳ARIMA 模型相关的知识,希望对你有一定的参考价值。





先看下图:

这是1986年到2006年的原油月度价格。可见在2001年之后,原油价格有一个显著的攀爬。这时再去假定均值是一个定值(常数)就不太合理了,也就是说,第二讲里提到的ARMA平稳模型在这种情况下就太适用了。也因此有了今天这一文。


要处理这种非平稳的数据(比如上图中的均值不是一个常数),需要用非平稳模型:求和自回归滑动平均(Autoregressive integrated moving average, ARIMA)。接下来,咱先看一个处理过的石油价格:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

是不是似曾相识?! 对的,经过简单的处理,本来不平稳的数据,立即变成了平稳数据了。这样再用上一章的模型就可简单处理了。这种处理方式就叫做差分(马上会讲,别急)。 而ARIMA 模型可以简单的理解为:差分+平稳模型。你看,这下,这章的内容是不是简单多了,所谓非平稳模型不就是差分处理下数据,再变有平稳数据,然后再用平稳模型处理嘛~ 确实酱紫~。


那马上就产生一个问题(或者你早就有疑问了):什么叫做差分?差分是处理时间序列非常重要的工具,在计量经济学及金融数学中广泛应用。



3.1 差分运算


3.1.1 差分运算


还是用原油价格(月度数据)作为例子,所谓一阶差分就是两个相邻月度之间做差。(这么简单?!对,就是这样~)。

规范化些:设 { X t ,   t = ± 1 , ± 2 , }  为一时间序列,则:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

称为时间序列  { X t ,   t = ± 1 , ± 2 , }   的一阶差分运算。


比如 2005年原油价格为:46.84 ,48.15, 54.19, 52.98, 49.83, 56.35, 58.99, 64.98 ,65.59, 62.26, 58.32 ,59.41。那这组数据的一阶差分即为 1.31, 6.04, -1.21, -3.15, 6.52 , 2.64 , 5.99 , 0.61,-3.33, -3.94,也就是前一个数减去后一个数而已。


那如果我想去差分后的数据再做一次差分呢? 那就是二阶差分(就是这么easy~):上面的一阶差分数据为1.31, 6.04, -1.21, -3.15, 6.52 , 2.64 , 5.99 , 0.61,-3.33, -3.94,再经一次差分: 4.73 , -7.25, -1.94, 9.67, -3.88, 3.35 , -5.38 , -3.94, -0.61。


那如果想做p次呢(你够了~),那就叫做p阶差分了,定义为:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型


是不是很简单?!



3.1.2 k步差分


如果不是相邻数据间做差呢,比如我想隔几个数据比较,比如我想用原油数据7月份数据与1月份做差呢? 没问题,你的需求我一定满足,这个就叫做k步差分了:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

比如2005年7月与1月的价格差值即为: 58.99 - 46.84 = 12.15.也即称为六步差分了。



3.1.3 差分的选择

划重点,划重点!!!


  1. 序列蕴含着显著的线性趋势,1 阶差分可以实现趋势平稳,比如上面的原油价格(不过,里面其实做了一个预处理,一会说~).

  2. 序列蕴含着曲线趋势的,通常低阶(2阶或3阶)差分就可以取提出曲线趋势的影响.

  3. 对于固定周期的序列,通常进行步长为周期长度的差分就可以较好的提取周期信息.


PS: 差分虽好,但也不要贪杯哦, 记住对信息的任何的加工都只会造成信息的损失.


3.1.3* 延迟算子


这一小节作为了解,不喜欢可以_跳过_,不影响理解滴~。


延迟算子,类似一个时间指针,当前序列值乘以一个延迟算子,就相当于把当前序列值的时间向过去拔了一个时刻。(ps: 算子就是映射,就是关系,就是变换[3])


3.1.3.1定义与性质


记 B 为延迟算子,有:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型


延迟算子具有如下性质:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型



3.1.3.2 差分的延迟算子表示


p阶差分

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

k步差分

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型



3.2* 时间序列分解

这一小节作为了解,不喜欢可以_跳过_,不影响理解滴~


在第一节(时间序列介绍) 中,曾提到过时间序列分解,其实时间序列分解不是靠感觉给出的,它也是有强大理论依据的,这里就支持时间序列分解的两大定理作简单的介绍:


3.2.1 Wold 分解

Wold 分解: 对于任何一个离散平稳过程{ X t ,   t = ± 1 , ± 2 , } , 它都可以分解为两个不相关的平稳序列之和,其中一个分确定性的,另一个为随机性的 不妨记作:


算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

其中  {Vt} 为确定性序列,而  { ξ t 为随机序列,且

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型 满足:


算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型


其中的所谓的'确定性': 

对任意的序列  { V t-q , V t-q , , V t-1 }  作线性回归:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

其中 η为回归残差序列: 

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

如果:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型



3.2.2 Cramer 分解


Wold分解是现代时间序列分析理论的灵魂。1938 年 H. Wold 提出此理论时,只是为了分析平稳序列的构成, 不过另一位大牛Cramer于1961年证明此种分析思路同样适用于非平稳序列。


Crammer 分解: 

任意时间序列 { X t }  都可分解成两部分的叠加:其中一部分是由多项式的确定性分析趋势成分,另一部分是平稳的零均值误差成分:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型

其中 d < , β 1 , β 2 , , β d  为 常数系数,at为一个零均值白噪声序列; B 为延迟算子。


Cramer分解说明任何一具序列的波动都可以视为受到了确定性影响和随机性影响的综合作用.


3.3 ARIMA 模型


千呼万唤终于到了ARIMA.

有了上面的知识,就可以很容易推出自回归滑动平均求和(ARIMA)模型。

如果有一个时间序列 { X t ,   t = ± 1 , ± 2 , }  的 d 次差分 W t = Δ X t  是一个平稳的ARMA过程,则称时间序列 { X t ,   t = ± 1 , ± 2 , }  为 ARIMA模型。如果Wt服从 ARMA(p,q) 模型,则称  { Y t }   是  ARIMA(p,d,q)  过程。

其中 d 通常为1,最多也不过2,3, 所以,不用太担心模型过于复杂。另外,如果 p = 0, 即不包含自回归项, 称为IMA(d,q), 如果没有滑动平均项, 则称为ARI(p,d)。


来来,给个'粟子',先看个简单的,下图(上)是某个商店某产品的两个月销量的时间序列图:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型


(上)图中,数据显然是不平稳的; (中)图是作了一步差分的结果,是不是平稳多了(什么?图怎么更难看了? 是的, 因为我这个过程是在剔除确定性信息啊~); (下)图是再一次作一步差分的(也即二阶差分), 你会发现这会是真的像白噪声了。


下面考虑ARIMA(p,1,d), 令 Wt=Yt-Yt-1 

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型


即:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型


整理:

算法 | 时间序列(三): 从平稳到非平稳ARIMA 模型


上式即称为模型的差分方程形式, 看起来是不是像ARMA(p+1,q)过程? 不过, 其特征多项式(涉及延迟算子,不过只需要知道下面的公式是由上面推出即可,至于怎么推出,需了解上面的星号章节~[^4])满足:

显然,x = 1 是 一个根, 意味着这个过程非平稳,而其余的根是平稳过程的 W t 的根。



参考文献


如第一节参考文献中所述, 主要的参考文献都在第一节中列出来了, 下面所列为新加入或当节的参考文献,请知悉.


1: 王燕 编著, 应用时间序列分析 北京: 中国人民大学出版社,2005
2: http://blog.sina.com.cn/s/blog_a1a5c41501012w3b.html
3: https://wenku.baidu.com/view/aab18a65cfc789eb162dc805.html





夏洛克 ITOA

为企业量身定制的IT运维专家

人工智能 | 机器学习 | IT运维



以上是关于算法 | 时间序列: 从平稳到非平稳ARIMA 模型的主要内容,如果未能解决你的问题,请参考以下文章

从入门谈起,ARIMA如何应用到时间序列分析中?

arima模型python 怎么看平稳性

在 ARIMA 时间序列建模 python pandas 中为 Adfuller 测试(平稳性测试)提取 p 值

时间序列ARIMA模型

怎样用matlab做时间序列平稳性检验

时间序列预测ARIMA模型实践(SPSS应用)