在SARIMAX预测中使用dynamic=True和dynamic=False时的方法

2024-04-25 18:53:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Stack Overflow中提到了以前的查询,但仍然无法得出结论

我有一个包含每月商品价格的数据集。我想用SARIMAX预测价格。我想预测未来24个月的价格。最初,我有509行的实际每月价格。现在我想预测下一个24个月(或24行)的价格,我已经为其创建了新的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')

enter image description here

当我使用下面的代码时,我使用“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')

enter image description here

现在实际的问题来了,我得到了不同的图表

当我使用下面的代码使用“dynamic=True”或“dynamic=False”时,我得到了不同的图形,这与之前的情况不同

future_df['forecast']=结果。预测(开始=400,结束=533,动态=True)

px.line(future_df,x='Date',y='Price','forecast'],template='plotly'u dark')

enter image description here

future_df['forecast']=结果。预测(开始=400,结束=533,动态=False)
px.line(future_df,x='Date',y='Price','forecast'],template='plotly'u dark')

enter image description here

我的问题

  1. 为什么我在图形中得到了差异?我可以注意到,与dynamic=True相比,dynamic=False提供了更好的预测
  2. 在预测(开始=508,结束=533)和验证(例如,开始=400,结束=533或开始=400,结束=508)时,我应该遵循哪种方法(动态=False或动态=True)

我还有几个问题:

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

我使用所有509行(价格)构建了SARIMAX模型。我想验证每个图的模型。我应该使用哪种方法“dynamic=True”或“dynamic=False”?例如,我想使用plotly验证最后133行的价格509行内的价格。我可以看到,“future_df['forecast']=results.predict(开始=400,结束=533,动态=False)”与“future_df['forecast']=results.predict(开始=400,结束=533,动态=True)”相比,给我提供了更好的图表。请告知

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

使用dynamic=True进行预测

future_df['forecast']=结果。预测(开始=510,结束=533,动态=True)

![509 NaN
510 4697.509465
511 4856.310742
512 4755.252961
513 4787.155811
514 4663.267482
515 4797.953182
516 4888.939789
517 4867.187318
518 4914.688052
519 5096.828530
520 5220.873406
521 5295.573417
522 5542.382493
523 5575.436461
524 5475.326039
525 5524.854306
526 5314.567943
527 5512.470648
528 5556.571233
529 5434.857829
530 5363.764829
531 5541.740158

##使用dynamic=False进行预测

future_df['forecast']=结果.预测(开始=510,结束=533,动态=False)

509 NaN
510 4697.509465
511 4856.310742
512 4755.252961
513 4787.155811
514 4663.267482
515 4797.953182
516 4888.939789
517 4867.187318
518 4914.688052
519 5096.828530
520 5220.873406
521 5295.573417
522 5542.382493
523 5575.436461
524 5475.326039
525 5524.854306
526 5314.567943
527 5512.470648
528 5556.571233
529 5434.857829
530 5363.764829
531 5541.740158][6]][6]

如果未来24个月的预测结果相似,那么我现在不知道该用哪种方法来预测未来24个月的价格。请告知。 提前谢谢你的帮助


Tags: 代码falsetruedfdateline动态future
2条回答

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

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

在预测从509到533的曲线图的第一次比较中,得到相同曲线图的原因是您在进行外推,因此您没有预测的接下来24个步骤的真值,无论设置动态模型是否为真,使用样本外方法

由于样本外方法使用前一时间步的最后一个预测值来预测下一个时间步的值,随着步数的增加,预计会偏离实际值,因为在每一步的预测中,拟合模型也会学习前一个预测步的误差

dynamic=False预测从400到508将比预期的dynamic=True有更好的预测结果,因为它是样本方法

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

相关问题 更多 >