Prophet 之使用篇(一)——简易入门



0

本使用说明教程主要翻译整理自 Prophet 的官方说明文档之 “简易入门”

教程中使用的数据集可在 Prophet 的 github 主页 中的 examples 文件夹 内下载得到。

Python 中的应用程序接口

Prophet 遵循 sklearn 库建模的应用程序接口。我们创建了一个 Prophet 类的实例,其中使用了“拟合模型” fit 和“预测” predict 方法。

Prophet 的输入量往往是一个包含两列的数据框:dsyds 列(即日期戳)必须包含日期或者是具体的时间点。 y 列必须是数值变量,表示我们希望去预测的量。

下面实例中使用的是 佩顿 · 曼宁的维基百科主页 每日访问量的时间序列数据(2007/12/10 - 2016/01/20)。我们使用 R 中的 Wikipediatrend 包获取该数据集。这个数据集具有多季节周期性、不断变化的增长率和可以拟合特定日期(例如佩顿 · 曼宁的决赛和超级碗)的情况等 Prophet 适用的性质,因此可以作为一个不错的例子。(注:佩顿 · 曼宁为前美式橄榄球四分卫)

首先,我们导入数据,并且对 y 变量取对数变换。

1
2
3
4
# 在 Python 中载入所需库
import pandas as pd
import numpy as np
from fbprophet import Prophet
1
2
3
4
# 读入数据集,并对日访问量 y 取对数处理
df = pd.read_csv('./examples/example_wp_peyton_manning.csv')
df['y'] = np.log(df['y'])
df.head()


1_1

通过对一个 Prophet 对象进行实例化来拟合模型,任何影响预测过程的设置都将在构造模型时被指定。接下来,就可以使用 fit 方法代入历史数据集来拟合模型,拟合过程应当花费 1 - 5 秒。

1
2
3
# 拟合模型
m = Prophet()
m.fit(df);

预测过程则需要建立在包含日期 ds 列的数据框基础上。通过使用辅助的方法 Prophet.make_future_dataframe 来将未来的日期扩展指定的天数,得到一个合规的数据框。默认情况下,这样做会自动包含历史数据的日期,因此我们也可以用来查看模型对于历史数据的拟合效果。

1
2
3
# 构建待预测日期数据框,periods = 365 代表除历史数据的日期外再往后推 365 天
future = m.make_future_dataframe(periods=365)
future.tail()


1_2

predict 方法将会对每一行未来 future 日期得到一个预测值(称为 yhat )。如果你传入了历史数据的日期,它将会提供样本的模型拟合值。预测 forecast 创建的对象应当是一个新的数据框,其中包含一列预测值 yhat ,以及成分的分析和置信区间。

1
2
3
# 预测数据集
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()


1_3

通过 Prophet.plot 方法传入预测得到的数据框,可以对预测的效果进行绘图。

1
2
# 展示预测结果
m.plot(forecast);


1-4

如果想查看预测的成分分析,可以使用 Prophet.plot_components 方法。默认情况下,将展示趋势、年度效应和时间序列的周效应。如果之前包含了节假日,也会展示出来。

1
2
# 预测的成分分析绘图,展示预测中的趋势、周效应和年度效应
m.plot_components(forecast);


1-5

R 中的应用程序接口

在 R 中,Prophet 使用普通的模型拟合接口。Prophet 提供了一个 prophet 函数去拟合模型并且返回一个模型对象,可以对这个模型对象执行“预测”( predict )和“绘图”( plot )操作。

1
2
3
# 在 R 中载入包
library(prophet)
library(dplyr)

首先,我们从 example_wp_peyton_manning.csv 文件中读入数据集并构建一个变量储存数据集。就像在 Python 中的应用程序接口使用教程一样,该数据集分为两列: ds 储存的是日期, y 储存的是数值变量(注:对佩顿 · 曼宁维基百科主页日访问量取对数处理)。

1
2
3
# 读入数据集,并对日访问量 y 取对数处理
df <- read.csv('./examples/example_wp_peyton_manning.csv') %>%
mutate(y = log(y))


2-1

使用 prophet 函数去拟合模型,将历史数据集作为第一个参数,其余额外的参数将会控制 Prophet 如何拟合模型。

1
2
# 拟合模型
m <- prophet(df)

预测将会建立在一列包含日期 ds 的数据框基础上来预测指定日期的数据。 make_future_dataframe 函数使用模型对象和一段待预测的时期去构建一个相应的包含待预测日期的数据框。默认情况下,该函数将会自动包含历史数据的日期,因此可用来分析训练集的拟合效果。

1
2
3
# 构建待预测日期数据框,periods = 365 代表除历史数据的日期外再往后推 365 天
future <- make_future_dataframe(m, periods = 365)
tail(future)


2-2

如同 R 中拟合模型的步骤一样,使用通用的 predict 函数来预测数据。预测结果 forecast 对象是包含了预测值 yhat 的数据框,此外,还有其余的列用来储存估计的置信区间和季节因子。

1
2
3
# 预测数据集
forecast <- predict(m, future)
tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])


2-3

可通过模型和预测结果,使用通用的 plot 函数去展示预测结果。

1
2
# 展示预测结果
plot(m, forecast)


2-4

使用 prophet_plot_components 函数去展示预测中的趋势、周效应和年度效应。

1
2
# 预测的成分分析绘图,展示预测中的趋势、周效应和年度效应
prophet_plot_components(m, forecast)


2-5

注: Windows 系统语言设置为中文的话,会导致 R 输出成分分析图时,周效应无法正常显示,可在 R 中使用下列代码将环境改为英文:

1
Sys.setlocale("LC_ALL","English")

转载请注明来自 Vector Blog



当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器