You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Python中ARIMA固定参数长期预测逻辑的困惑咨询

为什么ARIMA预测不需要使用y_test?

我完全理解你的困惑——毕竟不同时间序列模型的预测逻辑确实有不小的差异,尤其是ARIMA和深度学习模型(比如Keras里的LSTM)对比的时候。下面我来拆解一下核心原因:

1. ARIMA的本质是「序列生成模型」

ARIMA(p,d,q)是一种参数化的时间序列模型,它通过训练集y_train拟合出三个关键部分的参数:

  • 自回归项(AR(p)):用序列前p个值的线性组合来预测当前值
  • 差分整合(I(d)):通过d阶差分让非平稳序列变平稳
  • 移动平均项(MA(q)):用前q个预测误差的线性组合来修正预测

当你用model.fit()完成拟合后,模型已经掌握了这个序列的内在生成规律——相当于得到了一个可以“自动生成后续值”的公式。所以预测的时候,只需要用到训练集的最后一段历史数据,就可以按照这个公式直接生成n_periods步的预测结果,完全不需要依赖y_test的真实值。

举个简单的例子:假设你拟合的是ARIMA(1,1,0),模型公式本质是「下一个值 = 上一个值 + 自回归系数*(上一个值-上上个值) + 常数」。预测的时候,第一步用训练集最后两个值算出第一个预测值,第二步用这个预测值和训练集最后一个值算出第二个预测值,以此类推,全程不需要真实的y_test参与。

2. 深度学习模型的「一步映射逻辑」

你提到的Keras/TensorFlow模型,大部分时候是基于输入-输出映射的黑箱模型。比如你用LSTM做时间序列预测时,通常会把「过去k个时间步的序列」作为输入,「下一个时间步的值」作为输出训练模型。

这时候的model.predict()本质是一步预测:给它一个长度为k的输入序列,它输出一个对应的值。如果要做多步预测,你有两种选择:

  • 用真实的y_test值作为下一步的输入(也就是你说的“测试阶段使用y_test来预测下一个值”),这叫滚动预测(Walk Forward Validation)
  • 用上一步的预测值作为下一步的输入,这叫递归预测

这种逻辑和ARIMA的直接多步预测完全不同——深度学习模型本身没有“生成整个序列”的能力,它只能完成“输入序列→单个输出”的映射,所以必须依赖输入(不管是真实值还是预测值)才能逐步得到多步结果。

3. ARIMA也能做「滚动预测」(如果需要的话)

如果你想让ARIMA模拟深度学习模型的滚动预测逻辑,也是可以实现的。比如你可以循环每一步(固定参数的话,不需要重新拟合模型,只需要更新历史输入即可):

# 初始化历史数据为训练集
history = [x for x in y_train]
fc = []
# 先拟合一次模型,固定参数
model = ARIMA(history, order=(2,1,2))
model_fit = model.fit(disp=0)

for _ in y_test:
    # 基于当前历史数据预测1步
    output, _, _ = model_fit.forecast(1)
    fc.append(output[0])
    # 将预测值加入历史数据,用于下一步预测(如果用真实值就是滚动验证)
    history.append(output[0])

核心是:ARIMA本身支持滚动预测,但这不是它的默认用法——它的原生能力是直接生成多步预测。

总结

两种模型的预测逻辑差异,本质是参数化模型vs数据驱动黑箱模型的区别:

  • ARIMA通过训练集估计出序列的生成规则,直接按规则生成未来值,不需要依赖真实测试数据
  • 深度学习模型学习的是输入到输出的映射,必须依赖输入(真实或预测值)才能逐步完成多步预测

内容的提问来源于stack exchange,提问作者SBad

火山引擎 最新活动