statespace.SARIMAX模型:为什么模型使用所有数据来训练模式,并预测一系列列车模型

tkt*_*711 8 python time-series statsmodels

我按照教程学习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()
Run Code Online (Sandbox Code Playgroud)

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

pred = results.get_prediction(start=pd.to_datetime('1998-01-01'), dynamic=False)
Run Code Online (Sandbox Code Playgroud)

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

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

pap*_*151 9

作者是对的.当您进行回归时(线性,高阶或逻辑 - 无关紧要) - 绝对可以偏离您的训练数据(例如,即使对训练数据进行逻辑回归也可能会给您误报).

同样代表时间序列.我认为这样作者想要证明模型是正确构建的.

seasonal_order=(1, 1, 1, 12)
Run Code Online (Sandbox Code Playgroud)

如果你看一下tsa stats 文档,你会看到如果你想用季度数据操作 - 你必须分配最后一个参数 - 值4.每月 - 12.这意味着如果你想用每周数据操作seasonal_order应该是这样的

seasonal_order=(1, 1, 1, 52)
Run Code Online (Sandbox Code Playgroud)

每日数据将是

seasonal_order=(1, 1, 1, 365)
Run Code Online (Sandbox Code Playgroud)

order component是分别负责非季节性参数p,d和q的参数.您必须根据数据行为找到它们

  • 页.你可以把它解释为更好在此输入图像描述 对...产生影响 在此输入图像描述.或者换句话说,如果您有每日数据且p为6,您可以理解它周二数据会对周日数据产生影响.
  • d.差分参数.它定义了您的流程的集成级别.这意味着您应该应用多少次时间序列差分运算符,以使您的时间序列静止
  • Q值.您可以将其解释为先前噪声(错误)影响当前值的数量

以下是一个很好的答案,您可以找到非季节性组件值