时间序列分解

简介

综合转载于:

时间序列的成分

对于一个时间序列 $y(t)$,假设它是加性模型(an additive decomposition),则可以写成

其中 $S(t)$、$T(t)$、$R(t)$ 分别是周期成分(seasonal component)、趋势成分(trend-cycle component)、残差成分(remainder component)。

类似地,一个乘性模型可以写成

对于乘性模型,可以取对数(当然是有意义的前提下),将其转化为加性模型。

引文:

The additive decomposition is the most appropriate if the magnitude of the seasonal fluctuations, or the variation around the trend-cycle, does not vary with the level of the time series. When the variation in the seasonal pattern, or the variation around the trend-cycle, appears to be proportional to the level of the time series, then a multiplicative decomposition is more appropriate. Multiplicative decompositions are common with economic time series.

加性模型的缺点:

  1. 分解的时候,趋势性的预测总是缺乏首尾的数值。这一点做滑动平均(moving average)就会有体会,用前 $n$ 个序列的均值来作为 $n+1$ 时刻的趋势预测,那么前面 $n$ 个数值注定都是缺失值,而最后 $n$ 个数值也无法获得;

  2. 对于骤增和骤降不敏感,显得过于平滑,因此如果有突发的事件也难以进行捕捉;

  3. 对季节性的预测非常刻板,基本假设中周期性是固定的,如果随着时间改变其周期性波动也发生改变,可加性分解就无法捕捉到。

经典分解法(classical decomposition)

经典的时间序列分界算法,起于1920年,直到1950年之前仍在广泛使用。经典算法步骤相对简单,同时也是很多其他分解算法的基础。经典分解法是假设周期性成分在每个周期内都是相同的(【例如每年的月周期成分都相同】)。

经典分解法用到移动平均的概念:m-MA(意指m阶移动平均)是指

其中 $m=2k+1$,亦即时刻t的移动平均的值为向前 $k$ 个值和向后 $k$ 个值的均值。

加性模型分解算法

步骤:

  1. 如果 $m$ 为偶数,则用2-m-MA(所谓2-m-MA,意思是对序列先进行4-MA,然后对移动平均之后的序列,计算其2-MA。的这样就实现了某种对称性)来计算序列的趋势成分 $T(t)$;如果m为奇数,则用m-MA来计算序列的趋势成分 $T(t)$。
  2. 计算去掉趋势的时间序列 $D(t)=y(t)-T(t)$。
  3. 为了估计周期成分,只需要对同一周期的数据取均值即可。例如对于月度数据,要计算三月的周期性成分,对所有 $D(t)$ 中的三月份的数据进行求均值即可。周期性成分会被调整(加上一个偏置)以使得它们的和为0。对周期性成分复制到 $D(t)$ 的长度,即得到D(t)的所有周期性成分,记作 $S(t)$。
  4. 残差成分 $R(t)=y(t)-T(t)-S(t)$。

乘性模型分解算法

乘性模型和加性模型的思想很类似,区别在于把上述加性模型的步骤2改成 $D(t)=y(t)/T(t)$,Step4改成 $R(t)=y(t)/(T(t)*S(t))$。

X11分解法(X11 decomposition)

另一个受人欢迎的季度性数据和月度数据的分解算法是 X11分解法,它发明于美国人口普查局和加拿大统计局。

这方法是基于经典分解法的,但是包括很多其他的步骤和特点来客服经典分解法的一些不足。特别的,所有的数据点的趋势成分都可以得到(经典分解法最开始和最后的部分数据无法计算得到移动平均值),周期成分允许随着时间变化。X11有一些复杂的方法来处理交易日、假期、一些已知的影响因素的影响。它同时处理了加性模型和乘性模型。这个过程是全自动的,而且对于时间序列中的异常值和数据变动很鲁棒。

X11方法的细节可以参考 Dagum, E. B., & Bianconcini, S. (2016). Seasonal adjustment methods and real time trend-cycle estimation. Springer。R中有现成的程序可以使用。

SEATS分解(SEATS decomposition)

“SEATS”是指“Seasonal Extraction in ARIMA Time Series”。这个方法是由西班牙银行开发 的,现在被广泛应用在各国的政府部门中。

SEATS就是从ARIMA模型中提取季节变化因素。它具有一定的限制,就是只能够对季节尺度和月尺度的时间序列进行处理,其他则不行。可以看原始介绍

详细的算法过程请参考 Dagum, E. B., & Bianconcini, S. (2016). Seasonal adjustment methods and real time trend-cycle estimation. Springer. R中的seasonal包中有程序接口可以使用。

STL分解(STL decomposition)

STL是时间序列分解的一种versatile和鲁棒的方法。它是“Seasonal and Trend decomposition using Loess”的缩写,其中Loess是一种鲁棒的回归算法。STL,也就是对季节因子和趋势因子都进行了局部多项式回归的方法。它比以上提到的所有方法都要优秀,因为:

  1. SEATS和X11只能解决季节和月尺度的时间序列,STL没有任何限制;

  2. 季节因子可以随时间变化而变化,变化速率可以用户自定义;

  3. 趋势因子可以用户自定义;

  4. 对离群值不敏感,不过这样可能会让局部残差变大。

也有缺点,如只能进行可加性分解,无法根据交易日进行调整。不过如果要用可乘性的分解,其实可以先将序列进行对数化运算,然后再做STL,最后再反推回去即可。

其中LOESS(locally weighted scatterplot smoothing,LOWESS or LOESS)为局部多项式回归拟合,是对两维散点图进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性。当要估计某个响应变量值时,先从其预测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,回归时采用加权最小二乘法,即越靠近估计点的值其权重越大,最后利用得到的局部回归模型来估计响应变量的值。用这种方法进行逐点运算得到整条拟合曲线。

Robust LOESS 为鲁棒局部加权回归,具体算法可以参看博文 鲁棒局部加权回归 。STL对异常点具有健壮性,仅能处理加法模式的分解,对于乘法模式需要先转换为加法模式处理最后在逆变换回去。鲁棒局部加权回归法方法的LOESS过程和鲁棒性过程分别在STL的内部环和外部环中嵌套实现.

详细内容请参考 Cleveland, R. B., Cleveland, W. S., McRae, J. E., & Terpenning, I. J. (1990). STL: A seasonal-trend decomposition procedure based on loess. Journal of Official Statistics, 6(1), 3–33.

时序中趋势成分和周期成分的强度

时间序列分解可以用来衡量序列中的趋势成分和周期成分的强度。以分解公式

为例。

上式中,如果趋势性越强,$\text{Var}(T_t+R_t)$ 会比 $Var(R(t))$ 大得多,因此上式会很大,当然被限制在[0,1]之间。因此可以用上式来衡量趋势的强度。同理,下式可以用来衡量周期的强度,它也在[0,1]之内。

一分一毛,也是心意。