2. 平稳性概念:严平稳与弱平稳、白噪声过程、随机游走模型

好,咱们进入第二章。这一章我打算聊聊平稳性——这个在时间序列里绕不开的核心概念。

说实话,我刚开始接触时间序列时,觉得平稳性就是个理论玩具。直到有一次,我用非平稳数据直接建模,结果预测结果惨不忍睹。嗯,从那以后,我再也不敢小看它了。

2.1 什么是平稳性?

平稳性,说白了就是:时间序列的统计性质不随时间变化

你想想看,如果一组数据的均值、方差、自相关结构都在变,你怎么用历史去预测未来?那就像用去年的流行趋势预测今年的时尚——大概率翻车。

平稳性分为两种:严平稳弱平稳。实际工作中,我们几乎只用弱平稳。为什么?因为严平稳太苛刻了。

2.2 严平稳

严平稳的定义很严格:

对于任意时间点 t₁, t₂, ..., tₙ,以及任意时间偏移 k,序列的联合分布保持不变。

换句话说,你把整段序列平移一段,它的所有统计性质——均值、方差、偏度、峰度、甚至整个分布形状——都得一模一样。

我个人习惯把严平稳看作「完美复制品」。但现实中,这种序列几乎不存在。你想想看,股票收益率、气温变化、用户访问量……哪个能保证分布完全不变?

核心要点: 严平稳是理论上的理想状态。实际建模中,我们几乎不要求严平稳。

2.3 弱平稳

弱平稳就友好多了。它只要求三个条件:

  1. 均值恒定:E(Xₜ) = μ,对所有 t 成立
  2. 方差恒定:Var(Xₜ) = σ²,对所有 t 成立
  3. 自协方差只与时间间隔有关:Cov(Xₜ, Xₜ₊ₖ) = γₖ,与 t 无关

你看,弱平稳只关心一阶矩和二阶矩。均值不变、方差不变、自相关结构稳定——这就够了。

我在项目中遇到过很多次:数据看起来不平稳,但做一阶差分后,均值稳定了,方差也收敛了,就可以用 ARIMA 建模了。这就是弱平稳的实用之处。

我的经验: 建模前先做 ADF 检验(单位根检验),p 值小于 0.05 就认为数据是弱平稳的。如果不行,差分一次再试。

2.4 白噪声过程

白噪声是平稳性里最纯粹的例子。它的定义很简单:

  • 均值为 0
  • 方差为常数 σ²
  • 不同时间点的值之间不相关(自协方差为 0)

用数学表达就是:

E(εₜ) = 0
Var(εₜ) = σ²
Cov(εₜ, εₛ) = 0, 当 t ≠ s

白噪声就像「纯随机」。没有趋势、没有周期、没有记忆。你无法用它做任何预测——因为它的未来和过去毫无关系。

我曾经犯过一个错误:模型拟合后,残差看起来像白噪声,我就以为万事大吉了。后来发现残差里还有微弱的相关性,重新调整模型后,预测精度提升了 15%。所以,残差白噪声检验是模型诊断的关键一步

注意: 白噪声 ≠ 高斯白噪声。白噪声只要求不相关,不要求独立。高斯白噪声才是独立同分布的正态随机变量。

2.5 随机游走模型

随机游走是非平稳序列的典型代表。它的形式很简单:

Xₜ = Xₜ₋₁ + εₜ

其中 εₜ 是白噪声。

你想想看,随机游走的每一步都依赖于上一步。今天的值 = 昨天的值 + 一个随机扰动。这意味着:

  • 均值不恒定:序列会随机漂移,没有固定的均值
  • 方差随时间增长:Var(Xₜ) = t · σ²,时间越长,波动越大
  • 自相关衰减极慢:即使相隔很远,相关性依然很高

我记得有一次做股价预测,直接用原始价格建模,结果模型完全失效。后来才意识到,股价走势就是典型的随机游走——非平稳的。一阶差分后,收益率序列就平稳了。

随机游走还有一个重要性质:它是最简单的单位根过程。单位根检验(ADF、PP、KPSS)的核心,就是判断序列是否包含单位根——也就是是否属于随机游走或其变体。

2.6 知识体系总览

下面这张图,我把本章的核心逻辑梳理了一下:

平稳性概念体系 平稳性 严平稳 弱平稳 弱平稳三条件 ① 均值恒定 ② 方差恒定 ③ 自协方差只与间隔有关 白噪声过程 性质 • 均值为 0 • 方差恒定 • 不相关(无记忆) 随机游走模型 Xₜ = Xₜ₋₁ + εₜ 非平稳 · 方差随时间增长 核心关系 白噪声是平稳的极端形式 随机游走是非平稳的典型代表

2.7 三者之间的关系

我习惯用一个简单的对比来理解这三者:

特性 白噪声 弱平稳序列 随机游走
均值 恒为 0 恒定 不恒定(漂移)
方差 恒定 恒定 随时间增长
自相关 无(0) 衰减快 衰减极慢
可预测性 不可预测 可预测 不可预测(随机游走假设)
差分后 仍是白噪声 可能仍平稳 变为白噪声

你看,白噪声是最「干净」的平稳序列。随机游走是最「典型」的非平稳序列。而弱平稳,就是我们日常建模的「工作区间」。

实用建议: 拿到一个时间序列,先画图看趋势,再做 ADF 检验。如果非平稳,先差分。差分后如果像白噪声,恭喜你——数据已经「驯服」了。

2.8 一个小例子

假设你有一组数据:

import numpy as np
import matplotlib.pyplot as plt

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

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

# 生成弱平稳序列(AR(1) 过程)
phi = 0.7
ar1 = [0]
for i in range(1, 100):
    ar1.append(phi * ar1[-1] + white_noise[i])

# 画图对比
plt.figure(figsize=(12, 4))
plt.subplot(1,3,1); plt.plot(white_noise); plt.title('白噪声')
plt.subplot(1,3,2); plt.plot(ar1); plt.title('弱平稳 AR(1)')
plt.subplot(1,3,3); plt.plot(random_walk); plt.title('随机游走')
plt.tight_layout()
plt.show()

运行这段代码,你会看到:白噪声上下波动但无规律;AR(1) 围绕均值波动;随机游走则越走越远,没有回头的意思。

这就是三种序列的「性格」差异。

2.9 避坑指南

最后,分享几个我踩过的坑:

  • 不要混淆「平稳」和「无趋势」:有趋势的序列肯定不平稳,但无趋势的序列也不一定平稳(比如方差随时间变化)。
  • 差分不是万能的:有些序列差分后仍然不平稳(比如存在季节性),需要季节性差分或更复杂的变换。
  • 白噪声检验要谨慎:Ljung-Box 检验的 p 值大于 0.05 才能认为残差是白噪声。但样本量小的时候,检验效力会下降。

嗯,这一章就到这里。平稳性是个基础,但基础不牢,后面建模就容易翻车。希望你能把这三个概念刻在脑子里。


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