ARIMA模型又叫差分自回归移动平均模型,在学习这个模型之前,先依照顺序学习AR、MA、ARMA模型。
AR(Autoregressive,自回归)模型,认为通过时间序列历史数据加上白噪声就可以预测当前时刻的数值。
首先什么是白噪声,他也是一段序列{e_0, e_1, …, e_t},需要满足条件:
E
(
e
t
)
=
0
E(e_t)=0
E(et)=0
V
a
r
(
e
t
)
=
σ
2
Var(e_t)=\sigma^2
Var(et)=σ2
C
o
v
(
e
t
,
e
t
+
k
)
=
o
Cov(e_t, e_{t+k})=o
Cov(et,et+k)=o
个人认为,它就相当于线性回归模型中的随机误差项。再看看AR模型的表达式:
Y
t
=
β
0
+
β
1
Y
t
−
1
+
β
2
Y
t
−
2
+
.
.
.
+
β
p
Y
t
−
p
+
e
t
Y_t = \beta_0 + \beta_1 Y_{t-1} + \beta_2 Y_{t-2} + ... + \beta_p Y_{t-p} + e_t
Yt=β0+β1Yt−1+β2Yt−2+...+βpYt−p+et
可以看出,这就是一个以时间序列作为自变量的多元线性回归模型。
然后是MR(moving average)模型,这个模型比较神奇,他不用历史数据进行预测,反倒是利用历史预测的误差进行预测:
Y
t
=
c
+
e
t
+
θ
1
e
t
−
1
+
θ
2
e
t
−
2
+
.
.
.
+
θ
q
e
t
−
q
Y_t = c + e_t + \theta_1 e_{t-1} + \theta_2 e_{t-2} + ... + \theta_q e_{t-q}
Yt=c+et+θ1et−1+θ2et−2+...+θqet−q
其中e_t就是白噪声,我看到有些公式是写成减去白噪声的线性组合,不过都一样,反正参数的正负可以改变的。
感觉很神奇是不是,怎么还能用误差进行预测,接下来就主要证明一下为什么我们可以用误差去预测未来的数据,首先看回一开始提到的AR模型:
Y
t
=
W
1
[
Y
t
−
1
,
.
.
.
]
+
e
t
Y_t = W_1 [Y_{t-1}, ... ] + e_t
Yt=W1[Yt−1,...]+et
Y
t
−
1
=
W
2
[
Y
t
−
2
,
.
.
.
]
+
e
t
−
1
Y_{t-1} = W_2 [Y_{t-2}, ... ] + e_t-1
Yt−1=W2[Yt−2,...]+et−1
Y
t
−
2
=
W
3
[
Y
t
−
3
,
.
.
.
]
+
e
t
−
2
Y_{t-2} = W_3 [Y_{t-3}, ... ] + e_t-2
Yt−2=W3[Yt−3,...]+et−2
.
.
.
.
.
.
......
......
假设Y是一个无穷序列,然后用第二条式子带进第一条式子,第三条式子带进第二条式子,一直这样操作,因为Y是无穷的,所以我们可以近似地认为,Yt可用白噪声的线性组合表示,也就得到了MA模型了,注意,Y是无穷序列这个假设是必须的,不然代到最后,Y0没办法消去,我们就没法完全用白噪声表示Yt了。个人认为,从另一个角度来说,Y是无穷序列的话,也可认为时间太过久远的序列对预测作用不大,所以只用较新的白噪声足以用于预测。
至于什么是ARMA模型,其实就是把AR模型和MA模型加在一起:
Y
t
=
β
0
+
β
1
Y
t
−
1
+
β
2
Y
t
−
2
+
.
.
.
+
β
p
Y
t
−
p
+
e
t
+
θ
1
e
t
−
1
+
θ
2
e
t
−
2
+
.
.
.
+
θ
q
e
t
−
q
Y_t = \beta_0 + \beta_1 Y_{t-1} + \beta_2 Y_{t-2} + ... + \beta_p Y_{t-p} + e_t + \theta_1 e_{t-1} + \theta_2 e_{t-2} + ... + \theta_q e_{t-q}
Yt=β0+β1Yt−1+β2Yt−2+...+βpYt−p+et+θ1et−1+θ2et−2+...+θqet−q
一开始我觉得有点惊讶,这样加一下又搞出一个新模型了,不过认真想一下还是有道理的,其实我们可以把ARMA看成AR和MA的线性组合,AR和MA分别提取时间序列的不同特征,最终构成一个更稳健的模型,这个思想有点像transformer中multi-head attention,CNN中也有类似的增加通道提取不同的特征最后再综合在一起分析的做法,本质上就是集成学习的思想,有兴趣的可以看一下我写的集成学习的文章。
最后终于来到ARIMA(差分自回归移动平均)模型了,其实就是在ARMA的基础上在引入差分法。
首先什么是差分法,就是计算相邻观测值的差值,得到一个新的序列,差分法和时间序列分析有什么联系呢,之前我们也提到我们总是希望序列数据具有平稳性的,但有时候,数据或许不平稳,但是数据之间的差值具有平稳性,所以差分其实是一种或许能让序列变平稳的方法。
所以,其实ARIMA就是针对那些不平滑的数据,对他们进行差分计算后,把他们转化为平稳序列,一次差分运算不行就做两次,一般最多做三次就足够了,最后再利用普通的ARMA模型建模分析,和ARMA相比,ARIMA会多一个参数d,他就是表示使序列转化为平稳序列所做的差分运算的次数:
d
=
0
,
y
t
=
Y
t
d=0, y_t = Y_t
d=0,yt=Yt
d
=
1
,
y
t
=
Y
t
−
Y
t
−
1
d=1, y_t = Y_t-Y_{t-1}
d=1,yt=Yt−Yt−1
d
=
2
,
y
t
=
(
Y
t
−
Y
t
−
1
)
−
(
Y
t
−
1
−
Y
t
−
2
)
d=2, y_t = (Y_t-Y_{t-1} )- (Y_{t-1}-Y_{t-2})
d=2,yt=(Yt−Yt−1)−(Yt−1−Yt−2)
当序列转化为平稳序列后,即可代入ARMA的公式:
y
t
=
β
0
+
β
1
y
t
−
1
+
β
2
y
t
−
2
+
.
.
.
+
β
p
y
t
−
p
+
e
t
+
θ
1
e
t
−
1
+
θ
2
e
t
−
2
+
.
.
.
+
θ
q
e
t
−
q
y_t = \beta_0 + \beta_1 y_{t-1} + \beta_2 y_{t-2} + ... + \beta_p y_{t-p} + e_t + \theta_1 e_{t-1} + \theta_2 e_{t-2} + ... + \theta_q e_{t-q}
yt=β0+β1yt−1+β2yt−2+...+βpyt−p+et+θ1et−1+θ2et−2+...+θqet−q
有时候我们会在网络上看到其他ARIMA的公式,其实他们就是引入了滞后算子和差分算子,本质上还是一样的,这里我没有这样做,主要还是觉得这样写的话会更容易理解。
在github写的自然语言处理入门教程,持续更新:NLPBeginner
在github写的机器学习入门教程,持续更新:MachineLearningModels
想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客