时间序列预测时间序列分解(Time series decomposition)

Posted 哈希大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间序列预测时间序列分解(Time series decomposition)相关的知识,希望对你有一定的参考价值。

    时间序列分解是将完整的时间序列数据分解为几个元素,每个元素有一定的特征。通过时间序列分解,有助于我们更好的分析时间序列,也有助于提高预测精度。

时间序列模式主要有:

    趋势项:趋势项是指时间序列具有长期增长或降低的趋势,不一定是线性的。当趋势项从增长转为降低时,我们称之为“a trend changing direction”。

    季节项:如果时间序列数据明显的受到季节因素的影响,那么这个时间序列为季节项,季节项具有固定的周期(季度,月份,周)。

    周期项:时间序列的周期性上升或者下降的周期是不固定的,但通常周期在2年以上。

    很多人对季节项和周期项有一些疑惑,怎样区分两者?其实seasonal和cyclic还是有很大区别的。

(1)如果波动/变化的时间是不固定的,那么时间序列是周期项(cyclic);

(2)如果波动/变化的时间是固定的而且与日期(calendar)有关,那么时间序列是季节项(seasonal);

(3)通常情况下,周期项的时间跨度是长于季节项的,而且周期序列的变化幅度比季节项大。

   (1)月度房屋销售(左上)显示每年的季节性(seasonal)较强,以及6-10年明显的周期性(cyclic)。这段时间序列数据没有明显的趋势项(trend)。

(2)美国国库券合约(右上)显示1981年芝加哥市场连续100个交易日的收益,没有季节性(seasonal),但有明显的下降趋势(trend)。可能的话,如果我们有更长的系列,我们会看到这种下降趋势实际上是一个长周期(cyclic)的一部分,但仅仅在100天内观察时,这似乎只是一种趋势项。

(3)澳大利亚月度电力生产(左下)显示出强劲的增长趋势(trend), 具有强劲的季节性(seasonal),没有周期项(cyclic)。

(4)道琼斯指数(右下)的每日变化,没有趋势项(trend),季节性(seasonal)或周期性(cyclic)。随机波动似乎不可预测,因为没有明显的模式(patern)可以辅助建立预测模型。

时间序列分解

 我们将时间序列看做季节项(a seasonal component)、趋势-周期项(a trend-cycle component)和其他项( a remainder component)的组合,可以写为:

【时间序列预测】时间序列分解(Time series decomposition)

【时间序列预测】时间序列分解(Time series decomposition)

 其中,St是指季节项,Tt是指趋势-周期项,Et是指其他的剩余项;如果季节性波动的幅度或趋势-周期项的时间跨度不随时间变化,那么加性模型是最合适的。反之,乘法模型更合适。在经济学研究领域中,乘法模型更为常见。使用乘法模型时,可以对数据进行变换,直到时间序列的变化随时间稳定,然后使用可加模型。

【时间序列预测】时间序列分解(Time series decomposition)

 等价于

【时间序列预测】时间序列分解(Time series decomposition)

Example 1:欧洲地区电气设备生产量

【时间序列预测】时间序列分解(Time series decomposition)

【时间序列预测】时间序列分解(Time series decomposition)

上图显示了趋势=周期项Tt以红色线标示,原始数据yt以灰色显示。趋势-周期项显示该时间序列的总体运动,忽略了季节性和任何小的随机波动。

【时间序列预测】时间序列分解(Time series decomposition)

 上图展示这些数据的加法分解。第一排的时间序列分解seasonaltrend-cyclicremainder

