2. 时间序列基础

在进入平稳性检验与协整建模之前,必须先建立一套关于“时间序列是什么”的数学语言。量化建模中大量错误并非来自模型本身,而是来自对随机过程、自相关结构与随机游走性质的混淆。本章将把这些核心概念用统一的符号体系串起来,为后续ADF检验、协整回归与均值回归策略打下基础。

一、核心原理:从随机过程到可观测序列

一个随机过程是一族定义在概率空间上的随机变量 {Xt},其中 t 属于某个指标集(通常为整数或实数)。当我们说“某只股票的日收益率是一个随机过程”,意思是每个交易日 t 对应的收益率 Xt 是一个随机变量,而实际观测到的那一条价格曲线,只是该随机过程的一次实现(realization)或样本路径。

描述随机过程最重要的两个矩是均值函数与自协方差函数:

μ_t = E[X_t]
γ(t, s) = Cov(X_t, X_s) = E[(X_t - μ_t)(X_s - μ_s)]

若对任意 t 都有 μt = μ 且 γ(t, s) 只依赖于滞后 k = |t − s|,则称该过程为弱平稳(协方差平稳)。弱平稳是绝大多数经典时间序列模型(ARMA、GARCH均值部分)的建模前提。严格平稳要求任意有限维联合分布随时间平移不变,条件更强,但在量化实务中通常只关心弱平稳。

二、自相关与偏自相关:识别序列记忆结构

自相关函数(ACF)度量 Xt 与 Xt−k 之间的线性相关程度:

ρ_k = γ_k / γ_0,  其中 γ_k = Cov(X_t, X_{t-k})

ACF 的直观含义是:当前值与 k 期之前值的“总相关”,其中包含了中间所有滞后项的间接影响。例如 AR(1) 过程 Xt = φXt−1 + εt 的 ACF 为 ρk = φk,呈指数衰减。

偏自相关函数(PACF)则剔除了中间滞后项的影响,度量在给定 Xt−1, …, Xt−k+1 的条件下,Xt 与 Xt−k 的净相关。数学上,PACF 的第 k 阶系数等于将 Xt 对 Xt−1…Xt−k 做线性回归时 Xt−k 的系数。

识别口诀:AR(p) 的 ACF 拖尾、PACF 在 p 阶截尾;MA(q) 的 ACF 在 q 阶截尾、PACF 拖尾;ARMA(p,q) 两者均拖尾。这是Box-Jenkins建模定阶的起点。

三、白噪声与随机游走:两个极端基准

白噪声是最“无记忆”的平稳过程。若 {εt} 满足 E[εt] = 0,Var(εt) = σ²,且对所有 k ≠ 0 有 Cov(εt, εt−k) = 0,则称为白噪声。若进一步要求独立同分布,则称为 i.i.d. 白噪声。白噪声的 ACF 在 0 处为 1,其余全为 0,是检验模型残差是否被充分提取的标准。

随机游走是白噪声的累积和:

X_t = X_{t-1} + ε_t,  ε_t ~ WN(0, σ²)
=> X_t = X_0 + Σ_{i=1}^{t} ε_i
Var(X_t) = tσ²

随机游走的方差随时间线性增长,因此它不是平稳过程。它的 ACF 在高滞后处衰减极慢,样本ACF常呈近似线性下降。更关键的是,随机游走对冲击具有永久性记忆:一次冲击会永久改变序列水平,不会回归到原有均值。这正是“单位根”的直观含义,也是价格序列通常需要差分才能建模的原因。

白噪声(平稳,围绕0波动) vs 随机游走(非平稳,水平漂移) ε_t X_t t →

四、方法流程:从原始序列到结构判断

  1. 画图:先看时序图,判断是否存在趋势、季节性与方差不齐。
  2. 计算ACF/PACF:观察衰减速度与截尾位置,初步判断AR/MA结构。
  3. 平稳性检验:用ADF、KPSS等检验判断是否存在单位根。
  4. 差分或去趋势:若非平稳,先做一阶差分或对数差分。
  5. 残差白噪声检验:用Ljung-Box检验确认模型是否充分。
import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.stattools import acf, pacf, adfuller

np.random.seed(7)
eps = np.random.normal(0, 1, 500)
rw = np.cumsum(eps)              # 随机游走
diff = np.diff(rw)               # 一阶差分后近似白噪声

print("ADF p-value (raw):", adfuller(rw)[1])     # 通常 > 0.05
print("ADF p-value (diff):", adfuller(diff)[1])  # 通常 < 0.05
print("ACF  lag1-5:", np.round(acf(diff, nlags=5), 3))
print("PACF lag1-5:", np.round(pacf(diff, nlags=5), 3))

五、案例与场景:价差序列的均值回归判断

假设我们研究两只股票的价差 St = PAt − βPBt。若 St 是随机游走,则价差没有稳定均值,做多做空只会承担方向性风险;若 St 是平稳的均值回归过程(如OU过程),则偏离均值后有较大概率回归,才具备统计套利基础。判断流程如下:

步骤操作判断标准
1绘制价差时序图是否围绕水平线波动
2ADF检验p < 0.05 拒绝单位根
3计算半衰期由AR(1)系数θ得 ln(0.5)/ln(θ)
4残差白噪声检验Ljung-Box p > 0.05
半衰期是均值回归策略的核心参数:它决定了持仓周期与止损容忍度。半衰期过长(如超过60个交易日),交易成本会吞噬大部分回归收益。

六、常见误区与复盘

  • 误区一:把高ACF当作可预测性。随机游走的样本ACF也常显著非零,但那是非平稳造成的伪相关,不能直接用于预测。
  • 误区二:对价格直接做回归。两个独立随机游走做回归极易得到高R²和显著t值,这是伪回归,必须先用协整框架处理。
  • 误区三:忽略白噪声检验。模型残差若仍存在自相关,说明结构未提取干净,参数估计与置信区间都不可靠。
  • 误区四:差分过度。对已平稳序列再做差分会引入MA单位根,降低可预测性。
复盘要点:任何均值回归策略上线前,必须同时通过“平稳性检验 + 半衰期合理性 + 残差白噪声”三道关卡。缺少任何一道,都可能把随机游走误判为可套利机会。