statespace.SARIMAX 模型:为什么模型使用所有数据来训练模型,并预测训练模型的范围

statespace.SARIMAX model: why the model use all the data to train mode, and predict the a range of train model

我按照教程学习了SARIMAX模型:https://www.digitalocean.com/community/tutorials/a-guide-to-time-series-forecasting-with-arima-in-python-3。数据的日期范围是1958-2001.

mod = sm.tsa.statespace.SARIMAX(y,
                                order=(1, 1, 1),
                                seasonal_order=(1, 1, 1, 12),
                                enforce_stationarity=False,
                                enforce_invertibility=False)

results = mod.fit()

在拟合 ARIMA 时间序列模型时,我发现作者的所有日期范围数据都适合模型参数。但是在验证 Forecasts 时,作者使用从 1998-01-01 开始的日期作为数据日期范围的一部分来拟合模型。

pred = results.get_prediction(start=pd.to_datetime('1998-01-01'), dynamic=False)

我知道在机器学习模型中,训练数据和验证(测试)数据是不同的,我的意思是不同的范围。我的意思是作者是对的?为什么这样做(我的意思是使用所有火车数据的原因),我是 SARIMAX 模型的新模型。

你们能告诉我更多关于这个模型的信息吗,例如如何预测天数或周数而不只是月数,我的意思是如何设置 order=(1,1,1), seasonal_order 的参数=(1、1、1、12)。谢谢!

作者说的对。当您进行回归(线性、高阶或逻辑回归——无关紧要)时——与你的训练数据有偏差是绝对可以的(例如——即使是训练数据的逻辑回归也可能会给你一个误报)。

同样代表时间序列。我认为作者想通过这种方式表明模型构建正确。

seasonal_order=(1, 1, 1, 12)

如果您查看 tsa stats documentation,您会发现如果您想使用季度数据 - 您必须分配最后一个参数 (s) - 值为 4。每月 - 12。这意味着如果你想使用每周数据 seasonal_order 应该看起来像这样

seasonal_order=(1, 1, 1, 52)

每日数据将为

seasonal_order=(1, 1, 1, 365)

order分量是分别负责非季节性参数p、d、q的参数。您必须根据您的数据行为找到它们

  • 页。您可以将其解释为 是否对 。或者换句话说,如果你有一个每天的数据,p是6,你可以理解为周二的数据是否会对周日的数据产生影响。
  • d.差分参数。它定义了流程的集成级别。这意味着你应该应用多少次时间序列 differencing operator 才能使你的时间序列静止
  • 问。您可以将其解释为有多少先验噪声(错误)影响当前值

这是一个很好的answer如何找到非季节性成分值

博客作者设置这些参数是因为:"The output of our code suggests that SARIMAX(1, 1, 1)x(1, 1, 1, 12) yields the lowest AIC."