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个月为周期的相关性相当明显的.调用方法如下:

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

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

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

(7) 拖尾和截尾

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

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

(8) 模型检验

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

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

iii. 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

posted on 2018-03-23 15:59  xieyan0811  阅读(114)  评论(0编辑  收藏  举报