如何使用 Facebook Prophet 选择初始值、期间、范围和截止值?

Tob*_*tor 5 python hour facebook-prophet

我的数据集中有大约 23300 个每小时数据点,我尝试使用 Facebook Prophet 进行预测。要微调超参数,可以使用交叉验证:

from fbprophet.diagnostics import cross_validation
Run Code Online (Sandbox Code Playgroud)

整个过程如下所示: https: //facebook.github.io/prophet/docs/diagnostics.html

使用cross_validation1 需要指定initial,periodhorizon

df_cv = cross_validation(m, initial='xxx', period='xxx', horizon = 'xxx')
Run Code Online (Sandbox Code Playgroud)

我现在想知道如何在我的情况下配置这三个值?如前所述,我拥有大约 23.300 个每小时数据点的数据。我应该将其中的一小部分作为范围,还是将数据的正确部分作为范围并不那么重要,并且我可以采用任何看起来合适的值?

此外,cutoffs还定义如下:

cutoffs = pd.to_datetime(['2013-02-15', '2013-08-15', '2014-02-15'])
df_cv2 = cross_validation(m, cutoffs=cutoffs, horizon='365 days')
Run Code Online (Sandbox Code Playgroud)

这些是否cutoffs应该像上面一样平均分配,或者我们可以cutoffs按照某人喜欢的方式单独设置它们吗?

小智 6

  • initial是第一个训练期。这是开始训练所需的最小数据量。
  • horizon是您想要评估预测的时间长度。假设一家零售店正在构建模型,以便他们可以预测下个月的销售额。在这里,将时间范围设置为 30 天是有意义的,这样他们就可以根据希望使用模型的相同参数设置来评估模型。
  • period是每次折叠之间的时间量。它可以大于地平线,也可以小于地平线,甚至可以等于地平线。
  • cutoffs是每个范围的开始日期。

您可以通过查看此图片来理解这些术语 -

在此输入图像描述 致谢:使用 Facebook Prophet 预测时间序列数据,作者:Greg Rafferty

让我们想象一下,一家零售店想要一个能够预测下个月每日销售额的模型,并且他们计划在每个季度初运行该模型。他们有3年的数据

那么他们会将初始训练数据设置为 2 年。他们想要预测下个月的销售额,因此将期限设置为 30 天。他们计划每个业务季度运行该模型,因此将周期设置为 90 天。上图中也显示了这一点。

让我们将这些参数应用到我们的模型中:

df_cv = cross_validation(model,
                     horizon='30 days',
                     period='90 days',
                     initial='730 days')
Run Code Online (Sandbox Code Playgroud)