💡说明

安装

快速开始

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

快速开始

Python API

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

Prophet的输入始终是一个有两列的dataframe :dsydsyds(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()

Untitled Database

我们通过实例化一个新的Prophet对象来拟合模型。预测过程的任何设置都被传递到构造函数中。然后你调用它的fit方法,并传入历史数据框架。拟合应该需要1-5秒的时间。

# Pythonm = Prophet()m.fit(df)

然后在一个数据框上进行预测,数据框的列ds包含了要进行预测的日期。你可以使用helper methodProphet.make_future_dataframe得到一个合适的数据框架,它可以延伸到未来指定的天数。默认情况下,它也会包括历史上的日期,所以我们也会看到模型的拟合情况。

# Pythonfuture = m.make_future_dataframe(periods=365)future.tail()

Untitled Database

predict方法将为future中的每一行是一个预测值,为yhat。如果你传入历史日期,它将提供一个样本内拟合。这里的forecast对象是一个dataframe,它包括一列yhat和预测值,以及成分(components)和不确定性区间(uncertainty intervals)的列。

# Pythonforecast = m.predict(future)forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

Untitled Database

你可以通过调用Prophet.plot方法来传入你的forecast dataframe来绘制预测。

# Pythonfig1 = m.plot(forecast)

https://facebook.github.io/prophet/static/quick_start_files/quick_start_12_0.png

png

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

# Pythonfig2 = m.plot_components(forecast)

https://facebook.github.io/prophet/static/quick_start_files/quick_start_14_0.png

png

可以使用 plotly 创建预测和组件的交互式图表。你需要单独安装 plotly 4.0 或更高版本,因为默认情况下它不会与 fbprophet 一起安装。你还需要安装notebookipywidgets包。

# 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

在R中,我们使用普通的模型拟合API。我们提供了一个prophet函数来执行拟合并返回一个模型对象。然后你可以在这个模型对象上调用 “预测”和 “绘图”。

# Rlibrary(prophet)

首先我们读入数据并创建结果变量。在Python API中,这是一个数据框架,列dsy,分别包含日期和数值。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)

https://facebook.github.io/prophet/static/quick_start_files/quick_start_30_0.png

png

您可以使用prophet_plot_components函数查看预测的细分趋势、周季节性和年季节性。

# Rprophet_plot_components(m, forecast)

https://facebook.github.io/prophet/static/quick_start_files/quick_start_32_0.png

png

使用Dygraphs对预测进行交互式绘图,可使用dyplot.prophet(m, forecast)命令。

关于每个方法可用选项的更多细节可以在docstrings中找到,例如,通过?prophet?fit.prophet。这些文档也可以在CRAN上的参考手册中找到。