默认情况下,Prophet会为了预测值,返回一个不确定的间隔值。针对这些不确定的间隔,下列有一些重要的假设。
根据产生不确定的原因,可以分为这几类:趋势的不确定,季节性估计的不确定,以及噪音的不确定。
趋势的不确定
在预估未来的过程中,最大的不确定性来自未来趋势的变化。历史的时间序列能很清楚的展示趋势变化,Prophet也能很好的适应它。但是,我们预估的未来趋势会是什么样?这个是不太确定的。因此我们只能尽可能做看起来合理的事。
我们假设未来会与历史有着一样的趋势变化。特别地,我们假设未来趋势变化的平均频率和幅度将与我们在历史上观察到的相同。我们预测这些趋势变化,通过计算它们的分布,我们得到不确定区间。
这种测量不确定性的方法的一个特性是,通过增加changepoint_prior_scale,允许更高的速率灵活性,将增加预测的不确定性。这是因为,如果我们在历史中使用更多的变化率模型,那么我们将在未来期望得更多。并使不确定性区间成为过度拟合的有用指标。
不确定区间的宽度(默认为80%)可以使用参数interval_width来设置:
# Python
forecast = Prophet(interval_width=0.95).fit(df).predict(future
同样,这些间隔假定未来将看到与过去相同的频率和幅度的变化率。这个假设可能不正确,所以您不应该期望在这些不确定间隔上得到准确的覆盖。
季节的不确定性
默认情况下,Prophet只会在趋势和观测噪声中返回不确定性。为了得到季节性的不确定性,你必须进行充分的贝叶斯抽样。这个可以使用参数mcmc.samples来实现(默认值为0)。在Quickstart中Peyton Manning数据的前六个月,我们在这里这样做:
# Python
m = Prophet(mcmc_samples=300)
forecast = m.fit(df).predict(future)
这将用MCMC抽样代替典型MAP估计,并且能根据有多少观测值预测持续更长时间——预计几分钟而不是几秒钟。如果你做了全面的抽样,那么当你绘制它们的时候,你会看到季节成分的不确定性:
# Python
fig = m.plot_components(forecast)
您可以在Python中使用m.predictive_samples(future)方法访问原始的后验预测样本。在PyStan有一些针对Windows的上游问题,这使得MCMC采样非常缓慢。在Windows中,MCMC采样的最佳选择是在Linux VM中使用R或Python。