文章目录
自2017年Sean Taylor和Ben Letham开源Prophet以来,它一直是预测时间序列的流行工具,特别是在我们希望对人类活动和消费建模的商业和规划环境中(例如,网站流量、视频观看小时数)。
截至2023年1月,通过PyPI的下载次数已经超过了1600万次,而且每月的下载量仍将保持在100万次。然而,老用户会意识到,在过去的几年里,发布速度已经放慢了。在这篇文章中,我们将介绍我们对该方案的未来计划,以及我们如何设想它与预测生态系统的其余部分相匹配。
一、摘要
未来关于先知的工作将主要集中在:
- 易于安装和与集成:如 sktime 和分析服务
- 提升运行时稳定性
- 更清晰的文档:不同类型时间序列的参数选择、案例研究和性能基准
我们不打算对底层模型进行大的更改。Prophet的优势保持不变–分析师在环预测器,具有人类可解释的参数,易于应用于业务分析用例。
但我们鼓励任何寻求预测前沿创新的人,尝试别的库,比如 NeuralProphet 和Nixtla/statsforecast 等。
二、Seamless installation and integration 无缝安装和集成
2021年末,Zillow受到Twitter数据科学界的抨击,原因是他们被认为依赖Prophet预测房价(预测为Zillow提供的买入/卖出决策提供了依据,这一举措导致公司损失3亿美元,最终被关闭)。对我来说,一句难忘的话(来自这篇深思熟虑的博客文章)是
Prophet is very convenient because it’s hard to beat pip install prophet into from prophet import Prophet into Prophet().fit(df)
-如果有人真的在第一次尝试时就成功地使用了这些命令,我会印象深刻的!
在V1.1之前,pip install prophet 实际上在最终用户的机器上启动了一个「构建项目的过程」,这需要PyStan(Stan是用于适应底层模型的概率编程语言)和兼容的C++工具链(例如,MacOS的Xcode)。这导致了很多关于先决条件的混乱,错误消息因机器而异,因此很难调试–总的来说,对于一般的数据科学家来说,这是一种糟糕的安装体验。
依赖于Prophet的包装包还必须绑定到旧版本的PyStan和Prophet上,测试升级到新版本是否安全并不简单。
在开源社区的帮助下,我们在 pypi 提供二进制发行版,这样用户实际上就可以运行 pip install prophet。要做到这一点,有几个步骤:
- 我们将后端从 PyStan 替换为 CmdStanPy,这是一个核心Stan库(称为CmdStan)的轻量级Python接口。构建完成后,只要有一个名为 TBB 的数学链接库,就可以按原样使用stan可执行文件。我们的想法是,如果我们将这些可执行文件、tbb和Prophet的已编译Stan代码保存在包中,最终用户就可以运行.fit(),而不需要编译任何C++代码。
- 我们扩展了 setuptools 中的构建命令以实现上述功能,在构建过程中添加了以下步骤:下载并安装CmdStan,编译Prophet模型,然后将1 GB的CmdStan文件夹修剪为不到20MB的必要可执行文件和tbb库。经过几次迭代才得到了一个全面的(即覆盖所有操作系统)但简洁的实现,我们感谢Stan开发团队,特别是Brian Ward,他们在这里提供了指导。
- 最后,我们使用 cibuildwheel 和 Github Actions 在CI机器上运行构建过程,涵盖所有主要操作系统和Python版本。
将二进制发行版上传到PyPI后,立即对安装体验产生了积极影响。以下是 Prophet 的Github问题随时间的图表,按所问问题的类型分类。平均每两个月我们就会看到8个与安装Python相关的问题,而在Prophet V1.1发布后,这个问题减少了一半。
我们将继续发展我们的构建过程,以符合现代的Python打包标准:最近,我们遵循了 Bokeh 的 setup.py 重构(Bokeh需要一个Java运行时来生成交互式可视化,类似于Prophet所需的Stan运行时),并创建了与版本无关的Python轮子,让用户可以自由使用更新的Python版本(这是可能的,因为编译和执行Stan模型不依赖于Python内部)。
这些努力不仅将使最终用户能够快速入门,还意味着更容易与 sktime 和 Kats 等库以及 Snowflake 和 Databricks 等服务集成。
三、Polishing existing applications, rather than introducing new methods 改进现有应用程序,而不是引入新方法
最初的Prophet模型设计了几个核心组件:
- 含 changepoints 的分段线性趋势
- 多季节性
- exogenous regressors(外生回归变量)
- 可调整的参数
这些参数都有默认值,也可以允许用户再微调参数。
这是对人类行为产生的大多数时间序列的良好概括:
- shocks(冲击)和non-stationarity(非平稳性)可以通过灵活的 trend component(趋势分量)来捕捉
- day-of-week 和 day-of-year seasonality 可以通过组合多个傅立叶序列来捕捉
- holiday effects 可以作为 binary regressors (二元回归变量)来捕捉。
自最初发布以来,几个主要的变化帮助涵盖了更大范围的时间序列模式:
- multiplicative seasonality(乘性季节性),而不是累加性季节性
- regressor components(回归分量)
- 允许 seasonality(季节性)和 regressors(回归因子)决定预测的 flat trend(平坦趋势)。
虽然目前已经有了对该模型进行进一步改进的想法,但目前我们暂不打算对基础 stan 模型进行任何更改。这些想法中的许多可能是有用的
- 比如允许 y 的不同误差分布
- 或者模型参数的不同先验分布
但像 NeuralProphet 和 Orbit 这样的库,在设计时就考虑到了这种类型的可扩展性,而不像Prophet。我们还预计,时间序列预测的创新,将通过这些新的库而不是 Prophet 来实现。
相反,我们将专注于解决现有功能中的缺陷,这应该有助于那些目前在现实世界中使用 Prophet 的人。一些例子包括:
- 通过将我们的定制数据与 holidays 库合并,使假日数据保持最新,这也意味着随着新版本假日的发布,将更好地覆盖国家和分区。
- 在交叉验证和不确定度估计过程中,正确处理 extra regressors(额外的回归变量)。在生成预测时,额外的回归变量目前被假定为已知量,这对假日指标有效,但不适用于需要估计的数量。
- Patching negative predictions for positive-valued time series(修补正值时间序列的负预测)。
运行时优化也可以在生产流程中提供很大的帮助,通常情况下,适合不同的模型并针对不同的数据片段生成预测。
- V1.1.1版本中的一大特性是将用于计算不确定性区间的模拟矢量化,这使 .recast() 的速度提高了至少一个数量级。这都要归功于这项初步研究。
- 在未来的版本中,我们将引入 NumPyro 作为另一种概率编程语言后端,对于更长的历史数据集,它的.fit()速度要快得多,特别是在需要 MCMC 采样的情况下。
四、Education and documentation 文档
有关故障排除预测、了解不同参数如何影响模型,以及添加自定义季节性回归变量的问题,是Github问题中最常见的类型,占过去六个月报告问题的50%。
虽然我们已经有了基本的文档,但有机会用更多的案例研究来扩展这些文档(我们最近增加了一个案例研究,用于处理新冠封锁造成的系统性变化),并深入探讨如何通过参数选择来表示对时间序列的先前信念。毕竟,Prophet是用来与“圈内分析师”一起使用的,与其他算法相比,它的优势之一是具有可解释、可调整的参数,详见原始论文。
一些基准研究:microprediction、NIXTLA/STATSFOREST) 也表明,对于具有某些特征的时间序列,PROPHET的默认设置导致预测精度较差。
我们真的很喜欢这项研究,并认为在我们自己的文档中提供关于Prophet的亮点(在准确性方面),以及其他技术在哪里表现更好的清晰度是很重要的。
已经有了标准化的基础设施(例如 sktime),和数据集(例如用于时间序列基准的 https://forecastingdata.org/))的努力,我们将为这些计划做出贡献,最终目的是引导最终用户找到适合他们用例的正确工具。
六、其他预测库
基础设置:sktime
公开预测数据集:https://forecastingdata.org/
其他预测库:https://github.com/uber/orbit
- statsforecast, and other packages from the Nixtla group such as hierarchicalforecast and neuralforecast.
- NeuralProphet, a Prophet-style model implemented in PyTorch, to be more adaptable and extensible.
这些github存储库提供了在Prophet之上构建的示例,可能会引起广泛的兴趣:
- forecastr: A web app that provides a UI for Prophet.