Prophet 使用简介

2019-04-20 linux database

Facebook 提供的 Prophet 算法主要是用来处理单变量的时间序列,对于一些异常数据以及确实的情况可以很好的处理,对于周期性的数据几乎可以全自动地预测未来的走势。

这里简单介绍其使用方法。

简介

该算法是基于时间序列分解以及机器学习的拟合完成,其中的拟合采用 Stan 实现,同时提供了 R 以及 Python 的接口。

安装

Linux

依赖一些基本的包,例如 pandas matplotlib numpy,其它的一些包可以通过 virtualenv 进行独立的安装。

----- 准备虚拟环境
$ virtualenv prophet --python=python3.6
$ source prophet/bin/activate

其中部分库,例如 ephem 需要 Python 头文件,因此需要安装 python36-devel

----- 安装依赖库
$ pip3 install pystan fbprophet

Windows

在 Windows 上建议使用 Anaconda 安装,可以从 Anaconda Distribution 下载相关的安装包。

Anaconda 是一个 Python 的发行版本,包括了一个跨平台的包管理工具 Conda,常用于一些数据分析场景中的环境准备,可以很好的解决依赖,尤其是像 numpy scipy 这种对底层 C 库有依赖的包管理。

可以通过如下命令使用。

----- 创建一个Prophet的基本环境,可以激活、退出、查看包、删除
conda create --name prophet python=3.7
conda activate prophet
conda deactivate
conda list --name prophet
conda remove --name prophet --all

创建的环境会保存在安装目录的 envs 目录下,每个环境作为一个单独的目录保存。

----- 安装相关的依赖
conda install pystan
conda install -c conda-forge fbprophet

示例

GitHub FaceBook 中提供了相关的示例,这里采用 example_wp_log_peyton_manning.csv 进行简单的测试。

Prophet()              fbprophet/forecaster.py
predict_trend()
 |-piecewise_linear()
 |-piecewise_logistic()

其它

异常

在安装相关的版本库时,可能会遇到如下的报错。

PyStan

在安装 pystan 时会出现 error: command 'gcc' failed with exit status 1 的报错,此时需要确保 libffi-devel python-devel openssl-devel 开发库已经安装。

安装完成之后,可以通过如下的代码进行测试。

import pystan

model_code = 'parameters {real y;} model {y ~ normal(0,1);}'
model = pystan.StanModel(model_code=model_code)  # this will take a minute
y = model.sampling(n_jobs=1).extract()['y']
y.mean()                                         # should be close to 0

FBProphet

该库对 pystan 的版本也有依赖,目前看支持的版本有 2.17.1.0 ,可以通过如下方式安装。

$ pip3 uninstall pystan
$ pip3 install pystan==2.17.1.0

在导入时可能会报错 Importing plotly failed. Interactive plots will not work.,那么此时就需要安装 plotly 包。

$ pip3 install plotly

在 Windows 中,可以直接通过 conda install plotly 安装包。