2、时间序列预测基础回顾:平稳性、自相关、偏自相关、趋势与季节性分解
在构建集成模型之前,必须牢固掌握时间序列的核心诊断工具。本章将系统回顾平稳性、自相关函数(ACF)、偏自相关函数(PACF)以及经典分解方法,这些是判断数据特性、选择基模型和设计多样性策略的理论基石。
2.1 平稳性:建模的前提条件
平稳性是大多数统计预测模型(如 ARIMA)的基本假设。一个严格平稳的时间序列,其统计性质(均值、方差、自协方差)不随时间平移而变化。
| 类型 | 定义 | 对预测的影响 |
|---|---|---|
| 严平稳 | 联合分布对时间平移不变 | 理论要求高,实际难以验证 |
| 弱平稳(宽平稳) | 均值恒定、方差有限、自协方差仅与滞后阶数有关 | ARIMA 等模型的基本假设 |
| 非平稳 | 均值/方差随时间变化,或存在趋势/季节性 | 需差分或变换后才能建模 |
实战要点:在集成学习中,混合平稳基模型(如 ARIMA)与非平稳友好模型(如 XGBoost、LSTM)可以天然增加预测多样性。但必须确保所有输入特征在时间维度上对齐。
2.2 自相关与偏自相关:识别依赖结构
自相关函数(ACF)衡量序列与其自身滞后版本之间的线性相关性。偏自相关函数(PACF)则是在剔除中间滞后项影响后,衡量两个滞后项之间的净相关关系。两者共同决定了 ARIMA 模型的阶数(p, q)。
核心判别规则:
- AR(p) 过程:PACF 在滞后 p 后截尾,ACF 拖尾(指数衰减或正弦振荡)。
- MA(q) 过程:ACF 在滞后 q 后截尾,PACF 拖尾。
- ARMA(p,q) 过程:ACF 和 PACF 均拖尾。
2.3 趋势与季节性分解:STL 与经典分解
将时间序列分解为趋势(Trend)、季节性(Seasonal)和残差(Residual)三个分量,是理解数据内在结构和增强模型多样性的关键预处理步骤。常用的方法包括经典加法/乘法分解和 STL(Seasonal-Trend decomposition using LOESS)。
2.3.1 加法模型 vs 乘法模型
| 模型 | 公式 | 适用场景 | 示例 |
|---|---|---|---|
| 加法 | Y = T + S + R | 季节性波动幅度不随趋势变化 | 月平均气温 |
| 乘法 | Y = T × S × R | 季节性波动幅度与趋势水平成正比 | 电商月销售额 |
2.3.2 STL 分解的优势
- 鲁棒性:使用 LOESS 平滑,对异常值不敏感。
- 灵活性:可以处理任意季节性周期(如周、月、年),且允许季节性随时间缓慢变化。
- 可加性:即使原始序列是乘法关系,也可通过对数变换后使用 STL。
2.4 实战中的分解应用
在集成预测中,分解后的分量可以分别建模,也可以作为特征输入到复杂模型中。以下是一个使用 Python statsmodels 进行 STL 分解的示例:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import STL
# 生成示例数据:趋势 + 季节 + 噪声
np.random.seed(42)
t = np.arange(0, 365)
trend = 0.05 * t + 10
seasonal = 5 * np.sin(2 * np.pi * t / 30)
noise = np.random.normal(0, 1, len(t))
y = trend + seasonal + noise
# STL 分解
stl = STL(y, period=30, robust=True)
result = stl.fit()
# 提取分量
trend_comp = result.trend
seasonal_comp = result.seasonal
residual_comp = result.resid
print(f"趋势分量范围: {trend_comp.min():.2f} ~ {trend_comp.max():.2f}")
print(f"季节分量范围: {seasonal_comp.min():.2f} ~ {seasonal_comp.max():.2f}")
print(f"残差标准差: {residual_comp.std():.2f}")
常见陷阱:
- 分解前务必确认周期长度(如日数据周期为7,月数据周期为12)。
- STL 的
robust=True参数在数据存在异常点时至关重要,可防止趋势被拉偏。 - 残差分量若呈现明显模式(如自相关),说明分解不充分或周期选择错误。
2.5 平稳性检验:ADF 与 KPSS
在建模前,必须通过统计检验确认序列是否平稳。最常用的两种检验互为补充:
| 检验方法 | 原假设 H₀ | 备择假设 H₁ | 使用建议 |
|---|---|---|---|
| ADF 检验 | 序列存在单位根(非平稳) | 序列平稳 | p < 0.05 拒绝 H₀,认为平稳 |
| KPSS 检验 | 序列平稳 | 序列存在单位根(非平稳) | p < 0.05 拒绝 H₀,认为非平稳 |
最佳实践:同时使用 ADF 和 KPSS 进行“双重检验”。若 ADF 拒绝 H₀ 且 KPSS 不拒绝 H₀,则序列平稳;若两者均拒绝 H₀,则可能是趋势平稳(需去趋势);若两者均不拒绝,则序列非平稳(需差分)。