时间序列分解总结

https://otexts.com/fppcn/ 第六章内容

时间序列分解

时间序列数据通常有很多种潜在模式,因此一种有效的处理时间序列的方式是将其分解为多个成分,其中每个成分都对应某一种基础模式。

三种基础的时间序列模式:趋势性,季节性和周期性。当我们想要把时间序列分解为多个成分时,我们通常将趋势和周期组合为“趋势-周期”项(有时也简单称其为趋势项)。因此,我们认为时间序列包括三个成分:趋势-周期项,季节项和残差项(残差项包含时间序列中其它所有信息)。

在本章中,我们主要介绍从时间序列中提取成分的常用方法,进而更好的理解时间序列的特点,并以此提高时间序列的预测精度。

时间序列成分

假设一条时间序列是由多种成分相加得来,那么它可以写为如下形式:

y t = S t + T t + R t y_t = S_t+T_t+R_t yt=St+Tt+Rt

在上式中 y t y_t yt表示时间序列数据, S t S_t St表示季节项, T t T_t Tt表示趋势-周期项, T t T_t Tt表示残差项。此外,时间序列也可以写成相乘的形式:
y t = S t ∗ T t ∗ R t y_t = S_t * T_t *R_t yt=StTtRt
如果季节性波动的幅度或者趋势周期项的波动不随时间序列水平的变化而变化,那么加法模型是最为合适的。当季节项或趋势周期项的变化与时间序列的水平成比例时,则乘法模型更为合适。在经济时间序列中,乘法模型较为常用。

使用乘法分解的一种替代方法是:首先对数据进行变换,直到时间序列随时间的波动趋于稳定,然后再使用加法分解。显然,采用对数变换的加法模型,等价于乘法模型:
y t = S t ∗ T t ∗ R t y_t = S_t * T_t *R_t yt=StTtRt
等价于
l o g y t = l o g S t + l o g T t + l o g R t logy_t = logS_t + logT_t +logR_t logyt=logSt+logTt+logRt

电子设备生产

在本章中我们将会讲到获取时间序列成分 S t S_t St, T t T_t Tt R t R_t Rt的几种方法,但是在此之前,我们先来看一个例子。我们将分解如图所示的电子设备新订单数量时间序列。数据显示了欧元区(16个国家)的电子设备(计算机、电子和光学产品)的新订单数量。数据已通过工作日调整并进行了正态化处理,使得100的值对应于2005。

在这里插入图片描述

电子设备订单量:趋势-周期成分(红色)和原始数据(灰色)。

如图中的红色线表示趋势周期项 T t T_t Tt,灰色线表示原始数据 y t y_t yt。趋势周期项展示了序列的整体动态,忽略了季节性变动和其它随机波动。

下图展示了本条时间序列的加法分解。本例中运用了STL方法来估计时间序列的成分,我们将在后续章节中详细讲解STL方法。

在这里插入图片描述

电气设备订单(上)及其三个可加成分。

图中的底部三栏分别为三种成分,将三种成分加和之后可以得到图中顶部的时间序列。从图中可以看出,季节项随时间变化非常缓慢,因此任意相邻的两年有着非常相似的模式,但是相隔很远的年份可能会有不同的季节性模式。第二栏所示的残差项是时间序列数据中减去季节项和趋势周期项所剩下的部分。

每一栏右侧的灰柱表示了各个成分的相对大小。四个灰柱表示相同的大小,但是因为每个图的尺度不同,灰柱的大小也会不同。第二栏的灰柱较大,它表示残差项的变化相比于原数据的波动变化较小,大约为其四分之一的大小。如果我们缩小底部三栏的大小直到他们的灰柱大小与顶部灰柱的大小相同,那么这四个图的尺度都会是相同的。

季节调整数据

如果将季节项从原始数据中剔除,可以得到经过“季节调整”后的数据。对于加法分解,季节调整数据的表达式为: y t − S t y_t-S_t ytSt,对于乘法分解,季节调整数据可由 y t / S t y_t/S_t yt/St获得。

