3、平稳性检验:什么是平稳性、ADF检验原理、KPSS检验、差分操作与平稳化

各位同学,咱们今天聊一个时间序列里绕不开的话题——平稳性

说实话,我刚入行那会儿,觉得平稳性就是个数学概念,离实战很远。直到有一次,我拿一段股票数据直接建模,结果预测值一路狂飙到天上去了……嗯,后来我才明白,平稳性没搞定,后面全是白搭

那什么是平稳性?说白了,就是一个时间序列的统计性质不随时间变化。比如均值、方差、自相关系数,这些指标在时间轴上保持稳定,我们就说这个序列是平稳的。

核心要点:平稳性是时间序列建模的前提。非平稳数据直接建模,容易产生“伪回归”——看着拟合很好,实际全是假象。

3.1 平稳性的两种类型

平稳性分两种,咱们得搞清楚:

  • 严平稳:要求序列的联合分布完全不随时间变化。这个条件太强了,现实中几乎不存在。我基本没见过谁用严平稳做实战。
  • 弱平稳:只要求均值、方差恒定,自协方差只与时间间隔有关。这是实战中最常用的定义。你想想看,我们做预测,只要均值和波动性稳定,模型就能学出规律。

我个人习惯,提到“平稳性”默认就是指弱平稳。别纠结理论,够用就行。

3.2 ADF检验原理

ADF检验,全称是Augmented Dickey-Fuller检验。它是目前最常用的单位根检验方法。

原理其实不复杂:

  1. 它假设序列存在一个单位根(即非平稳)
  2. 然后通过回归模型检验这个假设是否成立
  3. 如果p值小于0.05,就拒绝原假设,认为序列是平稳的

我在项目中遇到过一个问题:ADF检验对滞后阶数很敏感。阶数选少了,检验结果不稳定;选多了,又可能过度修正。我的建议是——用AIC或BIC自动选择滞后阶数,别手动瞎猜。

实战技巧:Python的statsmodels库里的adfuller()函数,默认会自动选择滞后阶数。直接用就行,省心。

3.3 KPSS检验

ADF检验的反面是KPSS检验。它俩正好互补:

检验方法 原假设 备择假设
ADF 序列非平稳(有单位根) 序列平稳
KPSS 序列平稳 序列非平稳

为什么需要两个检验?因为单个检验可能误判。我习惯的做法是:两个检验都做,交叉验证

  • ADF的p值 < 0.05 且 KPSS的p值 > 0.05 → 序列平稳
  • ADF的p值 > 0.05 且 KPSS的p值 < 0.05 → 序列非平稳
  • 两个都显著或都不显著 → 需要进一步分析

我曾经踩过一个坑:只做了ADF检验,p值0.03,我以为序列平稳了,直接建模。结果模型残差一直有趋势……后来补了KPSS检验,才发现序列其实是非平稳的。所以,双检验更靠谱

3.4 差分操作与平稳化

如果序列非平稳,怎么办?最常用的方法就是差分

差分操作很简单:

# 一阶差分
diff_series = original_series.diff().dropna()

# 二阶差分(如果一阶还不够平稳)
diff2_series = original_series.diff().diff().dropna()

为什么差分能平稳化?因为很多非平稳序列的本质是随机游走——今天的值等于昨天的值加上一个随机扰动。差分后,就只剩下了那个随机扰动,自然就平稳了。

你想想看,股票价格通常是非平稳的,但股票收益率(价格的一阶差分)往往是平稳的。这就是差分的神奇之处。

注意:差分次数不是越多越好。过度差分会丢失信息,导致模型预测能力下降。一般差分1-2次就够了。我见过有人差分5次,结果序列变成白噪声,啥规律都学不到了。

3.5 实战流程总结

好了,咱们把整个流程串起来:

  1. 拿到时间序列数据,先画图看看趋势和季节性
  2. 做ADF检验和KPSS检验,判断是否平稳
  3. 如果不平稳,做差分操作(一般1-2次)
  4. 再次检验差分后的序列,直到平稳为止
  5. 记录差分次数,后续建模时要用(比如ARIMA的d参数)

下面是我画的一张流程图,帮你理清思路:

平稳性检验与差分流程 原始时间序列 ADF检验 + KPSS检验 是否平稳? 平稳序列 可直接建模 差分操作 d = d + 1 再次检验

这张图我画得比较简洁,但核心逻辑都在里面了。你跟着走一遍,基本不会出错。

我的个人习惯:每次做差分后,我都会把差分后的序列画个图看看。如果图形看起来“晃来晃去”没有明显趋势,基本就差不多了。然后再用检验确认一下,双重保险。

好了,平稳性检验这块就讲到这里。记住一句话:不平稳,不建模。这是时间序列预测的铁律。


专注资料整理