ARIMA模型plot_predict与fitted_values结果异常问题求助
ARIMA模型拟合RMSE异常极小的排查与解决方法
区分样本内拟合与样本外预测
你当前计算RMSE用的arima_fit.fitted_values或默认predict()结果,都是模型对训练数据的拟合值,而非对未见过数据的预测值。样本内拟合误差极小是ARIMA模型的正常表现,但这不能代表模型的预测能力。正确做法是划分训练集和测试集:- 拆分数据:
train = df['y'][:-10](示例取前N-10条为训练集,最后10条为测试集) - 训练模型:
arima_fit = ARIMA(train, order=(p,d,q)).fit() - 生成样本外预测:
forecast = arima_fit.predict(start=len(train), end=len(df['y'])-1, typ='levels') - 用测试集实际值和预测值计算RMSE:
from sklearn.metrics import mean_squared_error rmse = mean_squared_error(df['y'][-10:], forecast, squared=False)
- 拆分数据:
检查数据尺度
如果你的数据经过了归一化/标准化处理(比如缩放到0-1区间),RMSE的数值自然会很小。可以通过df['y'].describe()查看数据取值范围:- 若数据是缩放后的,要么还原到原始尺度再计算误差,要么直接使用原始数据重新建模。
排查模型过拟合
样本内误差极小可能是模型参数过于复杂(比如p、q值设置过大)导致的过拟合,此时样本外预测误差会显著上升。你可以:- 对比模型的AIC/BIC值,优先选择数值更小的简约模型;
- 采用滚动窗口验证法,多次拆分训练集和测试集,验证模型稳定性。
确认
predict()参数正确性
若手动设置了predict()的start和end参数,需确保start值大于训练集长度,否则输出的仍是样本内拟合值。比如训练集长度为100,start应设为100或更大,才能得到真正的预测结果。
内容的提问来源于stack exchange,提问作者Amirgiano
相关产品推荐
相关产品推荐

