最近在学习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类的实例,然后调用它的fit和predict方法。
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.plot_components方法。默认情况下,您将看到时间序列的趋势,年季节性和周季节性。如果你包括假期,你也会在这里看到。
fig2 = m.plot_components(forecast)
有关每种方法可用选项的更多详细信息,请参阅文档,例如,通过help(Prophet)或help(Prophet.fit)。