下图展示了季节调整后的电子设备订单数据。
在这里插入图片描述

季节调整后的电子设备订单数(蓝色)及原始数据(灰色)。

如果我们关心的不是季节性的数据波动,那么季节调整后的时间序列就会十分有用。例如,每月的失业率会受到季节性因素的影响,在学生离校的时期,当月失业率会显著上升,但这种失业率并不是由于经济衰退而导致的。因此,当研究经济和失业率的关系时,应该将失业率进行季节调整。大多数研究实业数据的经济分析学者对非季节性变化更感兴趣。因此,就业数据(和很多其他的经济数据)通常会经过季节调整。

经过季节调整后的时间序列既包含残差项也包含趋势周期项。因此,它们不太“平滑”,其“下转折”和“上转折”可能会有误导性。如果我们的目的是找到序列的转折点并解释方向的变化,那么相比于用季节调整后的数据,用趋势-周期项会更合适。

移动平均

时间序列分解的经典方法起源于20世纪20年代,直到20世纪50年代才被广泛使用。它仍然是许多时间序列分解方法的基础,因此了解它的原理十分重要。传统的时间序列分解方法的第一步是用移动平均的方法估计趋势-周期项,因此我们先来讨论一下移动平均。

平滑移动平均

m m m阶移动平均可以被写为:

T ^ t = 1 m ∑ j = − k k y t + j \hat{T}_t=\frac{1}{m}\sum_{j=-k}^{k}{y_{t+j}} T^t=m1j=kkyt+j

其中 m = 2 k + 1 m=2k+1 m=2k+1。也就是说,时间点 t t t的趋势-周期项的估计值是通过求 t t t时刻的 k k k周期内的平均得到的。时间邻近的情况下,观测值也很可能接近。由此,平均值消除了数据中的一些随机性,从而我们可以得到较为平滑的趋势周期项。我们称它为 “m-MA”,也就是 m m m阶移动平均。

移动平均的阶数决定了趋势-周期项的平滑程度。一般情况下,阶数越大曲线越平滑。简单移动平均的阶数常常是奇数阶(例如:3,5,7等),这样可以确保对称性。

移动平均的移动平均

我们可以对移动平均序列计算它的移动平均,这样变可使偶数阶移动平均具备对称性。

对偶数阶(例如4阶)移动平均后的序列进行2-MA,称其为:“4阶中心移动平均”。这是因为这样处理后的结果是对称的。可见它现在是对称观测值的加权平均值。

移动平均的其他组合也是可行的。例如, 3x3-MA也很常用,它是指进行3阶移动平均后再进行一次3阶移动平均。一般来讲,进行偶数阶的移动平均后应该再进行一个偶数阶移动平均使其对称。相似地,奇数阶的移动平均后应该再进行一个奇数阶移动平均。

加权移动平均法

简单移动平均的组合可以生成加权移动平均。例如上文所探讨的2x4-MA 等价于加权5-MA, 其权重为: [ 1 / 8 , 1 / 4 , 1 / 4 , 1 / 4 , 1 / 8 ] [1/8,1/4,1/4,1/4,1/8] [1/8,1/4,1/4,1/4,1/8]一般来讲,加权
m-MA 可以写为:
T ^ t = ∑ j = − k k a j y t + j \hat{T}_t=\sum_{j=-k}^{k}{a_jy_{t+j}} T^t=j=kkajyt+j

在上式中 k = ( m − 1 ) / 2 k=(m-1)/2 k=(m1)/2,其权重为: [ a − k , … , a k ] [a_{-k},\dots,a_k] [ak,,ak]。 非常重要的一点是所选择的各期权重之和为1,并且它们是对称的,即 a − k = a k a_{-k}=a_k ak=ak
m -MA 中的权重均为 1 / m 1/m 1/m是一个简单的特例。