季节性调整数据(Seasonally adjusted data

 从原始时间序列中,去掉季节项,即:yt−Styt/St。调整后的时间序列:

【时间序列预测】时间序列分解(Time series decomposition)

如果由季节性引起的变化不是主要的关注点,那么季节性调整可能会有用。例如,月度失业数据通常会进行季节性调整,来突出由于经济的基本状况而引起的变化,而不是季节性变化。大多数研究失业数据的人对非季节性变化更感兴趣。因此,就业数据(和许多其他经济系列)通常会进行季节性调整。

季节性调整系列包含剩余部分以及趋势-周期项。因此,它们并不“流畅”,“下滑”或“上涨”可能会引起误解。如果目的是寻找系列中的转折点,并解释系列中的任何变化,则最好使用趋势-周期项而不是季节性调整数据。

移动平均(Moving averages

 移动平均早在192世纪20年代就用于时间序列分解,50年代开始被广泛使用。移动平均是估计趋势项的好方法。

移动平均平滑(Moving average smoothing),m阶的移动平均可以写为:

【时间序列预测】时间序列分解(Time series decomposition)

   m=2*k+1 ,称为m -MA t处的趋势周期的估计值是通过k个时间段内的时间序列值进行平均而获得的。 时间上靠近的观测值也可能接近,平均值会消除数据中的一些随机性,从而留下平滑的趋势周期分量,称之为m-MA。要注意的是,平滑之后,会使前面k个值和后面的k个值变为null.下图,黑色是1989年到2008年每年向南澳大利亚居民销售的电量,红色是平滑之后的曲线:

【时间序列预测】时间序列分解(Time series decomposition)

上图是5-MA,移动平均线的阶数m决定趋势周期估计的平滑度。通常,m越大,曲线越平滑。下图显示了m=3,5,7,9时的移动平滑曲线。

【时间序列预测】时间序列分解(Time series decomposition)

移动平均的平均(Moving averages of moving averages

简单来说就是在已经平滑的基础上再一次平滑,这样可以使不同远近的数据有不同的权重,下面例子先使用4-ma平滑再使用2-ma平滑,称为2x4-MA 

【时间序列预测】时间序列分解(Time series decomposition)

公式为: 

【时间序列预测】时间序列分解(Time series decomposition)

可见最后的结果是取相近5个值的加权平均数,其特征为第一个和最后一个值的权重为1/2m,其他值为1/m ,另外还需注意,也可使用其他组合但是奇数需要和奇数组合,偶数与偶数组合。

seasonal data处理

如果季节性周期是偶数m,使用2*m-MA来估计trend-cyclic;如果季节性周期是奇数m,使用m-MA来估计trend-cyclic;例如使用2*12-MA来平滑以月为季节性周期的数据,使用7-ma来平滑以天为周期的数据,其他的选择可能会使trend-cyclic受到seasonal的影响。

权重移动平滑

   即将原来的moving average 的每项前面加一个权重,2*4-MA也相当于加了权重,常见权重系数(SpencerHenderson)如下图: 

【时间序列预测】时间序列分解(Time series decomposition)

经典分解方法

 经典分解分为加法分解和乘法分解 ,假设所用数据为季节性周期m的时间序列,m也是季节性指数 ,其步骤如下:

【时间序列预测】时间序列分解(Time series decomposition)

经典分解的缺点

1.使用moving average时会使数据的前面和后面的数值缺失,变为null

2.季节性的趋势可能会随时间变化,而经典中使用了平均值,忽略了这一变化

3.其求平均值时,容易受到异常值的影响,如有一个月特别不正常,直接计算平均值容易得到不正确的结果

X-12-ARIMA

  这是美国人口普查局的发明,克服了经典分解的缺点,但是只适用于季度或者月份为季节性周期的时间序列。以乘法模式为例,分解步骤:  

  注意:是具体情况步骤11,12中的ma可以替换为3x3 3x5 3x9 
    R 中的相关包 https://cran.r-project.org/web/packages/x12/index.html




不要错过




以上是关于时间序列预测时间序列分解(Time series decomposition)的主要内容,如果未能解决你的问题,请参考以下文章

R语言时间序列(time series)分析实战:HoltWinters平滑法预测

R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列

Python使用matplotlib可视化时间序列数据的分解图将时间序列数据进行分解并可视化分解为趋势季节和残差等成分(Time Series Decomposition Plot)

R语言时间序列(time series)分析实战:霍尔特指数Holt‘s平滑法预测

Time Series

论文笔记:Temporal Regularized Matrix Factorization forHigh-dimensional Time Series Prediction