首发于量化哥
金融时间序列入门【三】--- 季节模型

金融时间序列入门【三】--- 季节模型

作者:yiqi.feng 原文链接:金融时间序列入门(三)--- 季节模型

前言

前两篇主要介绍了一些线性模型AR/MA/ARMA/ARIMA。这篇着重介绍时间序列的季节特征,由于书上写的内容偏少,而且很多模型python没有现成的实现方法。所以这篇写得有点乱。。。 不过重点在方法~ 大家轻拍哈~


六、季节模型


6.1 季节性时间序列


有些时间序列呈现出一定的循环或周期性,这样的时间序列叫季节性时间序列。 下面我们以月入境旅游人数数据为例,看看序列是不是具有季节性

可以看出,序列看上去有着季节性,我们在看看每年的情况

除了部分月份有一定偏差,序列整体的走势非常相似,那么可以说明有季节性么? 我们先了解下季节指数


6.1.1 季节指数


所谓季节指数就是用简单平均法计算的周期内各时期季节性影响的相对数。

首先计算周期内各期平均数

然后计算总平均数

再计算季节指数

季节指数反映了该季度与总平均值之间的一种比较稳定的关系:

如果比值大于1,说明该季度的值常常会高于总平均值;

如果比值小于1,说明该季度的值常常低于总平均值;

如果序列的季节指数都近似为1,就说明该序列没有明显的季节性。

我们来计算一下上面数据的季节指数:

可以看出,虽然看上去具有季节性,但根据季节指数来看,季节指数除了2月份以外几乎全都接近1,序列的季节性很弱,不利于后面建模。。。

没有枪,没有炮,我们自己造。。。

再来看看它的季节指数:

array([ 0.96296296, 1.18518519, 1.25925926, 0.96296296, 0.74074074, 0.74074074, 0.88888889])

可以看出,这次的季节指数比刚刚明显多了。

6.2 季节性差分

在有些应用中,季节性是次要的,我们需要把它从数据中消除,这个过程叫季节调整,其中季节性差分化是一种常见的方法。

在之前我们介绍过差分(正规差分化),其形式为:

我们将它推广,如果一个序列具有周期性,且周期为s,则季节性差分化为:


我们以第一个上序列为例(旅游的),周期为12,我们进行季节性差分试试:


可以看出,季节性基本上被消除,但是序列不够平稳,我们不妨再做1阶差分看看


p-value:2.03140523875e-11
经过ADF检验,我们发现p-value小于显著性水平0.05,序列是平稳的。

6.3 多重季节性模型

上一节中,经过了季节性差分和正规差分后,序列成为了平稳时间序列,则我们可以用MA模型对多重差分后的模型建模。则我们有模型:

其中,B为向后推移算子,代表前一时刻的值。 B的s次方则为前s时刻的值。 {at}为白噪声序列,s为序列的周期。上述模型为航空模型

另外,序列经过了季节性差分和正规差分消除序列相关性(序列平稳),则可以认为是间隔s和间隔1的周期共同影响,因此该模型称为多重季节性MA模型

6.3.1 建模


由于statsmodels中没有找到直接对序列建立季节模性的函数。我们使用参数估计的方式来建模。我们以一开始的旅游数据为例


如何进行参数估计? 首先记:

根据白噪声性质,我们计算序列的方差与协方差如下:

接着,我们计算{wt}的这三个参数:


ACF1-0.570932390983 ACF12 -0.324664871188

我们知道,我们的s为12,根据公式:
两个自相关系数为:
cov_1 = output.ix[1]['AC']*var
cov_12 = output.ix[12]['AC']*var

然后我们根据之前推出的3个等式,代入var,cov_1,cov_12,解3个方程的方程组。最终可归结为求两个二元一次方程:

未能求出满足要求的theat和Theta的值。。。也就是序列难以用以上模型表达,即使用其他方法求出最优估计,应该满足的3条性质也无法满足

另一方面,在求季节指数时我们发现该序列季节性不强,这也是原因之一。

下面我们介绍其他模型。

6.4 综合分析模型(加法模型、乘法模型、混合模型)


通常时间序列包括3个因素:

趋势因素T

季节性因素S

不规则因素I

有时候也会加入周期要素C,我们这里将它归为季节性因素


常用的综合分析模型有:

加分模型

乘法模型

混合模型

6.4.1 建模

我们之前分析过,旅游数据的季节指数显示没有明显的季节性。因此我们这里以自己构造的数据为例。

我们选用加法模型来试试:

先分离季节性,我们可以看出周期为7,用移动平均来滤波

对于去除季节性后的序列,我们用最小二乘来拟合:


k=[ 0.14285714]
b= 3.14285714286


拟合效果很好, 接着根据残差计算It

看残差我们发现,虽然很小,量级为e-15,但不是平稳的,随着序列继续推进,误差渐渐变大。 不过也可能是计算性能上的误差。

可以看出,加法模型很适合这个序列,可以有效分为趋势和季节两种特征。


6.4.2 分解


利用sm.tsa.seasonal_decompose,可以直接将时间序列分解为趋势、季节和残差,并有加法模型和乘法模型两种模式可选。以上面的数据为例

奇怪的是这里失败了。。。可能和参数中滤波器filt的设置有关,默认为移动平均。按照之前的思路应该是没问题的,但是这里并没有分离出季节特征。希望有知道的大拿告知一下~~

不管怎么样,方法是写出来了~


小结

本篇简单介绍了季节模型,由于书上太偏理论而且讲的内容太少,所以写起来相当费劲儿,python可用的现成模型也少。都是网上查阅资料自己写的。有错误的地方请指出~

个人感觉季节模型最重要的是如何分离出季节特征,其中加法模型最常用,本篇也只举了简单的例子。想要深入研究还得多看些其他资料~

欢迎到社区探讨交流


参考文献

1.《金融时间序列分析》 第2版 Ruey S.Tsay著 王辉、潘家柱 译
2.Time Series analysis tsa nipy.bic.berkeley.edu/n
3.时间序列预测全攻略(附带Python代码)

编辑于 2016-08-05

文章被以下专栏收录