序列分解模块(Series Decomposition Block)的详细解释
为了处理长期预测中的复杂时间模式,我们采用了分解的思想,该方法可以将时间序列分解为趋势-周期性部分和季节性部分。这两个部分分别反映了时间序列的长期进展和季节性变化。然而,直接对未来序列进行分解是不现实的,因为未来是未知的。为了解决这一难题,我们在 Autoformer 中引入了序列分解模块作为内部操作,逐步从预测的中间隐藏变量中提取长期稳定的趋势。具体而言,我们采用移动平均法来平滑周期波动并突出长期趋势。
序列分解过程
对于长度为 L L L的输入序列 X ∈ R L × d X \in \mathbb{R}^{L \times d} X∈RL×d,处理过程如下:
-
移动平均:
- 我们使用带有填充操作的平均池化(AvgPool)来保持序列长度不变。
- 具体公式为:
X t = AvgPool ( Padding ( X ) ) X_t = \text{AvgPool}(\text{Padding}(X)) Xt=AvgPool(Padding(X)) - 其中 X t X_t Xt表示提取的趋势-周期性部分。
-
季节性部分:
- 季节性部分通过从原始序列中减去趋势-周期性部分得到:
X s = X − X t X_s = X - X_t Xs=X−Xt - 其中 X s X_s Xs表示季节性部分。
- 季节性部分通过从原始序列中减去趋势-周期性部分得到:
我们用 X s , X t = SeriesDecomp ( X ) X_s, X_t = \text{SeriesDecomp}(X) Xs,Xt=SeriesDecomp(X)来总结上述方程,这个过程构成了模型的内部模块。
示例数据解释
假设我们有一个长度为 12 的月度销售额时间序列(单位:千元):
月份 | 销售额 (千元) |
---|---|
1月 | 100 |
2月 | 120 |
3月 | 130 |
4月 | 150 |
5月 | 170 |
6月 | 180 |
7月 | 190 |
8月 | 200 |
9月 | 220 |
10月 | 230 |
11月 | 240 |
12月 | 260 |
具体计算过程
-
趋势-周期性部分的提取:
- 假设我们使用一个窗口大小为 3 的移动平均来平滑序列:
月份 移动平均(趋势部分) (千元) 1月 (100+120+130)/3 = 116.7 2月 (120+130+150)/3 = 133.3 3月 (130+150+170)/3 = 150 4月 (150+170+180)/3 = 166.7 5月 (170+180+190)/3 = 180 6月 (180+190+200)/3 = 190 7月 (190+200+220)/3 = 203.3 8月 (200+220+230)/3 = 216.7 9月 (220+230+240)/3 = 230 10月 (230+240+260)/3 = 243.3 11月 (240+260+260)/3 = 253.3 12月 (260+260+260)/3 = 260
- 假设我们使用一个窗口大小为 3 的移动平均来平滑序列:
-
季节性部分的计算:
- 季节性部分通过从原始序列中减去趋势部分得到:
月份 季节性部分 (千元) 1月 100 - 116.7 = -16.7 2月 120 - 133.3 = -13.3 3月 130 - 150 = -20 4月 150 - 166.7 = -16.7 5月 170 - 180 = -10 6月 180 - 190 = -10 7月 190 - 203.3 = -13.3 8月 200 - 216.7 = -16.7 9月 220 - 230 = -10 10月 230 - 243.3 = -13.3 11月 240 - 253.3 = -13.3 12月 260 - 260 = 0
- 季节性部分通过从原始序列中减去趋势部分得到:
总结
通过上述具体数据的示例,我们展示了序列分解模块如何将时间序列数据分解为趋势-周期性部分和季节性部分。这种分解方法通过移动平均平滑周期波动,突出长期趋势,适用于从预测的中间隐藏变量中逐步提取长期稳定的趋势。该过程在 Autoformer 中作为内部操作,有助于提高长期时间序列预测的准确性和稳定性。