第1章:白噪声与随机游走——金融数据平稳化的第一道坎

说实话,我刚入行做量化的时候,最头疼的就是数据预处理。你拿到的股票价格、汇率、利率,看着挺整齐,但一跑模型就崩。为什么?因为大部分金融数据压根儿就不老实——它们是非平稳的。

这一章,咱们先搞定两个最基础的概念:白噪声随机游走。这俩是理解平稳性的钥匙。我个人习惯把白噪声当作“基准线”,把随机游走当作“反面教材”。搞懂它们,你就能明白为什么很多模型在金融数据上直接跑会翻车。

金融数据平稳化 白噪声 均值为0 · 方差恒定 · 无自相关 随机游走 Yₜ = Yₜ₋₁ + εₜ 单位根检验 ADF检验 · PP检验 核心逻辑:识别非平稳 → 差分/变换 → 平稳化

1.1 白噪声:最干净的随机性

白噪声,说白了就是“纯粹的随机”。它没有任何规律可循,没有趋势,没有周期,也没有记忆。你猜不到下一秒的值是多少,因为它的每一步都是独立、随机的。

数学上,一个白噪声序列 εₜ 满足三个条件:

  • 均值为0:长期来看,正负波动相互抵消
  • 方差恒定:波动幅度不随时间变化
  • 无自相关:今天的值和昨天的值没有任何关系

我在项目中遇到过这样的情况:有人把残差序列画出来,看着挺随机,就以为是白噪声。结果一算自相关函数,好几个滞后项都显著。嗯,这里要注意——肉眼判断不靠谱,得用统计检验

白噪声的检验方法

  • Ljung-Box检验:检验残差是否存在自相关。p值大于0.05,基本可以认为是白噪声。
  • Q统计量:类似Ljung-Box,但更适用于小样本。

你想想看,如果模型的残差不是白噪声,说明模型没把信息提取干净——还有规律没被捕捉到。这时候模型就是有问题的。

1.2 随机游走:金融数据的“默认模式”

随机游走,是白噪声的“积分版”。它的定义很简单:

Yₜ = Yₜ₋₁ + εₜ

其中 εₜ 是白噪声。也就是说,今天的值 = 昨天的值 + 一个随机扰动。

为什么说金融数据大多是随机游走?你看看股票价格——今天的收盘价,基本就是昨天的收盘价加上一个随机波动。没有明显的“回归均值”倾向,价格可以一路涨上去,也可以一路跌下来。

我记得有一次做回测,用ARIMA模型直接拟合股价,结果预测值几乎就是昨天的收盘价。我当时还纳闷,后来才意识到——随机游走的数据,最优预测就是上一个值。你费半天劲,还不如直接说“明天和今天一样”。

避坑指南

我曾经在项目里直接用原始价格数据训练回归模型,结果R²高达0.98,开心得不行。后来发现——这纯粹是伪回归。两个随机游走序列之间很容易出现虚假的相关性。记住:非平稳数据之间做回归,大概率是骗人的

1.3 单位根:随机游走的“身份证”

单位根这个概念,很多人觉得抽象。其实说白了,它就是判断一个序列是不是随机游走的数学工具。

我们看一个AR(1)模型:

Yₜ = φ · Yₜ₋₁ + εₜ

如果 φ = 1,这就是随机游走。这个 φ = 1 就是“单位根”。

为什么叫“单位根”?因为特征方程的根等于1。你不用纠结这个,记住结论就行:

φ 的值 序列性质 平稳性
|φ| < 1 均值回归,冲击衰减 平稳
φ = 1 随机游走,冲击永久 非平稳
|φ| > 1 爆炸性增长 非平稳(少见)

检验单位根最常用的方法是ADF检验(Augmented Dickey-Fuller test)。它的原假设是“存在单位根”,也就是序列非平稳。如果p值小于0.05,就拒绝原假设,认为序列平稳。

注意:ADF检验对滞后阶数敏感。选少了,自相关没消除;选多了,检验功效下降。我个人习惯用AIC或BIC自动选择滞后阶数,或者直接取 int(12 * (n/100)^(1/4)) 这个经验公式。

1.4 代码实战:模拟白噪声与随机游走

光说不练假把式。咱们用Python模拟一下,看看它们长什么样。

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

# 设置随机种子
np.random.seed(42)

# 生成白噪声
white_noise = np.random.normal(0, 1, 200)

# 生成随机游走
random_walk = np.cumsum(white_noise)

# ADF检验
print("白噪声ADF检验p值:", adfuller(white_noise)[1])
print("随机游走ADF检验p值:", adfuller(random_walk)[1])

# 绘图
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(white_noise)
plt.title("白噪声序列")
plt.subplot(1, 2, 2)
plt.plot(random_walk)
plt.title("随机游走序列")
plt.tight_layout()
plt.show()

运行结果:白噪声的ADF p值通常远小于0.05(平稳),随机游走的p值通常大于0.05(非平稳)。你试试看,每次运行结果可能略有不同,但结论一致。

核心结论

  • 白噪声是平稳的,随机游走是非平稳的
  • 随机游走 = 白噪声的累积和
  • 单位根检验是判断非平稳的“金标准”

好了,这一章的内容就到这儿。白噪声和随机游走是金融数据平稳化的基石。你理解了它们,后面讲差分、讲协整、讲ARIMA,都会轻松很多。


专注资料整理