加权移动平均法的一大优势是它可以让趋势周期项的估计更平滑。观测值不是直接完全进入或离开计算,它们的权重缓步增加,然后缓步下降,让曲线更加平滑。

经典时间序列分解

经典时间序列分解法起源于20世纪20年代。它的步骤相对简单,它是很多其他的时间序列分解法的基石。有两种经典时间序列分解法:加法分解和乘法分解。下面将描述一个季节周期为m的时间序列(例: m=4 的季度数据, m=12 的月度数据,m=7 的周度数据)

在经典时间序列分解法中,我们假设季节项每年都是连续的。对于乘法季节性,构成季节项的 m 个值被称为季节指数。

加法分解

步骤 1 : 若m为偶数,用2×m-MA来计算趋势周期项 T ^ t \hat{T}_t T^t。若m为奇数,用m-MA 来计算趋势周期项 T ^ t \hat{T}_t T^t

步骤 2 : 计算去趋势序列: y t − T ^ t y_t-\hat{T}_t ytT^t

步骤 3 : 为了估计每个季度的季节项,简单平均那个季度的去趋势值。例如,对于月度数据,三月份的季节项是对所有去除趋势后的三月份的值的平均。然后将这些季节项进行调整,使得它们的加和为 0。季节项是通过将这些各年的数据排列结合在一起而得到的,即 S ^ t \hat{S}_t S^t

步骤 4 : 残差项是通过时间序列减去估计的季节项和趋势-周期项求得的: R ^ t = y t − T ^ t − S ^ t \hat{R}_t=y_t-\hat{T}_t-\hat{S}_t R^t=ytT^tS^t

乘法分解

经典乘法分解与加法分解十分相似,只不过是用除法代替了减法。

步骤 1 :若m为偶数,用2×m-MA来计算趋势周期项 T ^ t \hat{T}_t T^t。若m为奇数,用m-MA 来计算趋势周期项 T ^ t \hat{T}_t T^t

步骤 2 : 计算去趋势序列: y t / T ^ t y_t/ \hat{T}_t yt/T^t

步骤 3 : 为了估计每个季度的季节项,简单平均那个季度的去趋势值。例如,对于月度数据,三月份的季节项是对所有去除趋势后的三月份的值的平均。然后将这些季节项进行调整,使得它们的加和为 0。季节项是通过将这些各年的数据排列结合在一起而得到的,即 S ^ t \hat{S}_t S^t

步骤 4 : 残差项是通过时间序列减去估计的季节项和趋势-周期项求得的: R ^ t = y t / ( T ^ t S ^ t ) \hat{R}_t=y_t/ (\hat{T}_t\hat{S}_t) R^t=yt/(T^tS^t)

经典时间序列分解法评价

尽管经典时间序列分解法的应用还很广泛,但是我们不十分推荐使用它,因为现在已经有了一些更好的方法。经典时间序列分解的几点问题总结如下:

经典时间序列分解法无法估计趋势-周期项的最前面几个和最后面几个的观测。例如,若 m=12,则没有前六个或后六个观测的趋势-周期项估计。由此也会使得相对应的时期没有残差项的估计值。

经典时间序列分解法对趋势-周期项的估计倾向于过度平滑数据中的快速上升或快速下降。

经典时间序列分解法假设季节项每年是重复的。对于很多序列来说这是合理的,但是对于更长的时间序列来说这还有待考量。例如,因为空调的普及,用电需求模式会随着时间的变化而变化。具体来说,在很多地方几十年前的时候,各个季节中冬季是用电高峰(用于供暖加热),但是现在夏季的用电需求最大(由于开空调)。经典时间序列分解法无法捕捉这类的季节项随时间变化而变化。

有时候,时间序列中一些时期的值可能异乎寻常地与众不同。例如,每月的航空客运量可能会受到工业纠纷的影响,使得纠纷时期的客运量与往常十分不同。处理这类异常值,经典时间序列分解法通常不够稳健。

