> 文章列表 > Prophet学习(四)趋势Changepoints

Prophet学习(四)趋势Changepoints

Prophet学习(四)趋势Changepoints

目录

趋势Changepoints(Trend Changepoints)

Prophet中的自动更改点检测(Automatic changepoint detection in Prophet)

调整趋势灵活性(Adjusting trend flexibility)

指定变更点的位置(Specifying the locations of the changepoints)


趋势Changepoints(Trend Changepoints)

您可能已经注意到,在本文档前面的示例中,实时序列的轨迹经常发生突变。默认情况下,Prophet将自动检测这些变化点,并允许趋势适当地适应。然而,如果你希望对这个过程有更好的控制(例如,Prophet错过了一个速率变化,或者在历史中过度拟合速率变化),那么你可以使用几个输入参数

Prophet中的自动更改点检测(Automatic changepoint detection in Prophet)

Prophet通过首先指定允许速率变化的大量潜在变化点来检测变更点。然后它在速率变化的幅度上放置一个稀疏先验(相当于L1正则化)——这本质上意味着Prophet有大量可能的速率可以改变的地方,但会使用尽可能少的地方。看看《快速入门》中Peyton Manning的预测。默认情况下,Prophet指定25个潜在的更改点,这些更改点统一放置在时间序列的前80%中。图中的垂直线表示放置潜在变化点的位置:

 尽管我们有很多地方的速率可能会发生变化,但由于稀疏先验,这些变化点中的大多数都没有被使用。我们可以通过绘制每个变点的速率变化率的大小来看到这一点:

 潜在更改点的数量可以使用参数n_changepoints来设置,但是通过调整正则化可以更好地进行调整。意义变更点的位置可以通过以下方法可视化:

# Python
from prophet.plot import add_changepoints_to_plot
fig = m.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), m, forecast)

 默认情况下,仅推断时间序列的前80%的变化点,以便有足够的跑道来预测未来的趋势,并避免时间序列结束时的过拟合波动。这个默认值在许多情况下都有效,但不是所有情况,可以使用changepoint_range参数进行更改。例如,在Python中m = Prophet(changepoint_range=0.9)或m <- Prophet(changepoint . range=0.9)。R中的range = 0.9)将在时间序列的前90%放置潜在的变化点。

调整趋势灵活性(Adjusting trend flexibility)

如果趋势变化过度拟合(灵活性太大)或欠拟合(灵活性不够),您可以使用输入参数changepoint_prior_scale调整稀疏先验的强度。缺省情况下,该参数设置为0.05。增加它将使趋势更加灵活:

# Python
m = Prophet(changepoint_prior_scale=0.5)
forecast = m.fit(df).predict(future)
fig = m.plot(forecast)

 减少它会使趋势变得不那么灵活:

# Python
m = Prophet(changepoint_prior_scale=0.001)
forecast = m.fit(df).predict(future)
fig = m.plot(forecast)

 在可视化预测时,如果趋势似乎过度或不合适,可以根据需要调整此参数。在全自动设置中,请参阅关于交叉验证的文档,以获得关于如何调优该参数的建议。

指定变更点的位置(Specifying the locations of the changepoints)

如果您愿意,您可以使用changepoints参数手动指定潜在变更点的位置,而不是使用自动变更点检测。然后将只允许在这些点上进行斜率变化,与以前一样进行稀疏正则化。例如,人们可以像自动完成的那样创建一个点网格,但然后用一些已知可能发生变化的特定日期来扩大网格。作为另一个例子,变更点可以完全限制在一个小的日期集,如下所示:

# Python
m = Prophet(changepoints=['2014-01-01'])
forecast = m.fit(df).predict(future)
fig = m.plot(forecast)