时间序列算法(一) ——Arima的演变

2021-08-09 15:40:23 浏览数 (1)

时间序列在生活中非常常见,它是按照时间排序、随时间变化的数据序列,时间序列对疾病感染增长、股票趋势预测等现实场景均非常常见,而arima算法模型是时间序列经典算法之一。

时间序列的平稳性

如果观测时间序列

{Z_1,Z_2,...,Z_n}

的概率分布(可以理解为序列变化表达式)与具体的时间t无关,则是平稳的,否则非平稳,无关的含义是指任意时间t对应序列值的平均值是常数,方差也是常数,而和自己之前k步(k称为滞后数)的自协方差为k的函数,量化为数学公式为

begin{cases} E(Z_t) = mu \ D(Z_t) = sigma^2 \ rho_k = Cov(Z_t, Z_{t k}) = f(k) end{cases}
白噪声

如果时间序列

Z_t

满足

E(Z_t) = 0
D(Z_t) = sigma^2

且对于任意k均满足自相关系数

rho_k = 0

则该序列称为白噪声序列,往往我们希望一般算法预测与实际值的误差项满足白噪声序列分布,白噪声序列服从正态分布,是平稳序列

随机游走序列

如果时间序列满足

Z_t = Z_{t-1} epsilon_t

其中

epsilon_t

为白噪声序列,则

Z_t

为随机游走序列,因为它与上一个时刻相差一个完全随机的值,且这个序列不是平稳的,因为它的方差为

tsigma^2

(可以根据方差加法公式计算推得)

ADF思想

思想是基于随机游走序列进行判定,即如果

Z_t = pZ_{t-1} epsilon_t

该式的p为1,即

Z_t

有一个单位根,则说明这个序列不平稳

ACF自相关系数

ACF也是判断一个序列是否平稳的衡量标准,它描述了一个序列值在其自身在不同时间点的相关度,计算公式为

ACF(k) = sum_{t=k 1}^n frac{(Z_t - bar{Z})(Z_{t-k}-bar{Z})}{sum_{t=1}^n (Z_t - bar{Z})^2}

这里计算出来相差k个时间点的序列自身的相关性

PACF偏自相关系数

偏相关的含义是单独研究两个要素之间的相互关系的密切程度,不考虑中间变量

可以类比相关系数,只不过相关系数是两个变量之间的计算,而自相关系数是现在的自己和以前的自己的计算

趋势分类
  • 长期趋势变动

即朝着某一特定方向持续上升或下降或一直水平,是客观的主要变化趋势

  • 季节变动

按照某一段时间内进行变化,类似周期函数

  • 循环变动

区别于季节变动,它是此起彼伏波浪形式的序列,和具体时间段无关

  • 不规则变动

一般有突变和随机变动两种

AR自回归模型

约定时间序列为

{X_t,tin Z}

自回归的含义是和过去的自己做回归,即表示为

X_t = epsilon_t varphi_1 X_{t-1} varphi_2 X_{t-2} ... varphi_p X_{t-p}

这里p为阶数,即和过去p个值做回归,

epsilon_t

是白噪声,

X_t

是阶数为p的自回归序列(记为AR(p)),

varphi=(varphi_1,varphi_2,...,varphi_p)^T

为自回归系数向量

白噪声本身是一个平稳序列,因为它是随机误差,期望为0,方差为固定常数

自回归模型描述当前值与历史值之间的关系,它是用变量自身的历史时间数据对自身进行预测建模,要求时间序列数据必须具有平稳性

MA移动平均模型

如果再AR步的误差项

epsilon_t

不是白噪声(即非平稳),则需要对该误差项进行建模,一般通常把它认为是一个q阶的移动平均,即

epsilon_t = xi_t theta_1 xi_{t-1} theta_2 xi_{t-2} ... theta_q xi_{t-q}

这里的

xi_t

为白噪声序列,这是q阶移动平均(MA(1)),是过去q个预测误差项的加权平均值,特别的如果

X_t = epsilon_t

,则说明时间序列当前值与历史值没有关系,而只依赖于历史白噪声的线性组合,则此时模型为

X_t = xi_t theta_1 xi_{t-1} theta_2 xi_{t-2} ... theta_q xi_{t-q}

所以如果AR模型中的误差项不是白噪声序列的话就需要进行MA步,这里的

xi_t

是t时真实值与预测值的误差

ARMA自回归移动平均

其实就是AR和MA步骤的结合,综合考虑时间序列的自相关性和预测真实误差分布,即表达式为

X_t = varphi_1 X_{t-1} varphi_2 X_{t-2} ... varphi_p X_{t-p} xi_t
theta_1 xi_{t-1} theta_2 xi_{t-2} ... theta_q xi_{t-q}

即为ARMA(p,q)模型

该模型有个前提是必须是原始序列是平稳的(它的行为并不会随着时间的推移而变化),因为不管是误差项或者和之前的自己做回归都不会有能预测一直上升或下降的能力

运用ARMA模型可以解决平稳时间序列的预测问题,通过历史数据回归求得自回归系数和移动平均系数是可行且简单的,如果需要预测未来t T时刻的值,则只需要先求t T-1的值,而求t T-1的值则需要知道t T-2的值,...,不断缩短到t时刻,这时所有的项都是已知的(t以前的值为历史值一定知道),则一定可以反向预测出t T时刻的值(相当于反复迭代那个表达式)

但是有个问题,平稳性序列这个的条件太严格,现实生活中绝大多数都是非平稳的序列,则此时需要做一定的处理,将其转化成平稳序列,常见的是差分方法可以消除一定的趋势性

ARIMA算法

该算法将差分法和ARMA算法结合起来,目的是为了让原始序列平稳化

差分的做法是每个后项数据减去前一项,得到一个新序列,

bigtriangledown X_t = X_t -X_{t-1}
bigtriangledown^2 X_t = bigtriangledown X_t -bigtriangledown X_{t-1}
...

这时也可以继续差分下去,称为二阶、三阶...差分,差分可以简单类比函数的导数,比如一次函数是增长或下降趋势,但是求导后却是常数(平稳),不断求多阶差分(导数)可以尽可能地让序列偏向平稳,判断序列达到平稳可根据ADF值及对应伴随概率判断,而如果ACF值的正的滞后项多,则考虑增加差分阶数d,如果滞后第一项ACF为负,则可能是因为差分过多。确定好差分后,差分阶数用d表示,此时的模型为Arima(p,d,q)模型。

一般差分消除正相关,但过度差分会引入负相关,因为减的太狠了。且一般用ADF值判断平稳性和确定差分阶数,而ACF/PACF确定自回归阶数p和移动平均阶数q

该算法没有建立序列值与时间t的函数关系式,相反还尽可能地要求序列平稳(即与时间大小无关),这在有类似季节波动、阶段上升的场景很有优势(如图),它综合考虑了自身预测值与实际值的误差以及自身自相关性,可以在较大程度上保留原始数据的信息,所以是时间序列或统计建模任务中比较常用的方法之一。

0 人点赞