【问题标题】:Creating an out of sample forecast in Python based on ARIMA model built on train and test data基于基于训练和测试数据的 ARIMA 模型在 Python 中创建样本外预测
【发布时间】:2021-09-30 15:50:04
【问题描述】:

我使用 statsmodels.tsa.arima.model 包在 Python 中开发了一个 ARIMA 模型。该系列分为 traintest 系列。

ARIMA 模型已使用以下代码构建,然后该模型用于在测试期间进行预测,以便进行比较:

train_size = int(len(X) * 0.66)
train, test = X[0:train_size], X[train_size:]
history = [x for x in train]
predictions = list()
for t in range(len(test)):
    model = ARIMA(history, order=1,0,1)
    model_fit = model.fit()
    yhat = model_fit.forecast()[0]
    predictions.append(yhat)
    history.append(test[t])

如何添加到上述代码以创建一天的样本外预测?这是一天的预测,它考虑了 test 数据集中的观察值/在 test 周期结束后的一天创建预测。

我尝试了不同的尝试,但都没有给出所需的解决方案(例如,我可以在 train 周期之后立即创建一日预测)。

我确定有一个简单的解决方案,但目前看不到。感谢您的帮助,

埃德

【问题讨论】:

  • 我无法执行你的代码。上面写着SyntaxError: positional argument follows keyword argument 代表model = ARIMA(history, order=1,0,1) 行,看起来你漏掉了一些括号。
  • 我建议您按照本教程进行操作,然后,如果您无法弄清楚,请发布一些工作代码和一个具体问题:How to Make Out-of-Sample Forecasts with ARIMA in Python
  • 谢谢 - 我会检查链接并恢复。
  • 我看过那个例子(再次感谢发送它),但我仍然不确定如何将 ARIMA 模型应用于观察到的测试数据并产生一天的结果样本预测。链接中的示例似乎没有使用训练/测试数据来开发 ARIMA 模型。
  • 再次感谢您的帮助。我采用的最终解决方案包括在测试数据中创建一个附加/虚构值,继续我的预测,然后将相应的预测作为附加/虚构值作为实际测试期后的预测。不是最优雅的解决方案,但确实为我提供了我需要的解决方案。

标签: python prediction sample arima forecast


【解决方案1】:

适合模型的代码不应位于 for 循环内。

不确定我是否了解您想要做什么。如果目标只是预测超出测试数据的长度,那么您可以这样做:

train_size = int(len(X) * 0.66)
train, test = X[0:train_size], X[train_size:]
model = ARIMA(train, order=(1,0,1))
model_fit = model.fit()
test_size = test.shape[0]
forecast_length = test_size + 1
yhat = model_fit.forecast(steps=forecast_length)

但如果你想考虑测试数据,那么你需要将模型重新拟合到测试数据并从那里进行预测。

model = ARIMA(X, order=(1,0,1))
model_fit = model.fit()
forecast_length = 1
yhat = model_fit.forecast(steps=forecast_length)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2019-04-14
    • 2023-03-11
    相关资源
    最近更新 更多