💡说明

安装

快速开始

饱和预测

趋势变化点

季节性、假日效应和额外回归

不确定区间

https://facebook.github.io/prophet/docs/uncertainty_intervals.html

不确定性区间

默认情况下,Prophet将返回预测yhat的不确定性区间。这些不确定性区间背后有几个重要的假设。

预测的不确定性有三个来源:趋势的不确定性、季节性估计的不确定性和额外的观测噪声。

趋势的不确定性

预测中最大的不确定性来源是未来趋势变化的可能性。我们在本文档中已经看到的时间序列显示了历史上明显的趋势变化。Prophet能够检测并拟合这些,但我们应该期待未来的趋势变化是什么?这是不可能确定的,所以我们做了我们能做的最合理的事情,我们假设未来会看到和历史类似的趋势变化。特别是,我们假设未来趋势变化的平均频率和幅度将与我们在历史中观察到的相同。我们将这些趋势变化向前推算,通过计算其分布,我们得到不确定性区间。

这种衡量不确定性的方法的一个特性是,通过增加 changepoint_prior_scale,允许在比率下的更高灵活性,将增加预测的不确定性。这是因为如果我们在历史上模拟更多的比率变化,那么我们对未来的预期就会更多,并使不确定性区间成为过度拟合的有用指标。

不确定度区间的宽度(默认为80%)可以通过参数interval_width来设置。

# Rm <- prophet(df, interval.width = 0.95)forecast <- predict(m, future)
# Pythonforecast = Prophet(interval_width=0.95).fit(df).predict(future)

同样,这些区间假设未来的比率变化频率和幅度与过去相同。这个假设可能是不正确的,所以你不应该期望在这些不确定性区间上得到准确的覆盖。

季节性的不确定性

默认情况下,Prophet只会返回趋势和观测噪声的不确定性。为了得到季节性的不确定性,你必须做完全的贝叶斯抽样。这是使用参数mcmc.samples(默认为0)完成的。我们在这里对快速开始部分的佩顿-曼宁数据的前六个月做这个工作。

# Rm <- prophet(df, mcmc.samples = 300)forecast <- predict(m, future)
# Pythonm = Prophet(mcmc_samples=300)forecast = m.fit(df).predict(future)

这就用MCMC取样取代了典型的MAP估计,并且可能需要更长的时间,这取决于有多少观测值–预计几分钟而不是几秒钟。如果你做了全采样,那么你在绘制季节性成分时就会看到它们的不确定性。

# Rprophet_plot_components(m, forecast)
# Pythonfig = m.plot_components(forecast)

https://facebook.github.io/prophet/static/uncertainty_intervals_files/uncertainty_intervals_10_0.png

png

你可以在Python中使用方法m.predictive_samples(future),或者在R中使用函数predictive_samples(m,future)得到原始的后验预测样本。

在PyStan for Windows中存在上游问题,使得MCMC采样速度极慢。在Windows中进行MCMC采样的最佳选择是在Linux虚拟机中使用R,或者Python。