【问题标题】:statespace.SARIMAX model: why the model use all the data to train mode, and predict the a range of train modelstatespace.SARIMAX 模型:为什么模型使用所有数据来训练模式,并预测训练模型的范围
【发布时间】:2017-10-29 08:29:14
【问题描述】:

我按照教程学习了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)。谢谢!

【问题讨论】:

    标签: python time-series statsmodels


    【解决方案1】:

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

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

    seasonal_order=(1, 1, 1, 12)
    

    如果您查看 tsa stats documentation 您会看到,如果您想使用季度数据进行操作 - 您必须分配最后一个参数 - 值 4. Monthly - 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 如何找到非季节性组件值

    【讨论】:

    • 谢谢@papadoble151,如果可能的话,你能告诉我如何设置订单参数:order(1,1,1) 来预测星期和日期。我知道周与月(1,1,1)几乎相同。那一天预测呢?
    • @tktktk0711 这些参数 (p,d,q) - 你必须找到它们。没有针对每日或每周数据的预定义值集。始终尝试为每个参数找到一些直观的解释。这是了解时间序列的好地方otexts.org/book/fpp
    • 感谢@papadoble151 的友好回答。我会接受你的回答。顺便问一下,能否提供一下您的联系方式或博客地址,以便我们就时间序列模型进行交流。
    • @tktktk0711,只需将 gmail.com 添加到我的昵称
    • 嗨@papadoble151,当我将seasonal_order=(1, 1, 1, 365) 设置为天数预测时,我发现我花了很多时间却没有结果。我不知道为什么。
    【解决方案2】:

    博客作者设置这些参数是因为:“我们的代码输出表明 SARIMAX(1, 1, 1)x(1, 1, 1, 12) 产生的 AIC 最低。”

    【讨论】:

      猜你喜欢
      • 2017-08-19
      • 1970-01-01
      • 2022-10-19
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 2020-05-27
      • 2018-04-15
      相关资源
      最近更新 更多