尝试理解 FB Prophet 交叉验证

mar*_*asr 1 python machine-learning time-series cross-validation facebook-prophet

我有一个包含 84 个月销售额(从 01/2013 到 12/2019)的数据集 - 只是几个月,而不是几天。

Month 01 | Sale 1

Month 02 | Sale 2

Month 03 | Sale 3

....     |   ...

Month 84 | Sale 84
Run Code Online (Sandbox Code Playgroud)

通过可视化看起来模型非常适合......但我需要检查它......

所以我的理解是 cross val 不支持 Months,所以我所做的是转换为使用它/天(尽管我的原始 df 中没有日期信息)...

我想在前五年(60 个月)内尝试我的模型,并在剩下的 2 年(24 个月)中查看模型的预测效果......

所以我做了类似的事情:

cv_results = cross_validation( model = prophet, initial='1825 days', period='30 days', horizon = '60 days')
Run Code Online (Sandbox Code Playgroud)

这有意义吗?

我没有得到截止日期和预测期的概念

小智 11

我也为此挣扎了一段时间。但这是它的工作原理。初始模型将在前 1,825 天的数据上进行训练。它将预测未来 60 天的数据(因为水平线设置为 60)。然后,该模型将在初始时间段 + 时间段(在本例中为 1,825 + 30 天)进行训练,并预测接下来的 60 天。它将继续这样,在训练数据中再添加 30 天,然后预测接下来的 60 天,直到没有足够的数据来执行此操作。

总之,周期是在交叉验证的每次迭代中添加到训练数据集中的数据量,地平线是它预测的距离。

  • 谢谢你,我花了很长时间在谷歌上搜索它是如何工作的,并找到了这个答案。我认为地平线在整个过程中是静止的,但如果我理解正确的话,它实际上每 30 天添加到训练数据中就会向前移动一次。 (2认同)

小智 7

这是设置:

  • 数据点总数为700天
  • 初始为 365 天
  • 周期为10天
  • 期限是20天

在第一次迭代中,它将在第 1-365 天进行训练,并在第 366 到 385 天进行预测。在第二次迭代中,它将在第 11-375 天进行训练,并在第 376 到 395 天进行预测,依此类推。