供应链时间序列预测工程 - 第2节
2. 时间序列基础
时间序列(Time Series)是按时间顺序排列的观测值集合。与横截面数据不同,时间序列的相邻观测之间存在依赖关系,这种依赖性是建模的核心依据。一个完整的时间序列通常可分解为四种成分:趋势、季节、周期与残差。
2.1.1 四种成分的定义与对比
| 成分 | 英文 | 定义 | 典型特征 | 示例 |
|---|---|---|---|---|
| 趋势 | Trend | 序列长期、单调的上升或下降方向 | 平滑、单向、无固定周期 | GDP 年增长率、全球平均气温 |
| 季节 | Seasonal | 固定周期长度(如 12 个月、7 天)的重复模式 | 周期已知且固定 | 月用电量、日交通流量 |
| 周期 | Cyclic | 非固定长度的上升-下降波动 | 周期长度可变、无固定频率 | 经济繁荣-衰退周期 |
| 残差 | Residual | 剔除趋势、季节、周期后的随机波动 | 不可预测、白噪声候选 | 测量误差、突发事件冲击 |
区分季节与周期的关键:季节成分的周期长度是固定的(如一年 12 个月),而周期成分的周期长度是可变的(如经济周期可能持续 3-10 年)。在建模时,季节成分通常用傅里叶项或季节虚拟变量处理,周期成分则需要更灵活的模型结构。
2.1.2 加法模型与乘法模型
四种成分的组合方式主要有两种:
- 加法模型: \( Y_t = T_t + S_t + C_t + R_t \) —— 适用于成分之间相互独立、波动幅度不随趋势变化的情况。
- 乘法模型: \( Y_t = T_t \times S_t \times C_t \times R_t \) —— 适用于季节波动幅度随趋势水平变化的情况(如零售额随经济规模增长而季节性波动放大)。
工程经验:在深度学习迁移适配中,建议先对序列进行对数变换,将乘法模型转化为加法模型,再使用标准化层统一处理。这能显著提升 LSTM、Transformer 等模型的收敛稳定性。
2.2 平稳性:时间序列建模的基石
平稳性(Stationarity)是时间序列建模中最核心的前提假设。一个平稳时间序列的统计性质(均值、方差、自协方差)不随时间平移而改变。如果序列非平稳,直接建模会导致伪回归、预测失效等问题。
2.2.1 严平稳 vs 弱平稳
| 类型 | 定义 | 实际使用 |
|---|---|---|
| 严平稳 | 任意时间点的联合分布与时间平移无关 | 过于严格,实际数据几乎无法满足 |
| 弱平稳 | 均值恒定、方差有限且恒定、自协方差仅与滞后阶数有关 | 工程中默认的平稳性标准 |
常见误区:很多初学者认为“序列看起来波动不大就是平稳的”。实际上,平稳性要求的是统计性质不随时间变化,而非数值本身不变化。一个有明显上升趋势的序列,即使波动很小,也是非平稳的。
2.2.2 非平稳的常见类型与处理方法
- 趋势非平稳:均值随时间单调变化 → 差分或去趋势
- 季节非平稳:均值随季节周期变化 → 季节差分或季节虚拟变量
- 方差非平稳:波动幅度随时间变化 → 对数变换或 Box-Cox 变换
- 结构突变:均值或方差在某个时间点发生跳跃 → 分段建模或加入突变虚拟变量
2.2.3 平稳性检验方法
| 检验方法 | 原假设 H₀ | 适用场景 | 注意事项 |
|---|---|---|---|
| ADF 检验 | 序列存在单位根(非平稳) | 最常用,适用于 ARIMA 建模 | 需指定滞后阶数,对结构突变不敏感 |
| KPSS 检验 | 序列是平稳的 | 与 ADF 互补使用 | 对趋势平稳敏感 |
| PP 检验 | 序列存在单位根 | 对异方差更稳健 | 小样本下表现不如 ADF |
工程建议:同时使用 ADF 和 KPSS 进行交叉验证。若 ADF 拒绝非平稳且 KPSS 接受平稳,则序列平稳;若两者结论矛盾,需进一步检查是否存在结构突变或强季节性。
2.3 白噪声:模型诊断的基准线
白噪声(White Noise)是最简单的时间序列过程,也是模型诊断的基准线。如果一个模型能有效提取数据中的所有结构信息,那么残差应该表现为白噪声。
2.3.1 白噪声的定义与性质
一个序列 \(\{ \varepsilon_t \}\) 被称为白噪声,当且仅当满足以下三个条件:
- 零均值: \( E(\varepsilon_t) = 0 \)
- 恒定方差: \( Var(\varepsilon_t) = \sigma^2 \)
- 无自相关: \( Cov(\varepsilon_t, \varepsilon_{t-k}) = 0, \forall k \neq 0 \)
白噪声在深度学习中的角色:在时间序列预测任务中,如果模型的残差不是白噪声(即残差中仍存在自相关或异方差),说明模型没有完全捕捉到数据中的时间依赖结构。此时需要增加模型容量、调整序列长度或引入更复杂的注意力机制。
2.3.2 白噪声检验方法
| 检验方法 | 原假设 H₀ | 统计量 | 适用场景 |
|---|---|---|---|
| Ljung-Box 检验 | 序列为白噪声 | Q 统计量 | 最常用,适用于残差诊断 |
| Box-Pierce 检验 | 序列为白噪声 | Q* 统计量 | 大样本下与 Ljung-Box 等价 |
| 自相关图(ACF) | 目视判断 | — | 快速初步判断 |
2.3.3 白噪声与模型诊断的工程流程
# Python 示例:白噪声检验(Ljung-Box)
import numpy as np
from statsmodels.stats.diagnostic import acorr_ljungbox
# 生成白噪声
np.random.seed(42)
white_noise = np.random.normal(0, 1, 500)
# Ljung-Box 检验
result = acorr_ljungbox(white_noise, lags=[10, 20, 30], return_df=True)
print(result)
# 期望:p-value > 0.05,无法拒绝 H₀,即序列为白噪声
# 生成非白噪声(AR(1) 过程)
ar1 = [0]
for i in range(1, 500):
ar1.append(0.7 * ar1[-1] + np.random.normal(0, 1))
result_ar = acorr_ljungbox(ar1, lags=[10, 20, 30], return_df=True)
print(result_ar)
# 期望:p-value < 0.05,拒绝 H₀,即序列非白噪声
工程经验:在深度学习时间序列项目中,建议在每个 epoch 结束后对验证集残差进行白噪声检验。如果残差在训练过程中逐渐趋近白噪声,说明模型正在有效学习时间依赖结构;如果残差始终非白噪声,则需要检查序列长度、特征工程或模型架构。
2.4 本章知识结构总结
| 核心概念 | 关键要点 | 工程意义 |
|---|---|---|
| 时间序列成分 | 趋势、季节、周期、残差 | 分解后分别建模,提升预测精度 |
| 平稳性 | 弱平稳三条件:均值、方差、自协方差恒定 | 非平稳序列需差分/变换后再建模 |
| 白噪声 | 零均值、恒定方差、无自相关 | 模型残差诊断的黄金标准 |
| 成分组合模型 | 加法模型 vs 乘法模型 | 对数变换可化乘为加,适配深度学习 |