时间序列模型从统计到深度学习的迁移适配工程案例 - 第2节

2.1 时间序列的定义与核心成分

时间序列(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 等模型的收敛稳定性。
时间序列成分分解示意图 原始序列 Y_t 趋势 T_t 季节 S_t 周期 C_t 残差 R_t 加法模型 Y = T + S + C + R 乘法模型 Y = T × S × C × R ▶ 趋势:长期方向 ▶ 季节:固定周期 ▶ 周期:可变周期 ▶ 残差:随机波动

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 接受平稳,则序列平稳;若两者结论矛盾,需进一步检查是否存在结构突变或强季节性。
平稳序列 vs 非平稳序列对比 ✅ 平稳序列 • 均值恒定(围绕固定水平波动) • 方差恒定(波动幅度一致) • 自相关结构稳定 • 示例:白噪声、AR(1) 平稳过程 ❌ 非平稳序列 • 均值随时间变化(趋势) • 方差随时间变化(异方差) • 自相关结构随时间改变 • 示例:随机游走、带趋势的序列 非平稳 → 平稳的常用转换 差分 → 对数变换 → 季节差分 → 去趋势 平稳性是 ARIMA、GARCH 等经典模型的前提,也是深度学习模型稳定训练的基础

2.3 白噪声:模型诊断的基准线

白噪声(White Noise)是最简单的时间序列过程,也是模型诊断的基准线。如果一个模型能有效提取数据中的所有结构信息,那么残差应该表现为白噪声。

2.3.1 白噪声的定义与性质

一个序列 \(\{ \varepsilon_t \}\) 被称为白噪声,当且仅当满足以下三个条件:

  1. 零均值: \( E(\varepsilon_t) = 0 \)
  2. 恒定方差: \( Var(\varepsilon_t) = \sigma^2 \)
  3. 无自相关: \( 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 乘法模型 对数变换可化乘为加,适配深度学习