3、平稳性检验:什么是平稳性、ADF检验原理、KPSS检验、差分操作与平稳化
各位同学,咱们今天聊一个时间序列里绕不开的话题——平稳性。
说实话,我刚入行那会儿,觉得平稳性就是个数学概念,离实战很远。直到有一次,我拿一段股票数据直接建模,结果预测值一路狂飙到天上去了……嗯,后来我才明白,平稳性没搞定,后面全是白搭。
那什么是平稳性?说白了,就是一个时间序列的统计性质不随时间变化。比如均值、方差、自相关系数,这些指标在时间轴上保持稳定,我们就说这个序列是平稳的。
核心要点:平稳性是时间序列建模的前提。非平稳数据直接建模,容易产生“伪回归”——看着拟合很好,实际全是假象。
3.1 平稳性的两种类型
平稳性分两种,咱们得搞清楚:
- 严平稳:要求序列的联合分布完全不随时间变化。这个条件太强了,现实中几乎不存在。我基本没见过谁用严平稳做实战。
- 弱平稳:只要求均值、方差恒定,自协方差只与时间间隔有关。这是实战中最常用的定义。你想想看,我们做预测,只要均值和波动性稳定,模型就能学出规律。
我个人习惯,提到“平稳性”默认就是指弱平稳。别纠结理论,够用就行。
3.2 ADF检验原理
ADF检验,全称是Augmented Dickey-Fuller检验。它是目前最常用的单位根检验方法。
原理其实不复杂:
- 它假设序列存在一个单位根(即非平稳)
- 然后通过回归模型检验这个假设是否成立
- 如果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 实战流程总结
好了,咱们把整个流程串起来:
- 拿到时间序列数据,先画图看看趋势和季节性
- 做ADF检验和KPSS检验,判断是否平稳
- 如果不平稳,做差分操作(一般1-2次)
- 再次检验差分后的序列,直到平稳为止
- 记录差分次数,后续建模时要用(比如ARIMA的d参数)
下面是我画的一张流程图,帮你理清思路:
这张图我画得比较简洁,但核心逻辑都在里面了。你跟着走一遍,基本不会出错。
我的个人习惯:每次做差分后,我都会把差分后的序列画个图看看。如果图形看起来“晃来晃去”没有明显趋势,基本就差不多了。然后再用检验确认一下,双重保险。
好了,平稳性检验这块就讲到这里。记住一句话:不平稳,不建模。这是时间序列预测的铁律。