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
安装包。