ARIMA模型需先检验平稳性,非平稳序列须差分(通常d=1)或对数变换;参数p、q据ACF/PACF截尾确定,d非调参项;用get_forecast获置信区间;预测步长勿超训练长度1/5;注意异常值清洗、时序划分及差分基线保存。

ARIMA模型拟合前必须做平稳性检验
ARIMA不是万能的,它要求输入序列是平稳的,否则预测结果会严重偏移。直接用原始销售数据或股价跑 ARIMA,大概率得到 ConvergenceWarning 或荒谬的预测值。
- 先用
adfuller检验:如果p-value > 0.05,说明非平稳,得差分 - 差分阶数
d不要盲目设为2——多数业务数据一次差分(d=1)就够,过度差分会放大噪声 - 对数变换(
np.log1p)比单纯差分更温和,适合带指数增长趋势的数据 - 注意:季节性强的数据(如月度订单),
ARIMA本身不处理季节项,得换SARIMAX,否则残差里全是周期性模式
如何选对 p、d、q 参数
别靠网格搜索暴力穷举——耗时且容易过拟合。实际项目中,用 ACF/PACF 图定初值更稳。
-
p看 PACF 截尾位置(拖尾变显著变不显著的那个 lag) -
q看 ACF 截尾位置(同上) -
d就是刚才平稳性检验决定的差分次数,不是调参项 - 用
auto_arima(pmdarima库)时,务必设seasonal=False显式关闭季节检测,否则它可能偷偷切到 SARIMA,而你根本没意识到 - 训练集至少保留 100 个点,少于 50 个点的序列,
ARIMA的参数估计基本不可信
ARIMA.fit() 后怎么拿到未来预测值
别只盯着 model.forecast(steps=7)——它返回的是点估计,没区间,也没考虑历史残差的不确定性。
- 用
model.get_forecast(steps=7),再调.predicted_mean和.conf_int(),才能拿到带 95% 置信区间的预测 - 预测步长别超过训练长度的 1/5,比如训练了 100 天,预测 30 天就明显失真了
- 如果需要滚动预测(predict t+1, then t+2…),必须手动用
append()更新模型,不能反复fit()——后者每次重训成本高,且破坏参数连续性 - 注意索引对齐:
forecast()返回的pd.Series默认用整数索引,得用index=your_date_range显式指定时间轴,否则画图错位
预测结果不准?先查这三处硬伤
很多“模型不准”其实和算法无关,是数据或工程细节埋的雷。
立即学习“Python免费学习笔记(深入)”;
- 原始数据有未清洗的异常值(比如某天销量突然 10 倍暴增),
ARIMA对 outlier 极敏感,预测会持续高估——用rolling median或isolation_forest先筛一遍 - 训练/测试集划分没按时间顺序切,而是随机 shuffle,导致信息泄露,指标虚高
- 部署时忘记保存训练时用的差分基线(比如用第 0 天值做一阶差分),上线后直接拿原始值喂模型,结果全乱
ARIMA 的边界很清晰:它只对线性、低噪声、中短期趋势有效。一旦业务数据里混着促销、竞品动作、政策突变这些结构性断点,模型再调参也盖不住——这时候该上 Prophet 或加外部变量的 SARIMAX,而不是硬刚 p 和 q。


















