0

我目前正在做一个项目,我不太确定如何最好地实施下一步,所以我很感激建议和反馈。

在我的数据中,某个日期可能会出现多次,因为我通过邮政编码预测销售额。 数据结构示例 其背景是我想将天气添加到邮政编码中。事后检查不同的天气参数是否可以更好地预测我的模型(SARIMA/SARIMAX)。之后我想在一个表格中有一个输出,其中所有邮政编码都存储了预测的 RMSE。如果 auto_arima 为此选择了参数也很好。

然后我会比较 SARIMA 和 SARIMAX 之间的这些,以便我可以检查有多少百分比的预测通过外部数据变得更好。

目前,数据位于包含 60 多个邮政编码的表中。有没有人有一个想法或功能可以用来创建多个模型(每个邮政编码和选定的参数)和表格?

我现在已经阅读了一些关于金字塔的东西,但我不太确定这是否是正确的包,无论如何我都找不到类似的例子。

4

1 回答 1

0

每个邮政编码都有自己的时间序列。如果您有 60 个邮政编码,那么您可能需要创建 60 个模型,每个时间序列一个。这是一个很大的努力。最简单的方法是这样的:

您可以使用金字塔自动执行此操作。有一个函数auto_arima()试图为 ARIMA 找到可能的最佳参数集。您可以按邮政编码拆分数据框。然后,您可以在所有数据帧上创建一个循环。在你第一次运行的循环内auto_arima()找到最好的参数:

from pmdarima.arima import auto_arima

auto_arima_model = auto_arima(y=endogenous_variable,
                              x=exogenous_variable, #only required if exog data is used
                              seasonal=True,
                              m=7, #seasonality
                              information_criterion="aic",
                              trace=True)

auto_arima无法检测您的数据是否静止,因此您需要自己找出来。检查文档:

https://alkaline-ml.com/pmdarima/modules/generated/pmdarima.arima.auto_arima.html

然后创建一个模型(例如,在 statsmodels 中,auto_arima() 也返回一个模型,但它没有 statsmodels 那么多的功能):

from statsmodels.tsa.statespace.sarimax import SARIMAX

model = SARIMAX(endog=endogenous_variable,
                exog=exogenous_variable, #only required if exog data is used
                order=auto_arima_model.order,
                seasonal_order=auto_arima_model.seasonal_order).fit()

https://www.statsmodels.org/dev/generated/statsmodels.tsa.statespace.sarimax.SARIMAX.html

然后你可以做出你的预测并将它们添加到表格或任何你想做的事情。您也可以在管道中实现这一点。您应该记住,这auto_arima()是一个很好的功能,但并不完美,模型可能不是最好的。

于 2022-01-20T08:41:11.083 回答