调用ARIMA模型forecast方法提示无该属性AttributeError报错
问题原因
这个报错本质是调用方法的对象不对:
- statsmodels v0.12及以上版本重构了ARIMA接口,直接实例化得到的
ARIMA对象只存储模型配置和输入数据,根本没有挂载forecast这类预测方法,必须先跑完拟合流程,拿到训练完成的结果对象才能调用预测接口。 - 要是你是照着三四年前的旧教程敲的代码,还会碰到返回值不兼容的坑:旧版ARIMA的
forecast返回三元组,新版的返回规则早就改了。
修复方法
按新版接口的标准流程改代码就行,步骤如下:
- 实例化ARIMA模型,传入训练序列和p/d/q阶数参数
- 调用
fit()完成模型训练,拿到拟合后的结果对象 - 所有预测相关的方法,都在这个拟合结果对象上调用,别直接在初始实例化的模型对象上调
对应代码示例:
# 注意用新版导入路径,旧的statsmodels.tsa.arima_model路径已经弃用,别再用了 from statsmodels.tsa.arima.model import ARIMA # 实例化模型,order替换成你实际用的阶数 model = ARIMA(train_data, order=(p, d, q)) # 拟合模型 model_fit = model.fit() # 预测往后82步的数值 # 新版forecast直接返回预测值数组,不需要再加[0]索引 forecast = model_fit.forecast(steps=82)
如果你需要同时拿预测的标准误、置信区间,别用forecast,换get_forecast接口:
forecast_res = model_fit.get_forecast(steps=82) forecast_mean = forecast_res.predicted_mean # 预测均值 forecast_se = forecast_res.se_mean # 预测标准误 forecast_ci = forecast_res.conf_int(alpha=0.05) # 95%置信区间
额外提个容易踩的坑:旧版ARIMA的forecast(steps=82)返回(预测值, 标准误, 置信区间)三元组,所以原代码加了[0]取预测值;新版model_fit.forecast(steps=82)直接返回长度82的预测值数组,要是你留着[0],只会拿到82步里的第一个预测值,根本不是你要的完整预测结果,记得把这个索引删掉。
内容的提问来源于stack exchange,提问作者Meryem Yahşi
相关产品推荐
相关产品推荐

