💡说明
https://facebook.github.io/prophet/docs/quick_start.html
Prophet遵循sklearn
模型API。我们创建一个Prophet
类的实例,然后调用其fit
和predict
方法。
Prophet的输入始终是一个有两列的dataframe :ds
和y
。ds
和y
。ds
(datestamp)一栏应该是Pandas所期望的格式,理想的情况是YYYY-MM-DD代表日期,YYYY-MM-DD HH:MM:SS代表时间戳。y
列必须是数字,代表我们希望预测的测量结果。
作为一个例子,让我们看看Peyton Manning的维基百科页面的日志每日页面浏览量的时间序列。我们使用R中的Wikipediatrend包刮取了这些数据。佩顿-曼宁提供了一个很好的例子,因为它说明了Prophet的一些特性,比如多季节性、变化的增长率以及模拟特殊日子的能力(比如曼宁的季后赛和超级碗出场)。CSV可以在这里获得。
首先我们要导入数据。
# Pythonimport pandas as pdfrom fbprophet import Prophet# Pythondf = pd.read_csv('../examples/example_wp_log_peyton_manning.csv')df.head()
我们通过实例化一个新的Prophet
对象来拟合模型。预测过程的任何设置都被传递到构造函数中。然后你调用它的fit
方法,并传入历史数据框架。拟合应该需要1-5秒的时间。
# Pythonm = Prophet()m.fit(df)
然后在一个数据框上进行预测,数据框的列ds
包含了要进行预测的日期。你可以使用helper methodProphet.make_future_dataframe
得到一个合适的数据框架,它可以延伸到未来指定的天数。默认情况下,它也会包括历史上的日期,所以我们也会看到模型的拟合情况。
# Pythonfuture = m.make_future_dataframe(periods=365)future.tail()
predict
方法将为future
中的每一行是一个预测值,为yhat
。如果你传入历史日期,它将提供一个样本内拟合。这里的forecast
对象是一个dataframe,它包括一列yhat
和预测值,以及成分(components)和不确定性区间(uncertainty intervals)的列。
# Pythonforecast = m.predict(future)forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
你可以通过调用Prophet.plot
方法来传入你的forecast dataframe来绘制预测。
# Pythonfig1 = m.plot(forecast)
png
如果你想看预测成分,你可以使用Prophet.plot_components
方法。默认情况下,你会看到时间序列的趋势、年季节性和周季节性。如果你包括节假日,你也会在这里看到这些。
# Pythonfig2 = m.plot_components(forecast)
png
可以使用 plotly 创建预测和组件的交互式图表。你需要单独安装 plotly 4.0 或更高版本,因为默认情况下它不会与 fbprophet 一起安装。你还需要安装notebook
和ipywidgets
包。
# Pythonfrom fbprophet.plot import plot_plotly, plot_components_plotlyplot_plotly(m, forecast)# Pythonplot_components_plotly(m, forecast)
关于每个方法可用选项的更多细节可以在 docstrings 中找到,例如,通过 help(Prophet)
或 help(Prophet.fit)
。CRAN上的R参考手册提供了所有可用函数的简明列表,每个函数都有一个Python等价物。
在R中,我们使用普通的模型拟合API。我们提供了一个prophet
函数来执行拟合并返回一个模型对象。然后你可以在这个模型对象上调用 “预测”和 “绘图”。
# Rlibrary(prophet)
首先我们读入数据并创建结果变量。在Python API中,这是一个数据框架,列ds
和y
,分别包含日期和数值。ds列应该是YYYY-MM-DD表示日期,或者YYYY-MM-DD HH:MM:SS表示时间戳。如上所述,我们在这里使用佩顿-曼宁的维基百科页面的浏览记录数,可在这里获得。
# Rdf <- read.csv('../examples/example_wp_log_peyton_manning.csv')
我们调用prophet
函数来拟合模型。第一个参数是历史数据框架。其他参数控制Prophet如何拟合数据,并在本文档的后面几页中描述。
# Rm <- prophet(df)
预测是在一个数据框架上进行的,数据框架的一列ds
包含了要进行预测的日期。make_future_dataframe
函数接收模型对象和要预测的时期数,并生成一个合适的dataframe。默认情况下,它还将包括历史日期,因此我们可以评估样本内拟合。
# Rfuture <- make_future_dataframe(m, periods = 365)tail(future)
与R中的大多数建模过程一样,我们使用通用的predict
函数来获得预测。forecast
对象是一个数据框架,其中一列yhat
包含预测。它有额外的不确定性区间和季节性成分的列。
ds3265 2017-01-143266 2017-01-153267 2017-01-163268 2017-01-173269 2017-01-183270 2017-01-19
你可以使用通用的plot
函数,通过传递模型和forecast dataframe来绘制预测。
# Rplot(m, forecast)
png
您可以使用prophet_plot_components
函数查看预测的细分趋势、周季节性和年季节性。
# Rprophet_plot_components(m, forecast)
png
使用Dygraphs对预测进行交互式绘图,可使用dyplot.prophet(m, forecast)
命令。
关于每个方法可用选项的更多细节可以在docstrings中找到,例如,通过?prophet
或?fit.prophet
。这些文档也可以在CRAN上的参考手册中找到。