X11 分解法

用于分解季度月度数据的另一个流行方法是X11分解法,它最初起源于美国人口普查局和加拿大统计局。

这个方法是基于经典时间序列分解法的,但是它包括了很多用于克服经典时间序列分解法的缺陷的额外步骤与特征。具体来讲,它可以估计包括端点在内的各个时期的趋势-周期项,并且它允许季节项缓慢变化。X11还有一些复杂的方法来处理交易日的变化,假日效应和已知的预测因素的影响。它既可以处理加法分解也可以处理乘法分解。它的过程是全自动的,并且它对序列中的离群值和水平移动较为严苛。

X11分解法的细节在【Dagum, E. B., & Bianconcini, S. (2016). Seasonal adjustment methods and real time trend-cycle estimation. Springer.】中可以了解到。这里我们仅仅演示如何在R中使用它。

X11分解法可以在seasonal包中调取seas()函数来使用。

SEATS 分解法

见arima

“SEATS”表示”ARIMA时间序列的季节提取 (Seasonal Extraction in ARIMA Time Series)” 。这个方法是西班牙银行发明的,现在被世界各地的政府机构广泛使用。这个方法仅能分析季度数据和月度数据。因此,其他类型的季节性,如每日数据,或每小时数据,或每周数据,需要其他方法。

SEATS的具体细节不在本书中赘述,这个方法在 Dagum & Bianconcini (2016) 中有完整详细的解释。这里,我们主要展示如何通过seasonal包来使用这个方法。

STL 分解法

STL(Seasonal and Trend decomposition using Loess)是一个非常通用和稳健强硬的分解时间序列的方法,其中Loess是一种估算非线性关系的方法。STL分解法由 R. B. Cleveland, Cleveland, McRae, & Terpenning (1990) 提出。

【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.】

在这里插入图片描述

相比于经典、SEATS和X-11分解法STL分解法有几点优势:

-与SEATS和X-11不同的是,STL可以处理任何类型的季节性,不仅仅是月度数据和季度数据。

-季节项可以随时间变化而变换,并且变化的速率可以由用户掌控。

    趋势-周期项的平滑程度也可以由用户掌控。

    可以不受离群点干扰(例如,用户可以指定一个稳健的分解)

另一方面,STL也有一些不足之处。具体来讲,它不能自动地处理交易日或是其他有变动的日子,并且它提供了处理加法分解的方式。

为了得到乘法分解我们可以首先对数据取对数,然后对各成分进行反向变换。对数据进行 0 < λ < 1 0<\lambda <1 0<λ<1 的Box-Cox变换可以得到加法分解与乘法分解。 其中 λ = 0 \lambda=0 λ=0 的值对应于乘法分解, λ = 1 \lambda=1 λ=1等价于加法分解。

趋势性和季节性的程度测定

时间序列分解可以用来测定时间序列的趋势性和季节性(Wang, Smith, & Hyndman, 2006),其分解式为:
y t = S t + T t + R t y_t = S_t+T_t+R_t yt=St+Tt+Rt

其中 T t T_t Tt表示平滑后的趋势项, S t S_t St表示季节项, R t R_t Rt表示残差项。对于趋势性很强的数据,经季节调整后的数据应比残差项的变动幅度更大。因此, V a r R t V a r ( T t + R t ) \frac{VarR_t}{Var(T_t+R_t)} Var(Tt+Rt)VarRt会相对较小。但是,对于没有趋势或是趋势很弱的时间序列,两个方差应大致相同。因此,我们将趋势强度定义为:

F T = m a x ( 0 , 1 − V a r R t V a r ( T t + R t ) ) F_T=max(0,1-\frac{VarR_t}{Var(T_t+R_t)}) FT=max(0,1Var(Tt+Rt)VarRt)

