【问题标题】:Approach while using dynamic =True and dynamic = False in SARIMAX forecasting在 SARIMAX 预测中使用 dynamic =True 和 dynamic = False 时的方法
【发布时间】:2021-09-06 14:03:45
【问题描述】:

我在 Stack Overflow 中参考过之前的查询,但仍然无法得出结论。

我有一个包含每月商品价格的数据集。我想使用 SARIMAX 预测价格。我想预测未来 24 个月的价格。最初,我有 509 行实际月度价格。现在我想预测我创建新数据框的未来 24 个月(或 24 行)的价格。新的 Dataframe 还包含实际的 Dataframe 行。

当我使用下面的代码时,我使用“dynamic =True”得到这个图表:

 future_df['forecast'] = results.predict(start = 508, end =533, dynamic =True)
 px.line(future_df, x='Date', y= ['Price','forecast'],template = 'plotly_dark')

当我使用下面的代码时,我会使用“dynamic =False”来获取这个图表:

future_df['forecast'] = results.predict(start = 508, end =533, dynamic =False)
px.line(future_df, x='Date', y= ['Price','forecast'],template = 'plotly_dark')

现在真正的问题来了,我得到了不同的图表。

当我使用下面的代码使用“dynamic =True”或“dynamic =False”时,我得到了不同的图表,以前不是这样。

future_df['forecast'] = results.predict(start = 400, end =533, dynamic =True)

px.line(future_df, x='Date', y= ['Price','forecast'],template = 'plotly_dark')

future_df['forecast'] = results.predict(start = 400, end =533, dynamic =False)
px.line(future_df, x='Date', y= ['Price','forecast'],template = 'plotly_dark')

我的问题

  1. 为什么我的图表有差异?我注意到,与 dynamic = True 相比,dynamic =False 提供了更好的预测。
  2. 在预测(开始 = 508,结束 =533)和验证(例如,开始 = 400,结束 =533 或开始 = 400,结束 =第508章)?

我还有一些疑问:

Q1)最初我有 509 行,即 509 个时间段(= 行)的每月价格。现在我想预测未来 24 个月的价格。

我已经使用所有 509 行(价格)构建了 SARIMAX 模型。我想验证每个图的模型。我应该使用哪种方法 "dynamic = True" 或 "dynamic = False" ?例如我想使用 plotly 验证 509 行内最后 133 行价格的价格。我可以看到“future_df['forecast'] = results.predict(start = 400, end =533, dynamic =False)” 与“future_df['forecast'] = results.predict(start = 400,结束 = 533,动态 = True)"。请指教。

Q2)我使用 dynamic =true 和 false 的预测是相同的。请参阅下面的输出代码。

使用动态 =True 进行预测

future_df['forecast'] = results.predict(start = 510, end =533, dynamic =True)

## 使用动态 =False 进行预测

future_df['forecast'] = results.predict(start = 510, end =533, dynamic =False)

如果未来 24 个月的预测相似,现在我很困惑使用哪种方法来预测未来 24 个月的价格。请指教。 提前感谢您的帮助!

【问题讨论】:

    标签: python plotly forecasting arima sarimax


    【解决方案1】:

    当你设置dynamic=True时,模型会连续预测前一步(t+1),然后对于前2步(t+2)预测,它会将预测值(t+1)附加到数据中,重新- 对新的扩展数据拟合模型,然后进行第二步预测。这称为样本外预测。

    当您设置dynamic=False 时,模型会使用前一时间步的真实值而不是使用预测值顺序提前一步预测。这称为样本内预测。

    在您第一次比较从 509 到 533 的图时,您得到相同图的原因是您在推断,无论设置动态 True 还是 False,您都没有预测的接下来 24 步的真实值模型使用样本外方法。

    由于样本外方法使用上一个时间步的最后一个预测值来及时预测下一个值,随着步数的增加,预计会偏离实际值,因为每个步的预测拟合模型还可以学习先前预测步骤的错误。

    使用dynamic=False 预测从 400 到 508 的预测结果将比预期的 dynamic=True 好得多,因为它是样本内方法。

    【讨论】:

      【解决方案2】:

      最好的办法可能是在笔记本或其他任何东西上自己绘制 ['Price''] 并根据真实数据及其外观选择 True 或 False

      【讨论】:

      • 感谢@John Shaughnessy 的回复。你能详细说明一下吗?请检查我是否添加了其他查询。
      • 抱歉,我认为您的真实数据正在发生变化,而不是您的预测模型...仅使用 model.predict(....) 很难理解,您使用的是哪种模型框架?转到它的文档并找出动态的作用
      猜你喜欢
      • 2014-02-09
      • 1970-01-01
      • 2021-09-25
      • 2016-07-03
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      相关资源
      最近更新 更多