1. 平稳性概念:为什么金融数据需要平稳化?

做量化交易这些年,我见过太多人一上来就把原始价格序列丢进模型里。结果呢?回测曲线漂亮得像假的一样,实盘一跑就崩。问题出在哪?说白了,就是没搞懂平稳性。

今天咱们就把这个最基础、也最要命的概念掰开揉碎讲清楚。

1.1 什么是平稳性?一个直观的理解

平稳性,用大白话说就是:数据的统计性质不随时间改变

你想想看,如果一组时间序列的均值、方差、自相关结构都稳定,那它就是平稳的。反过来,如果均值忽高忽低、方差忽大忽小,那就是非平稳。

举个简单的例子:

  • 白噪声:完全平稳,均值恒为0,方差恒定
  • 随机游走:典型的非平稳,均值会漂移,方差随时间发散

我刚开始做量化时,一直以为股票价格是平稳的。后来发现,价格序列的均值根本不稳定——今天3000点,明天可能就3500了。嗯,这里要注意:价格序列几乎都是非平稳的

核心要点:平稳性不是"数据不动",而是"数据的统计规律稳定"。

1.2 为什么金融数据需要平稳化?

这个问题我问过不少新人,答案五花八门。其实原因就三个:

  1. 模型假设要求:ARIMA、GARCH等经典模型,都假设数据是平稳的。你用非平稳数据去拟合,结果就是伪回归。
  2. 避免虚假关系:两个完全不相关的非平稳序列,也可能算出很高的相关系数。我在项目中遇到过,把沪深300和纽约咖啡价格做回归,R²居然0.8以上——纯属巧合。
  3. 预测才有意义:非平稳序列的均值在变,你预测的"未来均值"根本站不住脚。
避坑指南:我曾经在回测中直接用价格序列做协整检验,结果发现两组数据"高度协整"。后来才发现,是因为两者都有时间趋势,根本不是真正的协整关系。从那以后,我养成了先做平稳性检验的习惯。

1.3 平稳性的两种类型

严格来说,平稳性分两种。但实际工作中,我们主要关注第二种。

类型 定义 实际应用
严平稳 所有统计性质(任意阶矩)都不随时间改变 几乎无法验证,理论意义大于实践
弱平稳 均值恒定、方差恒定、自协方差只与时间间隔有关 金融建模中最常用,够用了

我个人习惯,做量化时只验证弱平稳性。严平稳太苛刻,金融数据基本达不到。

1.4 如何判断数据是否平稳?

判断方法分两类:肉眼观察和统计检验。

肉眼观察法:

  • 看时序图:有没有明显的趋势或季节性?
  • 看滚动统计:滚动均值和滚动方差是否稳定?

统计检验法:

  • ADF检验(最常用):原假设是"存在单位根"(即非平稳)
  • KPSS检验:原假设是"数据平稳"
  • PP检验:对异方差更稳健

我建议两个检验搭配使用。ADF显著拒绝原假设 + KPSS不能拒绝原假设,那基本可以放心了。

小技巧:如果ADF和KPSS结果矛盾,先检查数据有没有结构性突变。我遇到过因为2015年股灾导致检验失效的情况。

1.5 知识体系框架

下面这张图,帮你把本章的核心逻辑串起来:

平稳性概念知识体系 平稳性定义 统计性质不随时间改变 严平稳 所有统计性质不变 弱平稳 均值/方差/自协方差稳定 为什么需要平稳化? 模型假设 · 避免伪回归 · 预测可靠 肉眼观察 时序图 · 滚动统计 统计检验 ADF · KPSS · PP 组合判断 ADF+KPSS搭配 结论:平稳化是金融建模的第一步

1.6 一个简单的代码示例

光说不练假把式。咱们用Python快速验证一下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller

# 生成非平稳数据(随机游走)
np.random.seed(42)
n = 500
random_walk = np.cumsum(np.random.randn(n))

# 生成平稳数据(白噪声)
white_noise = np.random.randn(n)

# ADF检验
def check_stationarity(series, name):
    result = adfuller(series)
    print(f"{name} 的ADF统计量: {result[0]:.4f}")
    print(f"p值: {result[1]:.4f}")
    if result[1] < 0.05:
        print("→ 拒绝原假设,数据平稳\n")
    else:
        print("→ 不能拒绝原假设,数据非平稳\n")

check_stationarity(random_walk, "随机游走")
check_stationarity(white_noise, "白噪声")

运行结果会告诉你:随机游走的p值远大于0.05,白噪声的p值远小于0.05。这就是平稳与非平稳的典型区别。

个人经验:实际金融数据往往介于两者之间。比如收益率序列,虽然比价格序列平稳,但偶尔会有波动率聚集现象。这时候别慌,后面我们会讲怎么处理。

好了,平稳性的概念就讲到这里。记住一句话:平稳化不是目的,而是手段。我们做平稳化,是为了让模型能正常工作,而不是为了追求数学上的完美。


专注资料整理