(差分自回归移动平均)ARIMA

1. 时间序列平稳性

1.1 平稳性

平稳性就是要求经由样本时间序列锁得到的拟合曲线在未来一段时间内仍能顺着现有的形态惯性地延续下去。平稳性要求序列的均值和方差不发生明显的变化。

严平稳

严平稳表示的分布不随时间的改变而改变。如白噪声(正态分布),无论怎么取,都是期望为0,方差为1

宽平稳

期望与相关系数(依赖性)不变。未来某时刻的t的值$Xt$就要依赖于它的过去的信息,所以需要依赖性。这种依赖性不能有明显的变化

1.2 差分法

使用差分法可以使得数据更平稳,常用的方法就是一阶差分和二阶差分。

时间序列差分值的求解可以直接通过pandas中的diff函数得到:

1
2
3
4
// 一阶差分
data = data.diff(1)
// 二阶差分
data = data.diff(1)

2. ARIMA模型介绍

2.1 自回归模型AR

自回归模型描述当前值与历史值之间的关系,用变量自身的历史数据对自身进行预测。自回归模型必须满足平稳性的要求。

自回归模型首先需要确定一个阶数p,表示用几期的值来预测当前值。p阶自回归模型的公式定义为:
$$
y _ { t } = \mu + \sum _ { i = 1 } ^ { p } \gamma _ { i } y _ { t - i } + \epsilon _ { t }
$$
上式中$yt$是当前值,$\mu$是常数项,$p$ 是阶数,$\gamma i$是自相关系数, $\epsilon_t$是误差

自回归模型有很多限制:

  • 自回归模型是用自身的数据进行预测
  • 时间序列数据必须具有平稳性
  • 自回归只适用于预测与自身前期相关的现象

2.2 移动平均模型MA

移动平均模型关注的是自回归模型中的误差项的累加,q阶自回归的过程的公式定义如下:
$$
y _ { t } = \mu + \epsilon _ { t } + \sum _ { i = 1 } ^ { q } \theta _ { i } \epsilon_{t - i}​
$$
移动平均法能有效地消除预测中的随机波动。

2.3 自回归移动平均ARMA

自回归模型AR和移动平均模型MA模型相结合,我们就得到了自回归移动平均模型ARMA(p,q),计算公式如下:
$$
y _ { t } = \mu + \sum _ { i = 1 } ^ { p } \gamma _ { i } y _ { t - i } + \epsilon _ { t } + \sum _ { i = 1 } ^ { q } \theta _ { i } \epsilon _ { t - i }
$$

2.4 差分自回归移动平均模型ARIMA

将自回归模型、移动平均模型和差分算法结合,我们就得到了差分自回归移动平均模型ARIMA(p,d,q),其中d是需要对数据进行差分和阶数。

3、建立ARIMA模型的过程

一般来说,建立ARIMA模型一般有三个阶段,分别是模型识别和定阶、参数估计和模型检验。

3.1 模型识别和定阶

模型的识别问题和定阶问题,主要是确定p,d,q三个参数,差分的阶数d一般通过观察图示,1阶或2阶即可。这里我们主要介绍p和q的确定。我们首先介绍两个函数。

自相关函数ACF(autocorrelation function)

自相关函数ACF描述的是时间序列观测值与其过去的观测值之间的线性相关性。计算公式如下:
$$
A C F ( k ) = \rho _ { k } = \frac { C ov ( y _ { t } , y _ { t - k } ) } { V a r ( y _ { t } ) }
$$
其中k表示滞后期数,如果$k$=2,则代表$y_t$和$y_{t-2}$

偏自相关函数PACF(partial autocorrelation function)

偏自相关函数PACF描述的是在给定中间观测值的条件下,时间序列观测值预期过去的观测值之间的线性相关性。

举个例子:假设k=3,那么我们描述的是$y_t$和$y_{t-3}$之间的相关性,但是这个相关性还收到yt-1和yt-2的影响。PACF剔除了这个影响,而ACF包含了这个影响。

拖尾和截尾

