2. 时间序列基础
在进入协整与均值回归建模之前,必须先建立对时间序列“可建模性”的判断能力。很多看似高度相关的价格序列,直接做回归会得到极高的 R² 和显著的 t 值,但残差并不平稳,结论并不可信。本章的目标是让你掌握六个基础概念,并能在 Python 中快速诊断一条序列是否适合进入后续的协整检验。
一、核心原理:平稳性是一切统计推断的地基
平稳性(stationarity)描述的是序列的统计规律不随时间漂移。严格平稳要求任意有限维联合分布随时间平移不变;实践中更常用的是弱平稳,只需满足三个条件:均值常数、方差常数、自协方差只与时间间隔有关而与绝对时间无关。若序列不平稳,样本均值、样本方差会随样本区间变化,中心极限定理不再适用,回归中的 t 检验和 F 检验都会失效。
与平稳性紧密相关的是单位根。考虑一阶自回归 AR(1):xt = ρxt-1 + εt。当 |ρ| < 1 时,冲击会衰减,序列平稳;当 ρ = 1 时,序列成为随机游走,冲击永久累积,方差随时间线性增长;当 |ρ| > 1 时序列爆炸。单位根检验的原假设通常是 ρ = 1,因此“拒绝原假设”才意味着序列平稳。
白噪声是平稳性的基准形态:均值为零、方差恒定、不同时点互不相关。它是理想残差,也是判断模型是否提取完信息的参照。随机游走则是白噪声的累积和,是典型非平稳过程。自相关函数(ACF)度量 xt 与 xt-k 的相关性,偏自相关函数(PACF)在控制中间滞后项后度量 xt 与 xt-k 的净相关。ACF 与 PACF 的衰减模式,是识别 AR、MA 结构的重要线索。
核心判断链:看时序图 → 判断均值/方差是否漂移 → 做单位根检验 → 若平稳,再看 ACF/PACF 识别结构 → 若为非平稳,考虑差分或协整路线。
二、方法流程:从可视化到检验的六步诊断
- 绘制时序图:观察趋势、季节、结构突变和方差变化。图形不能替代检验,但能避免盲目套用检验。
- 计算滚动均值与滚动标准差:若滚动统计量明显漂移,平稳性存疑。
- 运行单位根检验:常用 ADF、PP、KPSS。ADF 原假设为存在单位根;KPSS 原假设为平稳,两者结合可降低误判。
- 必要时差分:一阶差分消除随机游走趋势,二阶差分通常用于处理 I(2) 过程,但不要过度差分。
- 观察 ACF/PACF:AR(p) 的 ACF 拖尾、PACF 截尾;MA(q) 的 ACF 截尾、PACF 拖尾。
- 残差白噪声检验:用 Ljung-Box 检验残差是否仍存在自相关,确保模型充分。
下面给出一个可直接运行的最小诊断脚本,覆盖 ADF、KPSS、ACF/PACF 与 Ljung-Box:
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller, kpss, acf, pacf
from statsmodels.stats.diagnostic import acorr_ljungbox
np.random.seed(7)
n = 500
eps = np.random.normal(0, 1, n)
rw = np.cumsum(eps) # 随机游走,非平稳
wn = np.random.normal(0, 1, n) # 白噪声,平稳
def report(name, x):
adf_p = adfuller(x, autolag="AIC")[1]
kpss_p = kpss(x, regression="c", nlags="auto")[1]
lb_p = acorr_ljungbox(x, lags=[10], return_df=True)["lb_pvalue"].iloc[0]
print(f"{name}: ADF p={adf_p:.4f}, KPSS p={kpss_p:.4f}, LB(10) p={lb_p:.4f}")
report("white noise", wn)
report("random walk", rw)
report("diff(random walk)", np.diff(rw))
典型输出会显示:白噪声的 ADF 拒绝单位根、KPSS 不拒绝平稳;随机游走的 ADF 不拒绝单位根、KPSS 拒绝平稳;一阶差分后重新接近白噪声。这个对照实验是理解后续协整检验的最佳起点。
三、案例场景:两条价格序列的伪回归陷阱
假设你拿到两条独立随机游走的价格序列 P1 和 P2,它们之间没有任何经济联系。直接做 OLS 回归,R² 可能高达 0.8 以上,斜率 t 值超过 10。但残差仍是随机游走,ADF 无法拒绝单位根,这就是伪回归(spurious regression)。它提醒我们:高 R² 不等于真实关系,必须检查残差平稳性。
反过来,如果两条序列都是 I(1),但某个线性组合是 I(0),则它们存在协整关系,这才是均值回归策略的统计基础。因此本章的六个概念并非孤立知识点,而是协整检验的前置条件:先确认单整阶数,再检验残差平稳性,最后才谈交易信号。
| 概念 | 关键特征 | 常见检验/工具 | 在项目中的用途 |
|---|---|---|---|
| 白噪声 | 零均值、同方差、无自相关 | Ljung-Box、ACF | 理想残差基准 |
| 平稳序列 | 均值方差自协方差不随时间变 | ADF、KPSS | 可直接建模与推断 |
| 随机游走 | 单位根、方差随时间线性增长 | ADF 不拒绝、KPSS 拒绝 | 价格序列常见形态 |
| 单位根 | ρ=1,冲击永久 | ADF、PP、DF-GLS | 判断单整阶数 |
| ACF | 度量整体相关性 | statsmodels.acf | 识别 MA 阶数 |
| PACF | 控制中间滞后后的净相关 | statsmodels.pacf | 识别 AR 阶数 |
四、误区与复盘:不要被单一检验和图形误导
误区一:只做 ADF 就下结论。ADF 对趋势项、滞后阶数和结构突变敏感。若序列存在断点,ADF 可能无法拒绝单位根。建议同时报告 KPSS,并检查时序图。
误区二:把“不拒绝单位根”当成“确认随机游走”。不拒绝只是证据不足,样本量小、检验功效低时尤其如此。应结合经济含义和差分后表现综合判断。
误区三:过度差分。对已经平稳的序列再做差分,会引入负自相关,破坏模型结构。差分前先检验,差分后再检验。
误区四:只看 ACF/PACF 就定阶。ACF/PACF 的截尾/拖尾判断带有主观性,应结合 AIC/BIC 和残差诊断。
复盘时建议固定一套诊断模板:时序图 + 滚动统计 + ADF/KPSS + 差分后复检 + ACF/PACF + Ljung-Box。把这套模板封装成函数,后续每一章的数据都先跑一遍,能显著减少建模返工。只有确认序列的平稳性与单整阶数,协整与均值回归的结论才具备统计可信度。