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 折交叉验证的独立性假设,并导致信息泄漏与分布漂移。
4.6 应对策略总结
最佳实践清单:
- 始终进行平稳性检验(ADF + KPSS 联合检验),对非平稳序列先做差分或对数收益率变换。
- 使用 Purged Walk-Forward 切分,在训练集与测试集之间保留清洗期(至少为最大自相关阶数)。
- 对波动率聚集进行建模:在特征中加入已实现波动率、GARCH 预测波动率,或对收益率做波动率归一化。
- 避免随机打乱:任何涉及时间序列的交叉验证都必须保持时间顺序。
- 使用组合交叉验证(Combinatorial Purged Cross-Validation) 在保持时序约束的同时生成多个训练/测试路径,用于超参数调优。