最近在学习Prophet模型,看着Prophet的Jupyter Notebook上面的几个例子,试着运行了一遍,然后顺便尝试了把文档翻译成中文,方便以后查阅。由于水平有限,可能会有一些翻译不准确的地方,后期有新的理解再继续修改吧。

%matplotlib inline
import logging
logging.getLogger('fbprophet').setLevel(logging.ERROR)
import warnings
warnings.filterwarnings("ignore")

Python API

Prophet遵循sklearn模型API。我们创建一个Prophet类的实例,然后调用它的fitpredict方法。

Prophet的输入始终是一个包含两列的数据:ds和y。 ds(datestamp)列应为Pandas预期的格式,理想情况下为YYYY-MM-DD的日期格式或YYYY-MM-DD HH:MM:SS的时间戳格式。 y列必须是数字,表示我们希望预测的度量。

作为示例,让我们看一下Peyton Manning的Wikipedia页面的日志,这个日志包含了页面每日浏览量的时间序列。我们使用R中的Wikipediatrend软件包来抓取这些数据.Peyton Manning提供了一个很好的例子,因为它说明了Prophet的一些特征,例如多个季节性,改变增长率,以及模拟特殊日子的能力(例如Manning’s playoff(曼宁的季后赛)和superbowl appearances(超级碗出场))。 CSV可在此处获得。

首先我们将导入数据:

import pandas as pd
from fbprophet import Prophet
df = pd.read_csv('examples/example_wp_log_peyton_manning.csv')
df.head()
ds y
0 2007-12-10 9.590761
1 2007-12-11 8.519590
2 2007-12-12 8.183677
3 2007-12-13 8.072467
4 2007-12-14 7.893572

我们通过实例化一个新的Prophet对象来训练模型。有关预测的任何设置都将被设置在构造函数中。然后调用其fit方法并传入历史数据帧。训练过程(Fitting)需要1-5秒。

m = Prophet()
m.fit(df)
<fbprophet.forecaster.Prophet at 0x1a7d5155a20>

然后在数据框(dataframe)上进行预测,其中列ds包含要进行预测的日期。您可以使用辅助方法Prophet.make_future_dataframe获得一个合适的数据帧,该数据帧将在未来延长指定的天数(指定预定天数)。默认情况下,它还会包含历史记录中的日期,然后我们将看到结合起来的(历史数据+预测数据框)的模型。

future = m.make_future_dataframe(periods=365)
future.tail()
ds
3265 2017-01-15
3266 2017-01-16
3267 2017-01-17
3268 2017-01-18
3269 2017-01-19

predict方法将给未来每一个日期生成一个预测值,并将其命名为yhat。如果您传递历史日期,它将根据样本数据进行训练。此处的forecast对象是一个新的数据框,其中包含一个预测值的列,以及包含组件(对历史数据的分解)和不确定区间的列。

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
ds yhat yhat_lower yhat_upper
3265 2017-01-15 8.212379 7.495058 8.922266
3266 2017-01-16 8.537381 7.828844 9.249592
3267 2017-01-17 8.324804 7.627442 9.059846
3268 2017-01-18 8.157475 7.507110 8.907231
3269 2017-01-19 8.169385 7.499621 8.867653

您可以通过调用Prophet.plot方法并传入预测数据帧并绘制图像。

fig1 = m.plot(forecast)

Prophet文档中文翻译--quick_start

如果要查看预测的成分构成,可以使用Prophet.plot_components方法。默认情况下,您将看到时间序列的趋势,年季节性和周季节性。如果你包括假期,你也会在这里看到。

fig2 = m.plot_components(forecast)

Prophet文档中文翻译--quick_start

有关每种方法可用选项的更多详细信息,请参阅文档,例如,通过help(Prophet)或help(Prophet.fit)。

相关文章: