时间序列分析教程(五):Box-Jenkins方法(上)
之前介绍了时间序列的基本性质和一些基本模型,这里就介绍对时间序列进行分析建模的一套完整流程,也就是Box-Jenkins方法。简单来说Box-Jenkins方法包括四个阶段,第一,把序列转化为平稳序列,并判断出合适的ARMA模型(确定阶数)用于分析;第二,估计模型的未知参数;第三,对模型进行评价分析;第四,使用得到的模型进行预测。可以看到,其实整个过程最重要的还是第一个阶段,即如何对非平稳序...
之前介绍了时间序列的基本性质和一些基本模型,这里就介绍对时间序列进行分析建模的一套完整流程,也就是Box-Jenkins方法。
简单来说Box-Jenkins方法包括四个阶段,第一,把序列转化为平稳序列,并判断出合适的ARMA模型(确定阶数)用于分析;第二,估计模型的未知参数;第三,对模型进行评价分析;第四,使用得到的模型进行预测。
可以看到,其实整个过程最重要的还是第一个阶段,即如何对非平稳序列进行转化,以及如何确定ARMA模型的阶数。本文先主要介绍如何转化非平稳序列。
之前也说过,非平稳序列主要分析的对象就是非随机的趋势性和季节性,当然实际非平稳序列有很多也可以很复杂,你随便写一个序列也可以是非平稳序列,主要还是目前只有针对这两者的模型发展比较成熟,建模可以得到较好效果,所以才只主要分析他们,至于其他类型的序列,或许深度学习模型是个不错的选择
首先我们来看看,如何判断非平稳,最简单的办法就是看图像,初次之外我们还可以利用SACF(样本自相关函数,sample autocorrelation function)和SPACF(样本偏自相关函数,sample partial autocorrelation function)进行分析。
当我们得到一个样本序列Xt,我们可以计算样本的协方差:
γ
^
k
=
1
n
∑
t
=
k
+
1
n
(
x
t
−
μ
^
)
(
x
t
−
k
−
μ
^
)
\hat\gamma_k=\frac{1}{n} \sum_{t=k+1}^n (x_t - \hat\mu)(x_{t-k}-\hat\mu)
γ^k=n1t=k+1∑n(xt−μ^)(xt−k−μ^)
基于样本的协方差,就可以进一步推出SACF和SPACF。
SACF和SPACF有什么用呢,我们分两种情况来讨论,第一是序列具有平稳性:
-
如果SACF在时间间隔k较小时剧烈下降到0附近,SPACF快速收敛到0,那么我们可以使用MA模型;
-
如果SPACF在时间间隔k较小时剧烈下降到0附近,SACF快速收敛到0,那么我们可以使用AR模型;
-
如果SACF和SPACF都没有剧烈下降,但最终都收敛到0,那么使用ARMA模型更合适。
上述表述中的剧烈下降就是指断崖式的下降,而且不是指收敛到0,后面可能还会上升,比如:
右下图就是一个ACF的图像,可以看到他在k=2时就下降到0附近,可是后面又有波动变化,我们就不能说它收敛到0,所以用剧烈下降到0附近这种表述。
当序列不具有平稳性,我们也能利用SACF和SPACF判断它具有趋势性还是季节性:
-
如果SACF缓慢下降并最终稳定在1附近,可能序列就具有趋势性,我们可以尝试进行差分运算对其进行转换;
-
如果SACF显示出周期性,那么可能具有季节性,就需要其他手段进行性转换了。
接下来,我们来重点讨论一下,如果序列具有趋势性或者季节性,应该怎么消除他们的影响。
首先我们来看看趋势性,趋势性可以分为线性趋势和非线性趋势,如果序列显示出线性趋势,我们可以利用线性回归:
x
t
=
α
+
β
t
+
e
t
x_t = \alpha + \beta t + e_t
xt=α+βt+et
其中,et是白噪声序列,针对序列数据拟合出alpha和beta之后,我们可以计算模型和数据之间的残差:
e
^
t
=
x
t
−
α
^
−
β
^
x
\hat e_t = x_t - \hat \alpha - \hat \beta x
e^t=xt−α^−β^x
这段残差序列,就构成了一个移除了线性趋势的序列。
类似的,我们也可以利用非线性模型对数据进行拟合,并通过同样的流程得到一段移除了非线性趋势的新序列。
当然,我们的老方法差分运算也可以移除趋势,假设:
x
t
=
a
+
b
t
+
e
t
x_t = a+bt+e_t
xt=a+bt+et
▽
x
t
=
x
t
−
x
t
−
1
=
b
+
▽
e
t
\bigtriangledown x_t = x_t - x_{t-1} = b + \bigtriangledown e_t
▽xt=xt−xt−1=b+▽et
接下来,我们看看怎么处理季节性。
我们还是利用差分运算,但是要注意差分的步长,应该和季节性变化一致,比如现在有一段每月平均气温的数据,它的变化周期就是一年:
x
t
=
μ
+
θ
t
+
e
t
x_t = \mu + \theta_t + e_t
xt=μ+θt+et
θ
t
+
12
=
θ
t
\theta_{t+12} = \theta_t
θt+12=θt
这时候我们作步长为12的差分:
x
t
−
x
t
−
12
=
μ
+
θ
t
+
e
t
−
μ
−
θ
t
−
12
−
e
t
−
12
=
e
t
−
e
t
−
12
x_t - x_{t-12} = \mu + \theta_t + e_t - \mu - \theta_{t-12} - e_{t-12}=e_t- e_{t-12}
xt−xt−12=μ+θt+et−μ−θt−12−et−12=et−et−12
除此之外,之前介绍过的移动平均,也可以用来移除这种季节性,还是以上面这个周期为12的序列为例子:
y
t
=
1
12
(
1
2
x
t
−
6
+
x
t
−
5
+
.
.
.
+
x
t
+
5
+
1
2
x
t
+
6
)
y_t = \frac{1}{12} (\frac{1}{2}x_{t-6} + x_{t-5} + ... + x_{t+5} + \frac{1}{2}x_{t+6} )
yt=121(21xt−6+xt−5+...+xt+5+21xt+6)
得到的新序列yt就移除了季节性了。
除此之外,还有很多方法,这里就暂不一一介绍了。
在github写的自然语言处理入门教程,持续更新:NLPBeginner
在github写的机器学习入门教程,持续更新:MachineLearningModels
想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客
更多推荐
所有评论(0)