You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

训练ARIMA模型时遇ValueError:ADF平稳性测试异常求助

问题分析与解决方案

错误根源

错误提示显示,执行ADF平稳性检验时,自动差分后的样本量仅剩7个,不足以支撑OLS回归计算,进而触发奇异矩阵错误。你的训练数据有24个月,理论上足够,但pm.auto_arima中d=None的设置让算法尝试了过高的差分阶数,导致样本量被过度压缩。

具体解决步骤

1. 手动指定差分阶数d

既然你后续手动设置了d=1,直接在auto_arima中固定d=1,避免算法自动尝试更高阶差分:

auto_model = pm.auto_arima(
            train_data.Qty,
            start_p=1,
            start_q=1,
            test='adf',
            max_p=3,
            max_q=3,
            m=1,
            d=1,  # 从None改为固定值1
            seasonal=False,
            start_P=0,
            D=0,
            trace=True,
            error_action="ignore",
            suppress_warnings=True,
            stepwise=True,
            return_valid_fits=False,
        )

2. 优化冗余代码逻辑

你已经用auto_arima自动选择最优模型,无需再手动指定(p,d,q)并重新拟合SARIMAX,直接使用auto_model的结果即可完成预测:

# 直接用auto_arima训练好的模型预测未来6个月
auto_predict = auto_model.predict(n_periods=CS.PREDEICT_MONTHS)

# 可查看auto_arima选中的最优阶数
print("最优ARIMA阶数:", auto_model.order)

3. 备选方案:更换平稳性检验方法

如果仍想让算法自动选择d,可以换用KPSS检验替代ADF,降低过度差分的概率:

auto_model = pm.auto_arima(
            train_data.Qty,
            start_p=1,
            start_q=1,
            test='kpss',  # 替换为kpss平稳性检验
            max_p=3,
            max_q=3,
            m=1,
            d=None,
            seasonal=False,
            start_P=0,
            D=0,
            trace=True,
            error_action="ignore",
            suppress_warnings=True,
            stepwise=True,
            return_valid_fits=False,
        )

额外注意事项

  • 24个月的月度数据样本量不算大,你设置的max_p=3/max_q=3是合理范围,避免再调高阶数。
  • 若坚持手动用SARIMAX拟合,enforce_stationarity=False和enforce_invertibility=False的设置需匹配你的数据特性,但auto_arima已自动处理这类约束,无需重复操作。

内容的提问来源于stack exchange,提问作者ddd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:10:31