拖尾指序列以指数率单调递减或震荡衰减,而截尾指序列从某个时点变得非常小:

img

出现以下情况,通常是为(偏)自相关系数d阶截尾:

  1. 在最初的d阶明显大于2倍标准差范围以内
  2. 之后几乎95%的(偏)自相关系数都落在2倍标准差范围以内
  3. 且由非零自相关系数衰减为在零附近小值波动的过程非常突然

img

出现以下情况,通常视为(偏)自相关系数拖尾:

  1. 如果有超过5%的样本(偏)自相关系数都落入2倍标准差范围之外
  2. 或者是由显著非0的(偏)自相关系数衰减为小值波动的过程比较缓慢或非常连续

img

p,q阶数的确定

根据刚才判定截尾和拖尾的准则,p, q的确定基于如下规则:

模型(序列) AR(p) MA(q) ARMA(p,q)
自相关函数 拖尾 第q个后截尾 拖尾
偏自相关函数 第p个后拖尾 拖尾 拖尾

3.2 参数估计

通过拖尾和截尾对模型进行定阶的方法,往往具有很强的主观性,回想我们之前在参数预估的时候往往是怎么做的,不就是和损失和正则项的加权么?我们这里能不能结合最终的预测误差来确定p,q的阶数呢?在相同的预测误差情况下,根据奥斯卡姆剃刀准则,模型越小是越好的。那么,平均预测误差和参数个数,我们可以根据信息准则函数法,来确定模型的阶数。预测误差通常用平方误差即残差平方和来表示。

常用的信息准则函数法有下面几种:

AIC准则

AIC准则全称为最小信息量准则(Akaike Information Criterion),计算公式如下:

AIC=2*(模型参数的个数) -2ln(模型的极大似然估计函数)

BIC准则

AIC准则存在一定的不足之处。当样本容量很大时,在AIC准则中拟合误差提供的信息就要受到样本容量的放大,

而参数个数的惩罚因子却和样本容量没关系(一直是2),因此当样本容量很大时,使用AIC准则选择的模型不收敛与真实模型,它通常比真实模型所含的未知参数个数要多。BIC(Bayesian InformationCriterion)贝叶斯信息准则弥补了AIC的不足,计算公式如下:

BIC = ln(n) * (模型中参数的个数) - 2ln(模型的极大似然函数值),n是样本容量

我们通过类似网格搜索二等方式来寻找我们模型的最佳p,q组合吧。我们可以使用简单的方法来得到p和q的最优值:

1
2
3
4
train_results = sm.tsa.arma_order_select_ic(train, ic=['aic', 'bic'], trend='nc', max_ar=8, max_ma=8)

print('AIC', train_results.aic_min_order)
print('BIC', train_results.bic_min_order)

结果为:

1
2
AIC (1, 0)
BIC (1, 0)

表明我们应该选择AR(1)模型。

一般来说,BIC准则得到的ARMA模型的阶数较AIC的低。

3.3 模型检验

这里的模型检验主要有两个:

  1. 检验参数估计的显著性(t检验)
  2. 检验残差序列的随机性,即残差直接是独立的

残差序列的随机性可以通过自相关函数法来检验,即做残差的自相关函数图:

1
2
3
4
5
6
model = sm.tsa.ARIMA(train, order=(1, 0, 0))
results = model.fit()
resid = results.resid #赋值
fig = plt.figure(figsize=(12,8))
fig = sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=40)
plt.show()

结果如下:

img

这里很明显的检测是通过的。

3.4 模型训练

预测主要有两个函数,一个是predict函数,一个是forecast函数。

predict中进行预测的时间段必须在我们训练ARIMA模型的数据中。

forecast则是对训练数据集末尾下一个时间段的值进行预估。

1
2
3
model = sm.tsa.ARIMA(data, order=(1, 0, 0))
results = model.fit()
predict_sunspots = results.predict(start=str('2014-04'),end=str('2014-05'),dynamic=False)

预估下一个值:

1
results.forecast()[0]

参考文献: