Autoformer 架构之序列分解模块(Series Decomp)的实现

序列分解模块(Series Decomp)的实现

序列分解模块在 Autoformer 中用于将时间序列分解为趋势和季节性部分。以下是这一模块的具体实现步骤和原理:

分解原理

时间序列的分解通常包括将其分解为以下几个部分:

  1. 趋势(Trend):表示时间序列的长期方向性变化。
  2. 季节性(Seasonality):表示时间序列的周期性波动。
  3. 残差(Residual):表示时间序列中不规则或噪音部分。

这些部分可以通过多种方法进行分解,常见的方法包括移动平均法和傅里叶变换等。

实现步骤
  1. 趋势提取

    • 使用移动平均或低通滤波器来提取时间序列的趋势部分。
    • 趋势部分通常表示为一个平滑的曲线,反映数据的长期变化方向。
  2. 季节性提取

    • 使用傅里叶变换或其他周期性分解方法来提取季节性成分。
    • 季节性成分反映数据中重复的周期性波动。
  3. 残差计算

    • 残差部分通过从原始时间序列中减去趋势和季节性成分得到。
    • 残差部分包含了数据中无法通过趋势和季节性成分解释的变化。

具体实现

趋势提取

使用移动平均法来提取趋势部分,具体步骤如下:

  1. 选择一个窗口大小 W W W,例如 12(表示月度数据中的一年)。
  2. 计算移动平均:
    T t = 1 W ∑ i = 0 W − 1 X t − i T_t = \frac{1}{W} \sum_{i=0}^{W-1} X_{t-i} Tt=W1i=0W1Xti
    其中 T t T_t Tt表示时间 t t t的趋势值, X t X_t Xt表示时间 t t t的原始数据。
季节性提取

使用傅里叶变换来提取季节性成分,具体步骤如下:

  1. 对时间序列应用快速傅里叶变换(FFT):
    S ( f ) = ∑ t = 0 T − 1 X t e − 2 π i f t / T S(f) = \sum_{t=0}^{T-1} X_t e^{-2\pi i ft / T} S(f)=t=0T1Xte2πift/T
    其中 S ( f ) S(f) S(f)是频率 f f f对应的傅里叶系数。
  2. 选择主要的周期性成分(即保留主要的傅里叶系数),逆变换回时域:
    s t = ∑ f ∈ F S ( f ) e 2 π i f t / T s_t = \sum_{f \in F} S(f) e^{2\pi i ft / T} st=fFS(f)e2πift/T
    其中 s t s_t st是时间 t t t的季节性成分, F F F是保留的主要频率集合。
残差计算

计算残差部分,具体步骤如下:

  1. 从原始时间序列中减去趋势和季节性成分:
    R t = X t − T t − s t R_t = X_t - T_t - s_t Rt=XtTtst
    其中 R t R_t Rt是时间 t t t的残差部分。

序列分解模块(Series Decomp)的具体数据举例

让我们用具体的数据举例来解释序列分解模块是如何工作的。假设我们有以下时间序列数据,它表示某个商店的月度销售额(单位:千元):

月份销售额 (千元)
2019年1月100
2019年2月120
2019年3月130
2019年4月150
2019年5月170
2019年6月180
2019年7月190
2019年8月200
2019年9月220
2019年10月230
2019年11月240
2019年12月260
2020年1月130
2020年2月140
2020年3月160
2020年4月180
2020年5月170
2020年6月190
2020年7月200
2020年8月210
2020年9月220
2020年10月230
2020年11月240
2020年12月260

趋势提取

首先,我们使用移动平均法来提取时间序列的趋势部分。假设我们选择一个窗口大小为 12 个月(表示一个年度周期)。趋势部分可以通过计算每个时间点前后12个月的平均值来得到。

月份销售额 (千元)趋势 (千元)
2019年1月100160
2019年2月120165
2019年3月130170
2019年4月150175
2019年5月170180
2019年6月180185
2019年7月190190
2019年8月200195
2019年9月220200
2019年10月230205
2019年11月240210
2019年12月260215
2020年1月130220
2020年2月140225
2020年3月160230
2020年4月180235
2020年5月170240
2020年6月190245
2020年7月200250
2020年8月210255
2020年9月220260
2020年10月230265
2020年11月240270
2020年12月260275

季节性提取

接下来,我们提取季节性成分。假设我们观察到每年1月至12月有重复的季节性模式,这可以通过分析各月的偏离趋势的值来得到。

月份销售额 (千元)趋势 (千元)季节性 (千元)
2019年1月100160-60
2019年2月120165-45
2019年3月130170-40
2019年4月150175-25
2019年5月170180-10
2019年6月180185-5
2019年7月1901900
2019年8月2001955
2019年9月22020020
2019年10月23020525
2019年11月24021030
2019年12月26021545
2020年1月130220-90
2020年2月140225-85
2020年3月160230-70
2020年4月180235-55
2020年5月170240-70
2020年6月190245-55
2020年7月200250-50
2020年8月210255-45
2020年9月220260-40
2020年10月230265-35
2020年11月240270-30
2020年12月260275-15

残差计算

最后,计算残差部分,即原始数据减去趋势和季节性成分后的结果。

月份销售额 (千元)趋势 (千元)季节性 (千元)残差 (千元)
2019年1月100160-600
2019年2月120165-450
2019年3月130170-400
2019年4月150175-250
2019年5月170180-100
2019年6月180185-50
2019年7月19019000
2019年8月20019550
2019年9月220200200
2019年10月230205250
2019年11月240210300
2019年12月260215450
2020年1月130220-900
2020年2月140225-850
2020年3月160230-700
2020年4月180235-550
2020年5月170240-700
2020年6月190245-550
2020年7月200250-500
2020年8月210255-450
2020年9月220260-400
2020年10月230265-350
2020年11月240270-30

0 |
| 2020年12月| 260 | 275 | -15 | 0 |

总结

通过上述具体数据的示例,我们看到序列分解模块如何将时间序列数据分解为趋势、季节性和残差成分。这种分解有助于更好地理解和预测时间序列数据中的模式和趋势。

总结

序列分解模块通过趋势提取和季节性提取来分解时间序列。这些分解步骤使得数据更易于建模,特别是针对季节性模式。上述方法展示了如何使用移动平均和傅里叶变换来实现趋势和季节性的提取,这些方法在实际应用中可以帮助提高时间序列预测模型的准确性。

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值