时间序列ARIMA模型拟合遇阻:参数错误与绘图异常求助
问题解决思路
1. 「unexpected parameter」报错处理
教程里的disp=-1参数是旧版statsmodels的用法,新版本已移除该参数。若需关闭拟合过程的日志输出,直接使用:
results_AR = model.fit()
若要精细控制输出,可改用verbose=False参数:
results_AR = model.fit(verbose=False)
2. 模型选择与绘图不符问题
你原本计划用AR模型(order=(2,1,0)),但实际代码写的是order=(0,1,2)——这是MA模型的参数,完全不符合需求,这是绘图偏差的核心原因。
另外,你已手动对Data_logScaled做一阶差分得到datasetLogDiffShifting,却又在ARIMA模型里设置了d=1(order的第二个值),相当于做了两次差分,导致拟合结果偏离预期。
修正方案二选一:
方案A:用模型自动处理差分(推荐)
保留原始对数变换数据,让ARIMA模型自动完成一阶差分,直接使用AR模型参数:
# 正确的AR模型参数 order=(p,d,q)=(2,1,0) model = ARIMA(Data_logScaled, order=(2,1,0)) results_AR = model.fit() # 生成差分序列并去掉空值,和模型拟合值对齐 datasetLogDiff = Data_logScaled - Data_logScaled.shift() datasetLogDiff = datasetLogDiff.dropna() # 提取模型拟合值并去掉空值 fitted_vals = results_AR.fittedvalues.dropna() plt.plot(datasetLogDiff) plt.plot(fitted_vals, color='red') plt.title('RSS: %.4f'%sum((fitted_vals - datasetLogDiff['#Passengers'])**2)) print('Plotting AR model')
方案B:手动差分后用ARIMA(2,0,0)
若已手动做差分,需把模型的差分次数设为0:
# 手动差分后的数据先去掉空值 datasetLogDiffShifting = datasetLogDiffShifting.dropna() # 使用AR模型参数 order=(2,0,0) model = ARIMA(datasetLogDiffShifting, order=(2,0,0)) results_AR = model.fit() plt.plot(datasetLogDiffShifting) plt.plot(results_AR.fittedvalues, color='red') plt.title('RSS: %.4f'%sum((results_AR.fittedvalues - datasetLogDiffShifting['#Passengers'])**2)) print('Plotting AR model')
关键要点总结
- ARIMA的
order=(p,d,q)参数:p是自回归阶数,d是差分次数,q是移动平均阶数。AR模型对应q=0,MA模型对应p=0。 - 不要同时手动差分和设置模型的d>0,否则会重复差分导致数据失真。
- 差分后的数据会产生NaN值,必须用
dropna()处理后再拟合和绘图,否则会出现对齐错误。
内容的提问来源于stack exchange,提问作者Baeg12121
相关产品推荐
相关产品推荐

