训练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
相关产品推荐
相关产品推荐

