时序分析 32 - 时序预测 从ARIMA到SARIMAX (一)理论回顾
时序分析 32
时序预测 从ARIMA到SARIMAX
上一篇文章中我们介绍了SARIMA模型,相比于ARIMA模型,SARIMA考虑了季节性因素。读过上篇文章的细心读者会发现,python的statsmodels对sarima的支持对象名为SARIMAX。事实上,确实存在一个时序分析模型称为SARIMAX(Seasonal Auto-Regressive Integrated Moving Average with eXogenous factors),对比于SARIMA,所多的这个’X’代表exogenous,也就是说SARIMAX可考虑其他外部变量来协助对该时序数据进行建模。这种情况也是经常会出现的。
本篇博文会结合一个例子来重新梳理一下时序分析预测中,从ARIMA -> SARIMA -> SARIMAX的整个过程。顺便说一下,另外一个时序模型名为ARIMAX;不言而喻,该模型就是在ARIMA模型的基础上增加了可考虑外部变量。
本篇博文中所采用的数据是沃尔玛的销售数据集,可以从kaggle(https://www.kaggle.com/competitions/demand-forecasting-kernels-only)上获得。 此数据集中有5年的销售数据,分位train.csv和test.csv。本节我们的任务就是对此数据集进行时序建模并预测。
理论回顾
上篇关于SARIMA的文章中,笔者并没有详细介绍SARIMA背后的数学模型。本文我们对比ARIMA模型简单介绍一下。这里面的数学比较复杂,读者不用太过在意,对此无兴趣的读者可略过这段内容。
加性模型和乘性模型
我们先简单介绍一下加性模型和乘性模型。
- 加性模型: x t = T r e n d + S e a s o n a l + R a n d o m x_t=Trend+Seasonal+Random xt=Trend+Seasonal+Random
- 乘性模型:
x
t
=
T
r
e
n
d
∗
S
e
a
s
o
n
a
l
∗
R
a
n
d
o
m
x_t=Trend*Seasonal*Random
xt=Trend∗Seasonal∗Random
这里的 Random 项在时序分解中经常被认为是不规则项,不一定就是随机因素。
加性模型一般适用于季节性波动随着时间保持稳定;而乘性模型相对适用于季节波动随着时间会变大。
A R I M A ( 1 , 1 , 1 ) ARIMA(1,1,1) ARIMA(1,1,1):
ARIMA是一个加性模型(Additive Model),ARIMA(1,1,1)可以被下式描述,
Δ
y
t
=
c
+
ϕ
1
Δ
y
t
−
1
+
θ
1
ϵ
t
−
1
+
ϵ
t
\Delta y_t = c + \phi_1 \Delta y_{t-1} + \theta_1 \epsilon_{t-1} + \epsilon_{t}
Δyt=c+ϕ1Δyt−1+θ1ϵt−1+ϵt
上式中
Δ
\Delta
Δ 是一阶差分操作符,
ϵ
t
∼
N
(
0
,
σ
2
)
\epsilon_{t} \sim N(0, \sigma^2)
ϵt∼N(0,σ2)
,上式可以改写成
(
1
−
ϕ
1
L
)
Δ
y
t
=
c
+
(
1
+
θ
1
L
)
ϵ
t
(1 - \phi_1 L ) \Delta y_t = c + (1 + \theta_1 L) \epsilon_{t}
(1−ϕ1L)Δyt=c+(1+θ1L)ϵt
L
L
L是滞后算子(lag operator),其运算规则为
L
y
t
=
y
t
−
1
,
L
2
y
t
=
y
t
−
2
Ly_t=y_{t-1},L^2y_t=y_{t-2}
Lyt=yt−1,L2yt=yt−2
S A R I M A ( p , d , q ) × ( P , D , Q ) s SARIMA(p,d,q)\times (P,D,Q)_s SARIMA(p,d,q)×(P,D,Q)s
大多数SARIMA模型是一个乘性模型(Multiplicative Model),可以泛化为下式:
ϕ
p
(
L
)
ϕ
~
P
(
L
s
)
Δ
d
Δ
s
D
y
t
=
A
(
t
)
+
θ
q
(
L
)
θ
~
Q
(
L
s
)
ϵ
t
\phi_p (L) \tilde \phi_P (L^s) \Delta^d \Delta_s^D y_t = A(t) + \theta_q (L) \tilde \theta_Q (L^s) \epsilon_t
ϕp(L)ϕ~P(Ls)ΔdΔsDyt=A(t)+θq(L)θ~Q(Ls)ϵt
或者
ϕ
p
(
L
)
ϕ
~
P
(
L
s
)
y
t
∗
=
A
(
t
)
+
θ
q
(
L
)
θ
~
Q
(
L
s
)
ϵ
t
\phi_p (L) \tilde \phi_P (L^s) y_t^* = A(t) + \theta_q (L) \tilde \theta_Q (L^s) \epsilon_t
ϕp(L)ϕ~P(Ls)yt∗=A(t)+θq(L)θ~Q(Ls)ϵt
y
t
∗
=
Δ
d
Δ
s
D
y
t
y_t^* = \Delta^d \Delta_s^D y_t
yt∗=ΔdΔsDyt
这里,
- ϕ p ( L ) \phi_p (L) ϕp(L) 是非季节性自回归滞后多项式 :捕获非季节性自回归因素。
- ϕ ~ P ( L s ) \tilde \phi_P (L^s) ϕ~P(Ls)是季节性自回归滞后多项式:捕获季节性回归因素。
- Δ d Δ s D y t \Delta^d \Delta_s^D y_t ΔdΔsDyt 是时序数据 d d d 阶差分;季节性 D D D 阶差分:提供时序平稳化功能。
- A ( t ) A(t) A(t) 为趋势多项式:包括截距项
- θ q ( L ) \theta_q (L) θq(L) 是非季节性移动平均滞后多项式:
- θ ~ Q ( L s ) \tilde \theta_Q (L^s) θ~Q(Ls) 是季节性移动平均滞后多项式
假设我们有一个 S A R I M A ( 2 , 1 , 0 ) × ( 1 , 1 , 0 ) 1 2 SARIMA(2,1,0)\times (1,1,0)_12 SARIMA(2,1,0)×(1,1,0)12 包含截距项, 我们有
- ϕ p ( L ) = ( 1 − ϕ 1 L − ϕ 2 L 2 ) \phi_p (L) = (1 - \phi_1 L - \phi_2 L^2) ϕp(L)=(1−ϕ1L−ϕ2L2)
- ϕ ~ P ( L s ) = ( 1 − ϕ 1 L 1 2 ) \tilde \phi_P (L^s) = (1 - \phi_1 L^12) ϕ~P(Ls)=(1−ϕ1L12)
- d = 1 , D = 1 , s = 12 d = 1, D = 1, s=12 d=1,D=1,s=12 意味着 y t ∗ y_t^* yt∗ 是经过一阶差分和季节性(12个月)差分所得到的
- A ( t ) = c A(t) = c A(t)=c 意味着趋势多项式就是一个截距项。
- θ q ( L ) = θ ~ Q ( L s ) = 1 \theta_q (L) = \tilde \theta_Q (L^s) = 1 θq(L)=θ~Q(Ls)=1 无移动平均效果
那么,SARIMA泛化公式就会变为
(
1
−
ϕ
1
L
−
ϕ
2
L
2
)
(
1
−
ϕ
~
1
L
12
)
Δ
Δ
12
y
t
=
c
+
ϵ
t
(1 - \phi_1 L - \phi_2 L^2) (1 - \tilde \phi_1 L^{12}) \Delta \Delta_{12} y_t = c + \epsilon_t
(1−ϕ1L−ϕ2L2)(1−ϕ~1L12)ΔΔ12yt=c+ϵt
=
>
=>
=>
(
1
−
ϕ
1
L
−
ϕ
2
L
2
−
ϕ
~
1
L
12
+
ϕ
1
ϕ
~
1
L
13
+
ϕ
2
ϕ
~
1
L
14
)
y
t
∗
=
c
+
ϵ
t
(1 - \phi_1 L - \phi_2 L^2 - \tilde \phi_1 L^{12} + \phi_1 \tilde \phi_1 L^{13} + \phi_2 \tilde \phi_1 L^{14} ) y_t^* = c + \epsilon_t
(1−ϕ1L−ϕ2L2−ϕ~1L12+ϕ1ϕ~1L13+ϕ2ϕ~1L14)yt∗=c+ϵt
=
>
=>
=>
y
t
∗
=
c
+
ϕ
1
y
t
−
1
∗
+
ϕ
2
y
t
−
2
∗
+
ϕ
~
1
y
t
−
12
∗
−
ϕ
1
ϕ
~
1
y
t
−
13
∗
−
ϕ
2
ϕ
~
1
y
t
−
14
∗
+
ϵ
t
y_t^* = c + \phi_1 y_{t-1}^* + \phi_2 y_{t-2}^* + \tilde \phi_1 y_{t-12}^* - \phi_1 \tilde \phi_1 y_{t-13}^* - \phi_2 \tilde \phi_1 y_{t-14}^* + \epsilon_t
yt∗=c+ϕ1yt−1∗+ϕ2yt−2∗+ϕ~1yt−12∗−ϕ1ϕ~1yt−13∗−ϕ2ϕ~1yt−14∗+ϵt
我们可以看到,最后的结果也类似于加性模型,但是系数实际上是非季节性和季节性参数的乘性组合。
SARIMAX
虽然本篇文章旨在引出SARIMAX,但其基本原理与ARIMAX类同,只是多了季节性因素而已。为了简单介绍引入外部变量的原理和方法,我们在理论部分着重介绍ARMAX,先忽略季节因素和差分(假设时序平稳)。
模型名称中的’X’,主要是指外部变量。也就是说,你需要实时知道
t
t
t 时刻的外部变量的值
x
t
x_t
xt。
ARMAX模型最简单的方案就是把外部变量
x
t
x_t
xt 当成一个依赖变量,加入到ARMA的回归方程中,如下:
y
t
=
β
x
t
+
ϕ
1
y
t
−
1
+
⋯
+
ϕ
p
y
t
−
p
−
θ
1
z
t
−
1
−
⋯
−
θ
q
z
t
−
q
−
z
t
y_t = \beta x_t + \phi_1 y_{t-1} + \cdots + \phi_p y_{t-p} - \theta_1 z_{t-1} - \dots - \theta_q z_{t-q} - z_t
yt=βxt+ϕ1yt−1+⋯+ϕpyt−p−θ1zt−1−⋯−θqzt−q−zt
这里的减号其实并没有关系,只是为了后续推导便利。
x
t
x_t
xt 就是外部变量,
β
\beta
β 为其回归系数。这种方式看上去很直接,但是最大的缺点是回归系数
β
\beta
β 很难解释。
β
\beta
β 的值不能解释为
x
t
x_t
xt 增加1,
y
t
y_t
yt 所增加的值。回归方程中的滞后项表示
β
\beta
β 只能被解释为条件于响应变量前面的值,这非常不直观。
我们使用滞后算子来改写一下,
ϕ
(
L
)
y
t
=
β
x
t
+
θ
(
L
)
z
t
or
y
t
=
β
ϕ
(
L
)
x
t
+
θ
(
L
)
ϕ
(
L
)
z
t
,
\phi(L)y_t = \beta x_t + \theta(L)z_t \qquad\text{or}\qquad y_t = \frac{\beta}{\phi(L)}x_t + \frac{\theta(L)}{\phi(L)}z_t,
ϕ(L)yt=βxt+θ(L)ztoryt=ϕ(L)βxt+ϕ(L)θ(L)zt,
这里,
ϕ
(
L
)
=
1
−
ϕ
1
L
−
⋯
−
ϕ
p
L
p
\phi(L)=1-\phi_1L -\cdots - \phi_pL^p
ϕ(L)=1−ϕ1L−⋯−ϕpLp,且
θ
(
L
)
=
1
−
θ
1
L
−
⋯
−
θ
q
L
q
\theta(L)=1-\theta_1L-\cdots-\theta_qL^q
θ(L)=1−θ1L−⋯−θqLq
注意到自回归系数(AR)混入了外部变量系数和误差项系数。
我们可以考虑回归ARMA模型的误差,
y
t
=
β
x
t
+
n
t
y_t = \beta x_t + n_t
yt=βxt+nt
n
t
=
ϕ
1
n
t
−
1
+
⋯
+
ϕ
p
n
t
−
p
−
θ
1
z
t
−
1
−
⋯
−
θ
q
z
t
−
q
+
z
t
n_t = \phi_1 n_{t-1} + \cdots + \phi_p n_{t-p} - \theta_1 z_{t-1} - \dots - \theta_q z_{t-q} + z_t
nt=ϕ1nt−1+⋯+ϕpnt−p−θ1zt−1−⋯−θqzt−q+zt
这种形势下,回归系数就可以以其通用解释方法来解释。以滞后算子表示如下,
y
t
=
β
x
t
+
θ
(
L
)
ϕ
(
L
)
z
t
.
y_t = \beta x_t + \frac{\theta(L)}{\phi(L)}z_t.
yt=βxt+ϕ(L)θ(L)zt.
Box和Jenkis带来一个使用转换函数的泛化模型,
y
t
=
β
(
L
)
v
(
L
)
x
t
+
θ
(
L
)
ϕ
(
L
)
z
t
.
y_t = \frac{\beta(L)}{v(L)} x_t + \frac{\theta(L)}{\phi(L)}z_t.
yt=v(L)β(L)xt+ϕ(L)θ(L)zt.
这种形式允许外部变量或称为协变量的作用恨到(通过
β
(
L
)
\beta(L)
β(L),或者使协变量的衰减效果很大(通过
V
(
L
)
V(L)
V(L))
有时我们将这种回归方式称为动态回归模型(dynamic regression models).
对于非平稳时序,我们只需要将公式中的
ϕ
(
B
)
\phi(B)
ϕ(B) 替换成
∇
d
ϕ
(
B
)
\nabla^d\phi(B)
∇dϕ(B),这里
∇
=
(
1
−
B
)
\nabla=(1-B)
∇=(1−B),模型就转变成了ARIMAX; 最后我们只需要增加季节性因子就变成了SARIMAX,模型方程如下:
y
t
=
β
t
x
t
+
u
t
y_t = \beta_t x_t + u_t
yt=βtxt+ut
ϕ
p
(
L
)
ϕ
~
P
(
L
s
)
Δ
d
Δ
s
D
u
t
=
A
(
t
)
+
θ
q
(
L
)
θ
~
Q
(
L
s
)
ϵ
t
\phi_p (L) \tilde \phi_P (L^s) \Delta^d \Delta_s^D u_t = A(t) + \theta_q (L) \tilde \theta_Q (L^s) \epsilon_t
ϕp(L)ϕ~P(Ls)ΔdΔsDut=A(t)+θq(L)θ~Q(Ls)ϵt
未完,待续…
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)