4. 单位根检验(下):PP检验与KPSS检验,如何选择?

上一节我们聊了ADF检验,那是单位根检验的“老大哥”。但说实话,在实际项目中,光靠ADF一个指标,有时候真不够用。

我记得有一次做国债期货和利率互换的配对交易,ADF检验死活通不过,但两个序列的走势图一看就是“形影不离”。后来换了PP检验,结果就显著了。嗯,这里面的门道,今天咱们好好聊聊。

4.1 PP检验:给ADF“打补丁”

PP检验的全称是Phillips-Perron检验。它和ADF检验的核心目标一样——判断序列是否平稳。但区别在哪呢?

说白了,ADF检验是通过在回归方程里加滞后项来处理自相关。而PP检验呢?它用了另一种思路——直接用非参数方法修正统计量。

这样做的好处很明显:

  • 对异方差更稳健:金融数据经常有波动聚集现象,PP检验能更好地处理
  • 不需要指定滞后阶数:ADF要选滞后阶数,选错了结果可能天差地别。PP检验省去了这个麻烦
  • 对小样本表现更好:我做过对比测试,样本量小于50时,PP检验的可靠性往往高于ADF

核心区别一句话:ADF通过增加回归项“硬处理”自相关,PP通过修正统计量“软处理”。

4.2 PP检验的Python实现

代码其实很简单,statsmodels库直接提供了接口。我习惯这样写:

import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import pp_test

# 模拟一个随机游走序列
np.random.seed(42)
n = 200
random_walk = np.cumsum(np.random.randn(n))

# PP检验
pp_stat, pp_pvalue, pp_crit = pp_test(random_walk, regression='c')

print(f'PP统计量: {pp_stat:.4f}')
print(f'P值: {pp_pvalue:.4f}')
print(f'临界值: {pp_crit}')

# 判断
if pp_pvalue < 0.05:
    print('拒绝原假设,序列平稳')
else:
    print('不能拒绝原假设,序列非平稳')

参数说明:regression='c'表示带截距项,'ct'表示带截距和趋势,'nc'表示无截距。我一般先用'c',如果趋势明显再换'ct'。

4.3 KPSS检验:换个角度看问题

ADF和PP检验的原假设都是“序列存在单位根”。但KPSS检验反过来了——它的原假设是“序列平稳”。

为什么要这样设计?

你想想看,如果ADF和PP都告诉你“不能拒绝单位根”,但KPSS也告诉你“不能拒绝平稳”,那不就矛盾了吗?

对,这就是关键!同时使用两种检验,可以交叉验证

我在项目中遇到过这样的情况:ADF的p值是0.08,PP是0.06,都大于0.05,但KPSS的p值是0.03,小于0.05。这说明什么?说明序列大概率是平稳的,只是ADF和PP的检验功效不够强。

4.4 KPSS检验的Python实现

from statsmodels.tsa.stattools import kpss

# 继续用上面的随机游走数据
kpss_stat, kpss_pvalue, kpss_lags, kpss_crit = kpss(random_walk, regression='c')

print(f'KPSS统计量: {kpss_stat:.4f}')
print(f'P值: {kpss_pvalue:.4f}')
print(f'滞后阶数: {kpss_lags}')
print(f'临界值: {kpss_crit}')

# 判断
if kpss_pvalue < 0.05:
    print('拒绝原假设,序列非平稳')
else:
    print('不能拒绝原假设,序列平稳')

注意:KPSS的判定逻辑和ADF/PP是相反的!KPSS的p值小于0.05时,我们拒绝“平稳”的原假设,认为序列非平稳。千万别搞反了。

4.5 如何选择?我的实战经验

说了这么多,到底该用哪个?我给大家一个实用的决策流程:

我的推荐策略

  1. 先用ADF做初步判断,毕竟它最常用,大家也最熟悉
  2. 如果ADF结果不明确(p值在0.05-0.15之间),换PP检验试试
  3. 如果还拿不准,上KPSS做交叉验证
  4. 最终判断标准:ADF/PP显著 + KPSS不显著 → 平稳;ADF/PP不显著 + KPSS显著 → 非平稳

我曾经踩过一个坑:用ADF检验两只股票的价差,p值0.12,觉得不平稳就放弃了。后来复盘时发现,那段时间正好有结构性突变,PP检验的结果是显著的。如果当时用了PP,那笔交易能赚不少。

所以我的习惯是:做协整检验前,至少跑两个单位根检验。一个ADF,一个PP或者KPSS,互相印证。

4.6 三种检验的对比总结

检验方法 原假设 优势 劣势 适用场景
ADF 存在单位根 最经典,理论基础扎实 需选滞后阶数,对异方差敏感 数据质量好,样本量大的情况
PP 存在单位根 对异方差稳健,不需选滞后 小样本下可能过度拒绝 金融高频数据,波动聚集明显
KPSS 序列平稳 与ADF/PP互补,交叉验证 对趋势敏感,可能误判 作为辅助检验,确认结果

4.7 知识体系图

下面这张图总结了单位根检验的核心逻辑和选择路径:

单位根检验选择流程图 时间序列数据 ADF检验 p < 0.05 → 平稳 PP检验 p < 0.05 → 平稳 KPSS检验 p < 0.05 → 非平稳 建议:ADF + PP 组合使用,KPSS 作为交叉验证

我的小技巧:在实际做统计套利时,我一般会先跑ADF和PP,如果两者结论一致,就直接用。如果不一致,再上KPSS做仲裁。这样既高效又稳妥。

好了,单位根检验这部分就聊到这。记住,检验只是工具,最终目的是找到真正协整的配对。下一节我们进入协整检验的具体方法,到时候会用到今天讲的内容。


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