之前介绍了时间序列的基本性质和一些基本模型,这里就介绍对时间序列进行分析建模的一套完整流程,也就是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+1n(xtμ^)(xtkμ^)
基于样本的协方差,就可以进一步推出SACF和SPACF。

SACF和SPACF有什么用呢,我们分两种情况来讨论,第一是序列具有平稳性:

  1. 如果SACF在时间间隔k较小时剧烈下降到0附近,SPACF快速收敛到0,那么我们可以使用MA模型;

  2. 如果SPACF在时间间隔k较小时剧烈下降到0附近,SACF快速收敛到0,那么我们可以使用AR模型;

  3. 如果SACF和SPACF都没有剧烈下降,但最终都收敛到0,那么使用ARMA模型更合适。

上述表述中的剧烈下降就是指断崖式的下降,而且不是指收敛到0,后面可能还会上升,比如:

在这里插入图片描述

右下图就是一个ACF的图像,可以看到他在k=2时就下降到0附近,可是后面又有波动变化,我们就不能说它收敛到0,所以用剧烈下降到0附近这种表述。

当序列不具有平稳性,我们也能利用SACF和SPACF判断它具有趋势性还是季节性:

  1. 如果SACF缓慢下降并最终稳定在1附近,可能序列就具有趋势性,我们可以尝试进行差分运算对其进行转换;

  2. 如果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=xtxt1=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} xtxt12=μ+θt+etμθt12et12=etet12
除此之外,之前介绍过的移动平均,也可以用来移除这种季节性,还是以上面这个周期为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(21xt6+xt5+...+xt+5+21xt+6)
得到的新序列yt就移除了季节性了。

除此之外,还有很多方法,这里就暂不一一介绍了。

在github写的自然语言处理入门教程,持续更新:NLPBeginner

在github写的机器学习入门教程,持续更新:MachineLearningModels

想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