时序预测之二 _ARIMA

1. 说明

 ARMA 回归滑动平均模型 (Autoregressive Moving Average Model,简记 ARIMA),是研究时间序列的重要方法,由自回归模型(简称 AR 模型)与滑动平均模型(简称 MA 模型)为基础“混合”构成。常用于具有季节变动特征的销售量、市场规模的预测等。ARIMA 模型相对 ARMA 模型,仅多了差分操作。

2. 相关概念

(1) 自回归模型(AR)

  自回归模型 autoregressive model,简称 AR.在时序分析中,描述时间序列{yt}自身某一时刻和前 p 个时刻之间相互关系的模型称自回归模型,其形式为:

  其中Φ1, Φ2,…, Φp 是模型参数,εt 是白噪声序列,它反映了所有其它随机因素的干扰.其中 p 为模型阶次,即 yt 由前 p 个值决定.

(2) 滑动平均模型(MA)

  滑动平均模型 moving average model,也称移动平均模型,它将时间序列{yt}看成白噪声序列的线性组合,为什么误差能描述模型呢?假设某个值可通过之间前 N 个值的平均值预测,稍作变化,即实际值可以通过前一值的预测值加误差得到.因此实际值可用多个误差值的累加来表示.其形式为:

(3) 回归滑动平均模型(ARMA)

  简单地说:AR 模型是建立当前值和历史值之间的联系,MA 模型是计算 AR 部分累积的误差。ARMA 是两个维度的和.

(4) 数据预处理

 ARMA 要求被分析的数据呈正态分布,平稳,零均值.平稳性一般是指:均值为常数,方差为常数,且自协方差为常数.比如说上升的趋势中,均值就不是常数;如果震荡幅度越来越大,则方差不是常数。   如果仅是均值非0的情况,可减去均值;如果趋势可用线性拟合,可以减去拟合后的趋势;另外还可以用差分,或者季节性差分的方法使之平稳;对于非正态分布,可使用对数处理.

(5) 差分

  差分是将数据进行移动之后与原数据进行比较得出的差异数据,这里的移动是指上移或者下移.简单的说,比如对某支股票的价格数据做一阶差分,就是将每日价格减去前一天的价格.   在 python 中,差分运算可使用 pandas 的 diff(periods=n) 函数实现,其中 n 为阶数,默认为一阶差分,一阶差分的具体操作是 df.shift()-df.用于生成平稳数据,比如下面的曲线.

  一阶差分后

  由此可见,差分之后,去掉了趋势,均值趋于0.有助于分析其它特征.

(6) 自相关与偏自相关(ACF&PACF)

  自相关 acf 和偏自相关 pacf 是分析时序数据的重要方法,是在平稳条件下求得的.   自相关函数 Auto Correlation Function,简称 ACF.形如:

 X轴表示滞后值,Y轴从 [-1,1],表示了这些值的相关性.比如左边第一点相关性为 1,就是说该点与它自己完全相关.从图中可观察到:12 个月为周期的相关性相当明显的.调用方法如下:

1
2
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(df['xxx'])

  注意时序数据中不能包括空值,如果之前用了一次一阶差分和一次十二阶差分,应去掉前 13 个为空的值.   图中蓝色部分是描述的统计显著性,如果数据随机分布,Y 轴的位置会在蓝色区域之内.因此,要着重看蓝色区域以外的点.   自相关系数包含了其它变量影响下的相关关系,有时需要只考虑某两个变量的相关关系,即偏相关系数.其中的偏字,指的是只考虑首尾两项的关系,把中间项当成常数,使用了偏导数的方法.使用方法如下:

1
2
from statsmodels.graphics.tsaplots import plot_pacf
plot_pacf(df['xxx'])

(7) 拖尾和截尾

  我们通过观察自相关图和偏自相关图来确使用哪种模型,以自相关图为例,先看看图片呈现的几种形式.

  左边的图呈直线形式衰减,说明可能包括趋势,需要进一步差分;中间是截尾图,它指的是在某个值(如图中的 7)后截止为 0;右则是拖尾图,指的是按指数形式或正弦形式有规律地衰减.   如果自相关系数拖尾,偏自相关系数 p 阶截尾,则使用 p 阶的 AR 模型.   如果自相关系数 q 阶截尾,偏自相关函数拖尾,则使用 q 阶的 MA 模型.   简单的讲,它们两个都是看截尾截在哪儿.   如果自相关函数和偏自相关函数均拖尾,则使用 ARMA 模型,由于 AR 和 MA 相互影响,阶数需要从小到大逐步尝试.

(8) 模型检验

  1. 模型对训练数据的拟合
      用模型对训练数据做拟合,用观察或者计算误差的方式,查看二者差异,差异越小越好.

  2. 检查残差的自相关函数
      残差的自相关函数应该没有可识别的结构.

  3. AIC 信息准则

 AIC 信息准则 Akaike information criterion,是衡量统计模型拟合优良性的一种标准,AIC 值越小越好,也有根据 AIC 自动选参数的工具.

3. 步骤

  具体使用 python 调用 statsmodels 库实现.statsmodels 是一套统计工具集.具体需要考虑三个参数:d,p,q.其中 d 是消除趋势的差分阶数,p 是 AR 阶层,q 是 MA 的阶数.步骤如下:

  1. 做时序图观察基本的趋势和周期.

  2. 分析平稳性,正态性,周期性;并对数据进行转换.

  3. 做自相关和偏自相关图,确定模型阶次.

  4. 模型检验

  5. 用模型预测.

4. 问题与解答

  1. 做 ARMA 分析前是否应该剔除周期性因素?   我们可以从自相关图中看出周期性波动,比如上边右侧的拖尾图,它说明某天与前 7,14,21 天都强相关.如果发现强相关,可先进行多阶差分(季节差分)后,再进一步使用 ARMA 模型处理.需要注意的是各层次差分在预测时都需要对应的还原.

  2. 做长期预测时如何应对衰减?   我在做盐城上牌预测时就遇到了严重的衰减问题,当时需要预测之后几百天的数据,而 ARMA 在预测了几十天之后,就从类似正弦波型衰减成了一条直线,导致我最终放弃了该模型,改为使用线性拟合趋势,严重损失了精度.后来看复赛排名第一的大神分享,他也使用 ARMA,并且也有衰减问题,不同的是他采用按月预测,相比于按日预测,衰减就好得多,非常赞!

5. 参考

  1. 第七篇时间序列分析

https://max.book118.com/html/2014/1223/10828140.shtm