为何简单移动平均模型预测值恒定?多时间序列模型预测值一致问题
为什么简单移动平均、单指数平滑和
auto.arima()的预测值会一致? 咱们来拆解几种场景下的原因,帮你理清背后的逻辑:
1. 2期简单移动平均(SMA)与单指数平滑(SES)预测值一致
你用的是n=2的简单移动平均,forecast包对它的预测逻辑是:把训练集最后一期的移动平均值(也就是(y_T + y_{T-1})/2,T为训练集最后一个时间点)作为所有未来时间段的预测值,属于“平预测”(flat forecast)。
而单指数平滑(水平型Holt-Winters模型)的预测逻辑是:未来所有期的预测值等于最后一期的平滑水平值L_T,计算式为L_T = α*y_T + (1-α)*L_{T-1}(α是平滑系数)。
当满足以下条件时,两者的预测值会完全一致:
- 你的时间序列平稳、无趋势、无季节性,序列波动极小,最后几个观测值的移动平均值刚好等于SES的平滑水平值;
- 或者你在SES中使用了
α=2/(n+1)=2/3的平滑系数,长期来看平滑水平值会收敛到2期移动平均的结果。
2. auto.arima()预测值也与前两者一致
auto.arima()会根据数据特征自动筛选最优ARIMA模型,当你的序列符合以下情况时,它的预测结果会和SMA/SES重合:
- 序列平稳(ADF检验显著)、无趋势、无季节性,且自相关(ACF)、偏自相关(PACF)系数快速衰减至0(无显著自相关);
- 此时
auto.arima()会选择ARIMA(0,0,0) with mean模型——也就是用训练集的样本均值作为所有未来期的预测值。如果这个均值刚好等于你最后一期的SMA值、SES的平滑水平值,三者的预测结果就会完全一致。
验证小技巧
你可以通过以下步骤确认原因:
- 用
ets()拟合单指数平滑:mod_ses <- ets(data.train, model="ANN"),然后查看mod_ses$alpha是否接近2/3; - 对比三个关键值:训练集样本均值(
mean(data.train))、最后一期SMA值(tail(mod_mva, 1))、SES的最后水平值(mod_ses$states[1]); - 查看
auto.arima()的模型结果:mod_arima <- auto.arima(data.train),打印mod_arima确认是否为ARIMA(0,0,0) with mean。
内容的提问来源于stack exchange,提问作者Sandeep Bodanapu
相关产品推荐
相关产品推荐

