4. 时间序列数据特性:金融时间序列的自相关性、波动率聚集、非平稳性对模型训练的影响

金融时间序列与独立同分布(i.i.d.)的横截面数据存在本质区别。若不理解其自相关性、波动率聚集与非平稳性,直接套用标准机器学习流程会导致过拟合、伪回归与样本外失效。本节从三个核心特性出发,剖析其对训练集切分与样本构建的具体影响。

4.1 三大核心特性及其数学表征

特性 定义 典型检验方法 对模型训练的主要威胁
自相关性 当前收益率与历史收益率之间存在线性依赖 Ljung-Box Q 检验、ACF/PACF 图 信息泄漏:未来数据隐含于过去标签中
波动率聚集 大幅波动后往往跟随大幅波动,小波动后跟随小波动 ARCH-LM 检验、残差平方的 ACF 异方差导致模型置信区间失真、风险估计偏差
非平稳性 均值、方差或协方差结构随时间变化 ADF 检验、KPSS 检验、滚动统计量 伪回归:训练集与测试集分布不一致
关键认知: 金融时间序列的这三个特性不是独立存在的。自相关性在微观结构噪声中常见(如 tick 级数据负自相关),波动率聚集在中高频数据中普遍存在,非平稳性则在长周期回测中不可避免。三者叠加,使得“随机切分”成为最危险的切分方式。

4.2 自相关性:信息泄漏的隐形通道

当收益率序列存在显著自相关时,相邻样本的标签并非独立。例如,若日收益率一阶自相关系数为 0.15,则第 t 天的收益率包含了第 t-1 天的部分信息。标准 K 折交叉验证在随机打乱后,会将未来样本放入训练集、过去样本放入验证集,造成 前视偏差(Look-Ahead Bias)。

  • 影响 1: 模型在验证集上表现虚高,实际部署时失效。
  • 影响 2: 特征工程中若包含滚动统计量(如过去 20 日均线),自相关会放大特征与标签的虚假关联。
  • 应对策略: 使用 Purged Walk-Forward Cross-Validation,在训练集与测试集之间插入“清洗期”,剔除因自相关导致的泄漏样本。

4.3 波动率聚集:异方差下的风险误判

波动率聚集意味着残差方差不是常数。在低波动期训练的模型,一旦进入高波动期,其预测误差的方差会急剧膨胀,导致风险归因中的 VaR 或 ES 估计严重偏低。

# 模拟波动率聚集对残差的影响
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
T = 1000
returns = np.zeros(T)
vol = 0.01
for t in range(1, T):
    vol = 0.9 * vol + 0.1 * np.abs(returns[t-1])  # 简单波动率聚集模型
    returns[t] = np.random.normal(0, vol)

# 残差平方的 ACF 应呈现显著自相关
from statsmodels.tsa.stattools import acf
resid_sq_acf = acf(returns**2, nlags=20)
print("残差平方前 5 阶 ACF:", resid_sq_acf[:5])
实践警告: 不要对波动率聚集视而不见。在构建训练集时,应使用 波动率归一化(Volatility Scaling) 或 GARCH 滤波 对收益率进行预处理,使残差接近同方差。否则,模型会过度拟合低波动期的噪声模式。

4.4 非平稳性:分布漂移的根源

金融市场的均值、方差、协方差结构会随经济周期、政策变化、市场微观结构演变而改变。一个在 2010-2015 年训练的优秀模型,在 2020 年 COVID 危机期间可能完全失效。非平稳性直接违反了机器学习中“训练集与测试集独立同分布”的基本假设。

非平稳类型 示例 对切分的影响
均值非平稳 长期趋势(如股指年化 8% 上涨) 简单时间序列切分下,训练集均值与测试集均值差异大
方差非平稳 2008 年与 2017 年的波动率差异 风险模型在低波动期过拟合,高波动期失效
协方差非平稳 行业轮动导致因子相关性结构变化 多因子模型的风险归因出现结构性偏差

4.5 综合影响:为什么不能随机切分?

下图展示了自相关性、波动率聚集与非平稳性如何共同破坏标准 K 折交叉验证的独立性假设,并导致信息泄漏与分布漂移。

金融时间序列三大特性对模型训练的联合影响 自相关性 信息泄漏 波动率聚集 异方差 非平稳性 分布漂移 破坏 i.i.d. 假设 样本非独立 + 分布不一致 伪回归 / 过拟合 风险估计偏差 样本外失效 结论:标准 K 折交叉验证在金融时间序列上不适用,必须采用时序感知的切分策略 (如 Purged Walk-Forward、组合交叉验证、Expanding Window)

4.6 应对策略总结

最佳实践清单:
  1. 始终进行平稳性检验(ADF + KPSS 联合检验),对非平稳序列先做差分或对数收益率变换。
  2. 使用 Purged Walk-Forward 切分,在训练集与测试集之间保留清洗期(至少为最大自相关阶数)。
  3. 对波动率聚集进行建模:在特征中加入已实现波动率、GARCH 预测波动率,或对收益率做波动率归一化。
  4. 避免随机打乱:任何涉及时间序列的交叉验证都必须保持时间顺序。
  5. 使用组合交叉验证(Combinatorial Purged Cross-Validation) 在保持时序约束的同时生成多个训练/测试路径,用于超参数调优。