这可以给趋势强度的衡量标准,其值在 0-1 之间。因为有些情况下残差项的方差甚至比季节变换后的序列还大,我们令 F T F_T FT可取的最小值为0。

相似地,季节性的强度定义如下,其所用的数据为去除趋势后的数据而不是季节调整后的数据。
F S = m a x ( 0 , 1 − V a r R t V a r ( S t + R t ) ) F_S=max(0,1-\frac{VarR_t}{Var(S_t+R_t)}) FS=max(0,1Var(St+Rt)VarRt)

当季节强度 F S F_S FS接近 0 时表示该序列几乎没有季节性,当季节强度 F S F_S FS接近 1 时表示该序列的 V a r R t VarR_t VarRt 远小于 V a r ( S t + R t ) Var(S_t+R_t) Var(St+Rt)

这些度量方法非常实用,例如当你需要在很多时间序列中找到趋势性或季节性最强的序列,就可以使用这个方法。

分解法预测

分解时间序列不仅本质上在学习时间序列中和在探索历史随之间变化中十分有用,它也可以应用在预测中。

假设一个加法分解,分解后的时间序列可以写为:
y t = S ^ t + A ^ t y_t=\hat{S}_t+\hat{A}_t yt=S^t+A^t

其中 A ^ t = T ^ t + R ^ t \hat{A}_t=\hat{T}_t+\hat{R}_t A^t=T^t+R^t 是经季节调整后的部分。或者,如果使用乘法分解,分解后的时间序列可以写为:
y t = S ^ t A ^ t y_t=\hat{S}_t\hat{A}_t yt=S^tA^t

其中 A ^ t = T ^ t R ^ t \hat{A}_t=\hat{T}_t\hat{R}_t A^t=T^tR^t.

对于预测一个分解的时间序列,我们需要分别预测季节项 S ^ t \hat{S}_t S^t,和经季节调整后的 A ^ t \hat{A}_t A^t。通常情况下我们假设季节项不变,或者变化得很慢,因此它可以通过简单地使用最后一年的季节项的估计来预测。换而言之,计算季节项使用了朴素季节法。

可以使用任意非季节性预测方法来预测季节调整后的分量。例如,可以使用带漂移项的随机游走法,也可以使用三次指数平滑法(Holt-Winters法),或者还可以用非季节性的ARIMA模型。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STL(Seasonal and Trend decomposition using Loess)是一种用于时间序列分解的统计方法。它被广泛应用于经济学、气象学等领域,用于分析和预测时间序列数据的季节性、趋势性和残差成分。 STL算法的流程图如下: 1. 数据准备:首先,需要收集时间序列数据,并对数据进行预处理。这包括去除异常值、填补缺失值等。 2. 序列分解:使用LOESS(局部加权回归平滑)方法对时间序列数据进行分解。LOESS是一种非参数的回归方法,通过拟合局部多项式回归来估计数据中的季节性和趋势性成分。分解后的数据包括趋势、季节和残差成分。 3. 季节性调整:对分解后的数据进行季节性调整,以消除季节性对趋势分析和预测的影响。调整的方法可以采用差分或比率方法,以提取出季节性成分。 4. 趋势分析:对季节性调整后的数据进行趋势分析。可以使用简单移动平均、加权移动平均、指数平滑等方法来估计和预测趋势分量。 5. 残差分析:对趋势分析后的数据进行残差分析。残差表示未被趋势和季节性解释的波动成分。可以用来检测是否存在模型中未捕捉到的信息,并进行进一步的模型修正。 6. 预测:最后,利用趋势分析和残差分析的结果,可以进行未来时间点的数据预测。可以搭建ARIMA、VAR、GARCH等时间序列模型来进行预测。 总结起来,STL方法通过拟合LOESS回归来分解时间序列数据,并对分解后的数据进行季节性调整、趋势分析和残差分析,以及未来数据的预测。它在许多实际问题中都具有很好的效果,是一种强大的时间序列分析工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值