平稳性 (Stationarity) 是时间序列分析的核心假设。若序列的统计性质(均值、方差、自协方差)不随时间平移而改变,则称其为弱平稳(宽平稳)。
ADF检验 是单位根检验的常用方法,原假设 H₀:序列存在单位根(非平稳)。备择假设 H₁:序列平稳。
| 统计量 / 指标 | 说明 | 判断准则 |
|---|---|---|
| ADF Statistic | 检验回归系数 | 越负越拒绝H₀ |
| p-value | 显著性概率 | p < 0.05 拒绝H₀ → 平稳 |
| Critical Values (1%, 5%, 10%) | 临界值 | ADF < 临界值 → 平稳 |
# Python 示例 (statsmodels)
from statsmodels.tsa.stattools import adfuller
result = adfuller(series, autolag='AIC')
print(f'ADF统计量: {result[0]:.4f}')
print(f'p-value: {result[1]:.6f}')
if result[1] < 0.05:
print("✅ 拒绝H₀,序列平稳")
else:
print("❌ 无法拒绝H₀,序列非平稳")
KPSS检验 原假设与ADF相反:H₀:序列平稳(趋势平稳)。备择假设:存在单位根(非平稳)。常与ADF互为补充。
| 统计量 | 原假设 | 判断 (显著性0.05) |
|---|---|---|
| KPSS Statistic | 序列平稳 | 统计量 > 临界值 → 拒绝H₀ (非平稳) |
| p-value | 平稳 | p < 0.05 → 非平稳 |
# Python 示例
from statsmodels.tsa.stattools import kpss
stat, p, lags, crit = kpss(series, regression='c')
print(f'KPSS统计量: {stat:.4f}, p-value: {p:.4f}')
if p < 0.05:
print("❌ 拒绝H₀,序列非平稳 (存在单位根)")
else:
print("✅ 无法拒绝H₀,序列可能平稳")
差分 是消除趋势和季节性的常用手段,使非平稳序列变为平稳。一阶差分:∇Yt = Yt - Yt-1。高阶差分或季节差分可处理复杂模式。
diff1 = series.diff()
diff2 = series.diff().diff()
series.diff(12) (月度)
# 差分操作示例 (Pandas) import pandas as pd # 一阶差分 df['diff_1'] = df['value'] - df['value'].shift(1) # 或直接使用 .diff() df['diff_1'] = df['value'].diff() # 检验差分后平稳性 from statsmodels.tsa.stattools import adfuller print(adfuller(df['diff_1'].dropna()))
| 方法 | 原假设 | 适用场景 | 输出 |
|---|---|---|---|
| ADF | 非平稳 (单位根) | 检测差分平稳 | 统计量 + p值 |
| KPSS | 平稳 (趋势平稳) | 确定性趋势检验 | 统计量 + p值 |
| 差分 | — | 消除趋势/季节 | 新序列 (差分阶数d) |