1

我正在做一个经过训练的 autoarima 模型等。我正处于需要使用该模型进行一些预测的阶段(该模型是使用 5 年的数据训练的,我需要预测明年) .

初始数据集是一个简单的时间序列数据集;

            Volume
01-01-1995  345
.
.
.
31-12-2000  4783

到目前为止的步骤;

df_train = df[df.Date < "2019"]
df_test = df[df.Date >= "2019"]

exogenous_features = ["Consumption_mean_lag30", "Consumption_std_lag30",
                      "Consumption_mean_lag182", "Consumption_std_lag182",
                      "Consumption_mean_lag365", "Consumption_std_lag365",
                      "month", "week", "day", "day_of_week"]
model = auto_arima(df_train['Volume'], exogenous=df_train[exogenous_features], trace=True, error_action="ignore", suppress_warnings=True)
model.fit(df_train['Volume'], exogenous=df_train[exogenous_features])

forecast = model.predict(n_periods=len(df_test), exogenous=df_test[exogenous_features])
df_test["Forecast_ARIMAX"] = forecast
df_test[["Consumption", "Forecast_ARIMAX"]].plot(figsize=(14, 7))

from sklearn.metrics import mean_absolute_error, mean_squared_error
print("RMSE of Auto ARIMAX:", np.sqrt(mean_squared_error(df_test.Consumption, df_test.Forecast_ARIMAX)))
print("\nMAE of Auto ARIMAX:", mean_absolute_error(df_test.Consumption, df_test.Forecast_ARIMAX))

以上给了我一个满意的模型。

当我尝试使用以下内容进行预测时;

model.predict(n_periods=365)

我不断收到错误消息;

ValueError: When an ARIMA is fit with an X array, it must also be provided one for predicting or updating observations.

我试图解决所有问题,但似乎无法理解如何提供“X 数组”或错误告诉我什么?

如果有人有任何见解或无论如何可以提供帮助,我将不胜感激。

谢谢。

4

1 回答 1

2

你用外生数据训练了你的模型,所以你有你的时间序列和额外的数据。当您进行预测时,您必须为您尝试预测的时间范围提供额外的外部数据。

这是通过提供外生数据生成预测的正确方法:

forecast = model.predict(n_periods=len(df_test), exogenous=df_test[exogenous_features])

在这里,您缺少外生数据,因此出现错误(X 数组应包含您的外生特征):

model.predict(n_periods=365)

外生数据的关键在于它可能会显着改善您的模型,但您需要提前了解这些数据才能做出预测。

于 2021-11-15T11:54:28.517 回答