Prophet: 自动预测程序
2023年更新: 我们在这篇博文中讨论了Prophet未来的计划: 2023年及以后的facebook/prophet
Prophet是一种基于加法模型的时间序列数据预测程序,该模型拟合非线性趋势,并考虑了年、周、日的季节性以及节假日效应。它最适用于具有强烈季节性效应且有多个季度历史数据的时间序列。Prophet对缺失数据和趋势变化具有鲁棒性,通常能很好地处理异常值。
Prophet是由Facebook的核心数据科学团队发布的开源软件。可在CRAN和PyPI上下载。
重要链接
- 主页: https://facebook.github.io/prophet/
- HTML文档: https://facebook.github.io/prophet/docs/quick_start.html
- 问题追踪: https://github.com/facebook/prophet/issues
- 源代码仓库: https://github.com/facebook/prophet
- 贡献指南: https://facebook.github.io/prophet/docs/contributing.html
- Prophet R包: https://cran.r-project.org/package=prophet
- Prophet Python包: https://pypi.python.org/pypi/prophet/
- 发布博文: https://research.facebook.com/blog/2017/2/prophet-forecasting-at-scale/
- Prophet论文: Sean J. Taylor, Benjamin Letham (2018) 大规模预测. The American Statistician 72(1):37-45 (https://peerj.com/preprints/3190.pdf).
在R中安装 - CRAN
⚠️ CRAN上的Prophet版本相当过时。为获取最新的bug修复和更新的国家假日数据,我们建议安装最新版本。
Prophet是一个CRAN包,因此您可以使用install.packages
安装。
install.packages('prophet')
安装后,您可以开始使用了!
在R中安装 - 最新版本
install.packages('remotes')
remotes::install_github('facebook/prophet@*release', subdir = 'R')
实验性后端 - cmdstanr
您还可以选择一个名为cmdstanr
的实验性替代stan后端。安装prophet
后,按照以下说明使用cmdstanr
而不是rstan
作为后端:
# R
# 我们建议在新的R会话中运行此操作或重新启动当前会话
install.packages(c("cmdstanr", "posterior"), repos = c("https://mc-stan.org/r-packages/", getOption("repos")))
# 如果您之前没有安装过cmdstan,请运行:
cmdstanr::install_cmdstan()
# 否则,您可以将cmdstanr指向您现有的cmdstan路径:
cmdstanr::set_cmdstan_path(path = <您现有的cmdstan路径>)
# 设置R_STAN_BACKEND环境变量
Sys.setenv(R_STAN_BACKEND = "CMDSTANR")
Windows
在Windows上,R需要一个编译器,因此您需要按照rstan
提供的说明进行操作。关键步骤是在尝试安装软件包之前安装Rtools。
如果您有自定义的Stan编译器设置,请从源代码安装而不是使用CRAN二进制文件。
在Python中安装 - PyPI发布版
Prophet在PyPI上可用,因此您可以使用pip
安装它。
python -m pip install prophet
- 从v0.6开始,不再支持Python 2。
- 从v1.0开始,PyPI上的包名为"prophet";在v1.0之前是"fbprophet"。
- 从v1.1开始,支持的最低Python版本为3.7。
安装后,您可以开始使用了!
Anaconda
Prophet也可以通过conda-forge安装。
conda install -c conda-forge prophet
在Python中安装 - 开发版本
要获取最新的代码更改,您可以克隆此仓库并手动从源代码构建。这不保证是稳定的。
git clone https://github.com/facebook/prophet.git
cd prophet/python
python -m pip install -e .
默认情况下,Prophet将使用cmdstan
的固定版本(如有必要会下载并安装)来编译模型可执行文件。如果不希望这样做,并且想使用您自己现有的cmdstan
安装,可以将环境变量PROPHET_REPACKAGE_CMDSTAN
设置为False
:
export PROPHET_REPACKAGE_CMDSTAN=False; python -m pip install -e .
Linux
确保已安装编译器(gcc, g++, build-essential)和Python开发工具(python-dev, python3-dev)。在Red Hat系统中,安装gcc64和gcc64-c++包。如果您使用的是虚拟机,请注意安装prophet至少需要4GB内存,使用prophet至少需要2GB内存。
Windows
在Windows上使用cmdstanpy
需要一个类Unix的C编译器,如mingw-gcc。如果先安装了cmdstanpy,可以通过cmdstanpy.install_cxx_toolchain
命令安装一个。
更新日志
版本1.1.5 (2023.10.10)
Python
- 升级 cmdstan 版本至 2.33.1,支持 Apple M2。
- 为 macOS arm64 架构(M1、M2 芯片)添加预构建的 wheel 包。
- 在
Prophet()
实例化中添加了scaling
参数。允许对y
进行minmax
缩放,而非absmax
缩放(除以最大值)。默认为scaling='absmax'
,保持与之前版本一致的行为。 - 在
Prophet()
实例化中添加了holidays_mode
参数。允许假日回归器采用与季节性回归器不同的模式。如未指定,holidays_mode
与seasonality_mode
取相同值,保持与之前版本一致的行为。 - 在
Prophet
对象中添加了两个方法:preprocess()
和calculate_initial_params()
。无需手动调用这些方法,它们不会改变模型拟合过程。其目的是在数据传递给 stan 模型之前,清晰展示预处理步骤(y
缩放、创建傅里叶级数、回归器缩放、设置变点等)。 - 在
cross_validation()
中添加了extra_output_columns
参数。用户可以指定predict()
中的额外列,在最终输出中与ds
和yhat
一起包含,例如extra_output_columns=['trend']
。 - prophet 的自定义
hdays
模块在上一版本中已弃用,现已移除。
R
- 基于 holidays 版本 0.34 更新了
holidays
数据。
版本 1.1.4 (2023.05.30)
Python
- 现在仅依赖
holidays
包处理国家假日。 - 升级 cmdstan 版本至 2.31.0,支持 Apple M1。
- 修复了由长路径导致的 Windows 安装问题。
R
- 基于 holidays 版本 0.25 更新了
holidays
数据。
版本 1.1.2 (2023.01.20)
Python
- 通过移除中间 DataFrame 创建,将
.predict()
速度提升至多 10 倍。 - 加速傅里叶级数生成,使
train()
和predict()
流程至少提速 1.5 倍。 - 修复了读取热启动值的错误。
- wheel 包现在与版本无关。
R
- 修复了
construct_holiday_dataframe()
中的错误。 - 基于 holidays 版本 0.18 更新了
holidays
数据。
版本 1.1.1 (2022.09.08)
- (Python) 通过向量化改进了不确定性预测的运行时间(3-7倍)。
- 修复了与 Python 包版本和 R 假日对象相关的错误。
版本 1.1 (2022.06.25)
- 将
pystan2
依赖替换为cmdstan
+cmdstanpy
。 - 为 Python 包预打包模型二进制文件,将二进制发行版上传至 PyPI。
- 改进了
stan
模型代码、交叉验证度量计算和假日处理。
版本 1.0 (2021.03.28)
- Python 包名从 fbprophet 更改为 prophet。
- 修复 R Windows 构建问题,使最新版本重新上传至 CRAN。
- 改进了序列化、假日处理和 R 时区处理。
- 改进了绘图功能。
版本 0.7 (2020.09.05)
- 内置 json 序列化。
- 添加了"平坦"增长选项。
- 修复了与
holidays
和pandas
相关的错误。 - 改进了绘图功能。
- 改进了交叉验证,如并行化和直接指定截止点。
版本 0.6 (2020.03.03)
- 修复了与
holidays
和pandas
包上游变更相关的错误。 - 在首次使用时编译模型,而非安装时(符合 CRAN 政策)。
- Python 中现可使用
cmdstanpy
后端。 - 不再支持 Python 2。
版本 0.5 (2019.05.14)
- 条件季节性。
- 改进了交叉验证估计。
- Python 中添加了 Plotly 绘图。
- 错误修复。
版本 0.4 (2018.12.18)
- 添加了假日功能。
- 错误修复。
版本 0.3 (2018.06.01)
- 乘法季节性。
- 交叉验证错误度量和可视化。
- 设置潜在变点范围的参数。
- 两种趋势类型的统一 Stan 模型。
- 改进了亚日数据的未来趋势不确定性。
- 错误修复。
版本 0.2.1 (2017.11.08)
- 错误修复。
版本 0.2 (2017.09.02)
- 支持亚日数据预测。
- 日季节性和自定义季节性。
- 额外回归变量。
- 访问后验预测样本。
- 交叉验证函数。
- 饱和最小值。
- 错误修复。
版本 0.1.1 (2017.04.17)
- 错误修复。
- 检测年度和周度季节性的新选项(现为默认)。
版本 0.1 (2017.02.23)
- 初始发布。
许可证
Prophet 基于 MIT 许可证。