【问题标题】:ARIMA model not accurate predictionARIMA 模型预测不准确
【发布时间】:2020-11-18 17:20:03
【问题描述】:

我正在尝试使用 ARIMA 模型预测时间序列中的下一个值。 这是我的代码:(抱歉错别字)

split_val = floor(len(data_file)*0.8)
train = data_file[["Daily Confirmed"]][:split_val]
tesst = data_file[["Daily Confirmed"]][split_val:]

print(train.head())
print(tesst.head())

p = d = q = range(1, 5)

pdq = list(itertools.product(p, d, q))
# print(pdq)
bestvalues = {}
for i in pdq:
    try:
        p, d, q = i
        moodel = ARIMA(train, order=(p, d, q))
        trained_model = moodel.fit()
        bestvalues[trained_model.aic] = i
        print(trained_model.aic, " ", i)
    except:
        continue

print(bestvalues)
minaic = min(bestvalues.keys())


moodel = ARIMA(train, order=bestvalues[minaic])
trained_model = moodel.fit()

pridiction = trained_model.forecast(steps=len(tesst))[0]

comparisionn = tesst.copy()

comparisionn["forcastted"] = pridiction.tolist()
comparisionn.plot()

print(comparisionn)
print(trained_model.aic)
plt.show()

(数据经过预处理)

我能得到的最小 aic 是2145.930883796257,这里是针对测试数据的预测(仅前 5 个):

            Daily Confirmed    forcastted
Date                                     
2020-06-22            13560  15048.987970
2020-06-23            15656  15349.247935
2020-06-24            16868  15905.260648
2020-06-25            18205  16137.086959
2020-06-26            18255  16237.232886

这是剧情

如您所见,预测并不准确,我已将 p、d 和 q 的所有值强制设为 4....

可能是什么问题? 谢谢。

【问题讨论】:

  • 我应该尝试不同的模型吗?

标签: python time-series data-science statsmodels arima


【解决方案1】:

如果您“每天”更新模型,您应该会获得更好的结果。您的模型在 7 月 21 日之后没有看到任何数据,而可能是 8 月 14 日。 ARIMA 可能难以预测提前 20-30 步。相反 - 尝试逐步预测,如下所示:

history_endog = list(train.copy(deep=True))
y_true = []
y_pred = []

for obs in test: 
    model = ARIMA(endog=history_endog, order=(p,d,q))
    model_fit = model.fit()
    forecast = model_fit.forecast()[0]

    y_true.append(obs)
    y_pred.append(forecast)
    history_endog.append(obs)

然后绘制y_true 和y_pred,您的结果应该会有所改善。为简单起见,上面的代码示例使用列表。

【讨论】:

  • 谢谢!有效!但这与强制所有 p,d q 值相结合在较慢的机器上需要大量时间。有什么方法可以提高效率吗?
  • 但是,尽管图表看起来很准确,但 tha aic 仍然接近 2000... 有什么办法可以改善吗?
  • @psycoxer 优化算法确实需要一些时间。毕竟,这些不是 GPU 上的神经网络。其次,您可能会寻找 ARIMAX。 X 代表外生变量,如果您正确选择它应该会有所帮助。第三,为什么是AIC?尝试在测试数据集上使用 MAPE 之类的东西,恕我直言,它更容易理解
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 2016-06-06
  • 2019-05-30
  • 2018-01-19
相关资源
最近更新 更多