4. 平稳性与统计检验
在金融时序机器学习择时中,很多人一上来就把价格、收益率、成交量直接喂给模型,结果回测曲线漂亮、实盘却迅速失效。问题往往不在模型,而在数据是否满足建模假设。平稳性、协整与因果检验,就是建模前的“体检”。本节围绕四类检验,讲清原理、流程与常见误区。
一、核心原理:为什么金融时序必须先做检验
平稳性指序列的均值、方差和自协方差不随时间漂移。价格序列通常是非平稳的,带有趋势和随机游走特征;而收益率序列往往更接近平稳。若把非平稳序列直接用于回归或树模型,容易产生伪回归:模型捕捉到的是共同趋势,而非真实预测关系。
ADF(增广迪基-福勒)检验的原假设是“存在单位根,即非平稳”。若 p 值小于显著性水平(如 0.05),则拒绝原假设,认为序列平稳。KPSS 检验则相反,原假设是“序列平稳”,若 p 值小于 0.05,则拒绝平稳。两者结合使用,可避免单一检验的误判。
协整用于多变量场景:两个非平稳序列的线性组合若平稳,则它们存在长期均衡关系。格兰杰因果检验则回答“X 的过去值是否有助于预测 Y”,注意它检验的是预测意义上的因果,不是哲学因果。
二、方法流程:从检验到建模的完整链路
建议按以下顺序执行,避免跳步导致结论失真:
- 数据准备:确定频率(日频、分钟频)、样本区间,处理缺失值与停牌。
- 可视化与描述统计:画时序图、ACF/PACF,观察趋势与季节。
- 单变量平稳性:同时跑 ADF 与 KPSS,交叉验证。
- 非平稳处理:差分、对数差分、去趋势,得到平稳序列。
- 多变量协整:Engle-Granger 两步法或 Johansen 检验。
- 格兰杰因果:确定最大滞后阶数,检验因子是否提升预测。
- 特征工程与建模:用平稳序列构造滞后、滚动统计等特征。
import pandas as pd
from statsmodels.tsa.stattools import adfuller, kpss, grangercausalitytests
from statsmodels.tsa.vector_ar.vecm import coint_johansen
# 1. ADF 检验
adf_stat, adf_p, _, _, crit, _ = adfuller(price, autolag='AIC')
print(f"ADF p-value: {adf_p:.4f}")
# 2. KPSS 检验
kpss_stat, kpss_p, _, crit = kpss(price, regression='c', nlags='auto')
print(f"KPSS p-value: {kpss_p:.4f}")
# 3. 差分后再次检验
ret = price.diff().dropna()
print(f"ADF on diff: {adfuller(ret)[1]:.4f}")
# 4. 协整检验(Johansen)
result = coint_johansen(df[['x1','x2']], det_order=0, k_ar_diff=1)
print(result.lr1, result.cvt)
# 5. 格兰杰因果
grangercausalitytests(df[['y','x']], maxlag=5)
三、案例场景:价差配对与因子筛选
假设我们研究两只银行股的配对交易。先对两只股票价格做 ADF,发现均非平稳;再对价差做 ADF,若价差平稳,说明存在协整关系,可构造均值回归信号。随后用格兰杰因果检验判断 A 的收益率是否领先 B 的收益率,若显著,则可将 A 的滞后项作为 B 的预测因子。
在因子筛选中,常见做法是对每个候选因子与未来收益做格兰杰检验,保留显著因子,再进入 LightGBM 或 LSTM。这样能显著降低无效特征带来的过拟合风险。
| 检验 | 原假设 | p 值含义 | 典型用途 |
|---|---|---|---|
| ADF | 存在单位根(非平稳) | p < 0.05 拒绝,认为平稳 | 单变量平稳性判断 |
| KPSS | 序列平稳 | p < 0.05 拒绝,认为非平稳 | 与 ADF 交叉验证 |
| 协整 | 不存在协整关系 | p < 0.05 拒绝,认为存在协整 | 配对交易、多因子均衡 |
| 格兰杰因果 | X 不是 Y 的格兰杰原因 | p < 0.05 拒绝,认为有预测力 | 因子筛选、领先滞后分析 |
四、误区与复盘:检验不是走过场
- 只看 ADF 不看 KPSS,导致“伪平稳”结论。
- 对价格直接做回归,忽略协整,得到虚假高 R²。
- 把格兰杰因果当作真实因果,用于策略解释时过度自信。
- 样本区间过短,检验功效不足,p 值不稳定。
- 差分过度,丢失长期信息,导致信号钝化。
复盘时建议记录每次检验的统计量、p 值、滞后阶数和样本区间,形成可追溯的“检验日志”。当策略失效时,先回看检验结论是否随市场结构变化而改变。平稳性、协整与因果检验不是一次性动作,而应纳入滚动窗口定期复检,才能让择时信号在实盘中保持稳健。