4、基差序列的平稳性检验:ADF检验原理、KPSS检验、平稳性对回归模型的意义

做基差交易的朋友,我敢说十有八九都踩过同一个坑——拿着非平稳的序列直接跑回归,结果看起来漂亮得很,实盘一跑就崩。嗯,今天咱们就把这个坑彻底填上。

平稳性检验,说白了就是判断你的基差序列是不是「靠谱」。一个不靠谱的序列,你拿它做回归,就像在流沙上盖房子,看着挺稳,风一吹就塌。

核心观点:平稳性是时间序列回归的「入场券」。没有它,一切统计推断都是空中楼阁。

4.1 什么是平稳性?

先别急着上公式。我用大白话给你讲清楚。

一个序列是平稳的,意味着它的统计性质不随时间变化。具体来说:

  • 均值恒定:不管取哪一段,平均值差不多
  • 方差恒定:波动幅度不会忽大忽小
  • 自协方差只与时间间隔有关:今天和明天的关系,跟昨天和今天的关系,模式一样

你想想看,如果基差序列的均值一直在漂移,你拿历史均值做回归预测,那不是刻舟求剑吗?

我个人习惯,拿到一个基差序列,第一件事就是画图。肉眼扫一眼,如果序列有明显的趋势或季节性波动,那大概率是非平稳的。

小技巧:我一般先用肉眼判断,再用统计检验确认。别一上来就跑检验,先看看图,心里有个底。

4.2 ADF检验:最常用的单位根检验

ADF检验,全称是Augmented Dickey-Fuller检验。名字挺唬人,原理其实不复杂。

它的核心思想是:检验序列是否存在「单位根」。存在单位根,就是非平稳;不存在,就是平稳。

为什么叫「单位根」?这涉及到特征方程。简单说,如果一个时间序列的当前值完全由过去值决定,且系数为1,那它就会像醉汉走路一样,没有回归均值的倾向。

ADF检验的回归方程长这样:

Δy_t = α + βt + γy_{t-1} + δ₁Δy_{t-1} + δ₂Δy_{t-2} + ... + ε_t

其中:

  • Δy_t 是当前变化量
  • y_{t-1} 是上一期值
  • βt 是时间趋势项
  • α 是截距项
  • 后面的δ项是滞后差分,用来消除自相关

检验的原假设 H₀:γ = 0(存在单位根,非平稳)
备择假设 H₁:γ < 0(不存在单位根,平稳)

说白了,就是看y_{t-1}的系数是不是显著为负。如果是,说明序列有回归均值的倾向;如果不是,说明它就是个随机游走。

避坑指南:我曾经犯过一个低级错误——ADF检验的滞后阶数选错了。选少了,自相关没消除,检验结果偏误;选多了,检验功效下降。后来我养成了习惯,用AIC或BIC自动选择滞后阶数,省心不少。

在Python里,实现ADF检验非常简单:

from statsmodels.tsa.stattools import adfuller

# 假设basis是你的基差序列
result = adfuller(basis, autolag='AIC')
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
print(f'临界值: {result[4]}')

# 判断逻辑
if result[1] < 0.05:
    print('拒绝原假设,序列平稳')
else:
    print('不能拒绝原假设,序列非平稳')

输出结果里,我最关注的是p值。如果p值小于0.05,通常认为序列是平稳的。但注意,这只是经验规则,具体阈值可以根据你的交易频率和品种调整。

4.3 KPSS检验:从另一个角度看问题

ADF检验有个「毛病」——它的原假设是非平稳。这意味着,如果数据不够多,它倾向于认为序列非平稳。说白了,它有点「疑罪从有」的味道。

KPSS检验正好反过来。它的原假设是序列平稳。两个检验配合使用,就像交叉验证,能给你更可靠的结论。

KPSS检验的原理是:把序列分解成确定性趋势、随机游走和平稳误差三部分。如果随机游走部分的方差为零,序列就是平稳的。

检验统计量基于LM(拉格朗日乘子)原理,计算起来比ADF复杂,但好在有现成的库函数。

from statsmodels.tsa.stattools import kpss

result = kpss(basis, regression='c')  # 'c'表示只检验常数项平稳
print(f'KPSS统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')

if result[1] > 0.05:
    print('不能拒绝原假设,序列平稳')
else:
    print('拒绝原假设,序列非平稳')

注意看,KPSS的判断逻辑跟ADF是反的。p值大于0.05才说明平稳。

我的经验:两个检验结果一致时,结论比较可靠。如果矛盾(ADF说非平稳,KPSS说平稳),我会怀疑序列可能有结构突变,或者样本量不够。这时候我会用Zivot-Andrews检验,它能处理结构断点。

4.4 平稳性对回归模型的意义

好,现在咱们聊聊最核心的问题——为什么平稳性这么重要?

我直接说结论:非平稳序列做回归,容易产生「伪回归」

什么叫伪回归?就是两个完全不相关的随机游走序列,跑回归时R²可能很高,t统计量也很显著。但这是假的,是统计上的幻觉。

举个例子。我拿上证指数和纽约的降水量做回归,如果两者都是非平稳的,跑出来的结果可能显示「降水量显著影响股市」。这合理吗?显然不合理。

为什么会这样?因为非平稳序列的方差随时间增长,导致传统的t检验、F检验失效。你看到的显著性,其实是序列自身的趋势造成的,跟变量之间的关系无关。

具体来说,平稳性对回归模型的影响体现在:

方面 平稳序列 非平稳序列
回归系数的OLS估计 一致且有效 可能不一致,甚至发散
t检验、F检验 有效 失效,容易产生伪回归
预测能力 可靠,误差有界 不可靠,误差随预测期增长
协整关系 可直接回归 需先检验协整

在基差交易中,我们通常希望基差序列是平稳的。因为平稳的基差意味着价差会回归均值,这正是我们做回归套利的理论基础。

如果基差是非平稳的,有两种处理方式:

  1. 差分处理:对序列取一阶差分,通常能变成平稳序列。但差分后,你失去的是「水平值」的信息,得到的是「变化量」的信息。
  2. 协整建模:如果两个价格序列都是非平稳的,但它们的线性组合是平稳的,那就存在协整关系。这时候可以直接用原始序列做回归,但要用协整检验来验证。

实战建议:我个人做基差交易时,会先对基差序列做ADF和KPSS双检验。如果确认平稳,直接用OLS回归。如果不平稳,我会检查是不是两个合约的到期日不同导致的趋势,如果是,就做期限结构调整;如果不是,就考虑协整模型。

4.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个决策流程图:

基差序列平稳性检验知识体系 获取基差序列 第一步:可视化判断 第二步:ADF检验 + KPSS检验 检验结果 是否一致? 一致平稳 直接OLS回归 一致非平稳 差分或协整 结果矛盾 检查结构突变 平稳 → 回归有效 | 非平稳 → 伪回归风险

这张图的核心逻辑是:先可视化,再双检验,最后根据结果选择建模方式。记住,平稳性是回归模型的「地基」,地基不稳,房子再漂亮也没用。

最后说一句:我见过太多交易员,花大量时间优化回归参数,却忽略了最基础的平稳性检验。结果实盘一跑,基差突破历史区间,模型瞬间失效。嗯,希望你不要重蹈覆辙。


公众号:蓝海资料掘金营,微信deep3321