💡说明

安装

快速开始

饱和预测

趋势变化点

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

不确定区间

异常值

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

异常值

异常值影响Prophet预测的方式主要有两种。这里我们对之前R页面的维基百科访问记录进行预测,但有一个坏数据块。

# Rdf <- read.csv('../examples/example_wp_log_R_outliers1.csv')m <- prophet(df)future <- make_future_dataframe(m, periods = 1096)forecast <- predict(m, future)plot(m, forecast)
# Pythondf = pd.read_csv('../examples/example_wp_log_R_outliers1.csv')m = Prophet()m.fit(df)future = m.make_future_dataframe(periods=1096)forecast = m.predict(future)fig = m.plot(forecast)

https://facebook.github.io/prophet/static/outliers_files/outliers_4_0.png

png

趋势预测似乎很合理,但不确定性区间似乎太大。Prophet能够处理历史上的异常值,但只能通过拟合趋势变化来处理。不确定性模型就会预期未来趋势变化的幅度类似。

处理异常值的最好方法是删除它们–Prophet对缺失数据没有问题。如果你在历史中把它们的值设置为 NA,但把日期留在 future,那么Prophet会给你预测它们的值。

# Routliers <- (as.Date(df$ds) > as.Date('2010-01-01')             & as.Date(df$ds) < as.Date('2011-01-01'))df$y[outliers] = NAm <- prophet(df)forecast <- predict(m, future)plot(m, forecast)
# Pythondf.loc[(df['ds'] > '2010-01-01') & (df['ds'] < '2011-01-01'), 'y'] = Nonemodel = Prophet().fit(df)fig = model.plot(model.predict(future))

https://facebook.github.io/prophet/static/outliers_files/outliers_7_0.png

png

在上面的例子中,离群值扰乱了不确定性估计,但没有影响主要预测 yhat。这种情况并不总是如此,如本例中增加了离群值。

# Rdf <- read.csv('../examples/example_wp_log_R_outliers2.csv')m <- prophet(df)future <- make_future_dataframe(m, periods = 1096)forecast <- predict(m, future)plot(m, forecast)
# Pythondf = pd.read_csv('../examples/example_wp_log_R_outliers2.csv')m = Prophet()m.fit(df)future = m.make_future_dataframe(periods=1096)forecast = m.predict(future)fig = m.plot(forecast)

https://facebook.github.io/prophet/static/outliers_files/outliers_10_0.png

png

在这里,2015年6月的一组极端异常值扰乱了季节性估计,所以它们的影响会永对未来产生严重影响。同样正确的做法是删除它们。

# Routliers <- (as.Date(df$ds) > as.Date('2015-06-01')             & as.Date(df$ds) < as.Date('2015-06-30'))df$y[outliers] = NAm <- prophet(df)forecast <- predict(m, future)plot(m, forecast)
# Pythondf.loc[(df['ds'] > '2015-06-01') & (df['ds'] < '2015-06-30'), 'y'] = Nonem = Prophet().fit(df)fig = m.plot(m.predict(future))

https://facebook.github.io/prophet/static/outliers_files/outliers_13_0.png

png