必须用adfuller检验判断平稳性:p值小于0.05才认为平稳,同时结合时序图与ACF图观察均值方差是否稳定、自相关是否快速衰减。

ARIMA 模型在 Python 中能用,但直接调用 statsmodels.tsa.arima.ARIMA 前必须确认数据已平稳、差分阶数 d 已合理确定——跳过这步,模型大概率拟合失败或预测发散。
怎么判断时间序列是否平稳?
平稳性是 ARIMA 的前提。不能只看折线图,得用统计检验+可视化双验证:
-
adfuller检验:p 值 autolag="AIC" 和regression="ct" - 画一阶差分后的时序图 + ACF 图:如果 ACF 在 lag=1 后快速衰减到置信区间内,且均值/方差肉眼无明显趋势或周期突变,才初步可信
- 警惕“伪平稳”:某些带强季节性的序列(如月度销售)一阶差分后 ACF 仍拖尾,需考虑
SARIMA而非 ARIMA
如何选对 p、d、q 参数?
别迷信自动搜索(如 auto_arima),它容易过拟合小样本,且对异常值敏感。手动定阶更可控:
-
d:由 ADF 检验决定,通常取 0 或 1;若二阶差分后 ACF 仍不截尾,说明可能含单位根以外的问题(如结构突变),ARIMA 不适用 -
p:看差分后序列的 PACF 图,首个显著非零滞后位置即为p初值;若 PACF 拖尾,可能是p过小或存在外生变量干扰 -
q:看差分后序列的 ACF 图,首个显著非零滞后位置即为q初值;若 ACF 截尾过早(如 lag=1 就进区间),q=0可能更稳 - 参数组合不宜超过 (3,1,3),否则 AIC/BIC 容易失真,且预测区间会异常宽
训练和预测时哪些操作会 silently 失败?
常见静默陷阱比报错更危险:
立即学习“Python免费学习笔记(深入)”;
- 用
model.fit()后没检查results.mle_retvals['converged']—— 即使返回结果,也可能只是梯度下降卡在局部极小,此时results.summary()里系数标准误会极大或为 nan - 预测时传入
steps=10却没设typ="levels"(默认是 "linear"),导致输出的是差分后的预测值,直接绘图会严重偏移 - 滚动预测(rolling forecast)时复用同一个
fittedvalues,而没用model.append()或重训,误差会随步长指数累积 - 输入日期索引若含缺失或重复时间戳,
ARIMA不报错但内部对齐逻辑混乱,预测值顺序可能错位
ARIMA 真正难的不是调包,而是差分阶数判断是否掩盖了结构性变化,以及残差是否真的白噪声——这两点一旦出问题,后续所有预测都失去意义。


















