Facebook/Prpphet 在2023年及以后
自2017年Sean Taylor和Ben Letham开源Prophet以来,它一直是预测时间序列的流行工具,特别是在我们希望对人类活动和消费建模的商业和规划环境中(例如,网站流量、视频观看小时数)。
截至2023年1月,通过PyPI的下载次数已经超过了1600万次,而且每月的下载量仍将保持在100万次。然而,老用户会意识到,在过去的几年里,发布速度已经放慢了。在这篇文章中,我们将介绍我们对该方案的未来计划,以及我们如何设想它与预测生态系统的其余部分相匹配。
未来关于先知的工作将主要集中在:
我们不打算对底层模型进行大的更改。Prophet的优势保持不变–分析师在环预测器,具有人类可解释的参数,易于应用于业务分析用例。
但我们鼓励任何寻求预测前沿创新的人,尝试别的库,比如 NeuralProphet 和Nixtla/statsforecast 等。
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。要做到这一点,有几个步骤:
将二进制发行版上传到PyPI后,立即对安装体验产生了积极影响。以下是 Prophet 的Github问题随时间的图表,按所问问题的类型分类。平均每两个月我们就会看到8个与安装Python相关的问题,而在Prophet V1.1发布后,这个问题减少了一半。
我们将继续发展我们的构建过程,以符合现代的Python打包标准:最近,我们遵循了 Bokeh 的 setup.py 重构(Bokeh需要一个Java运行时来生成交互式可视化,类似于Prophet所需的Stan运行时),并创建了与版本无关的Python轮子,让用户可以自由使用更新的Python版本(这是可能的,因为编译和执行Stan模型不依赖于Python内部)。
这些努力不仅将使最终用户能够快速入门,还意味着更容易与 sktime 和 Kats 等库以及 Snowflake 和 Databricks 等服务集成。
最初的Prophet模型设计了几个核心组件:
这些参数都有默认值,也可以允许用户再微调参数。
这是对人类行为产生的大多数时间序列的良好概括:
自最初发布以来,几个主要的变化帮助涵盖了更大范围的时间序列模式:
虽然目前已经有了对该模型进行进一步改进的想法,但目前我们暂不打算对基础 stan 模型进行任何更改。这些想法中的许多可能是有用的
但像 NeuralProphet 和 Orbit 这样的库,在设计时就考虑到了这种类型的可扩展性,而不像Prophet。我们还预计,时间序列预测的创新,将通过这些新的库而不是 Prophet 来实现。
相反,我们将专注于解决现有功能中的缺陷,这应该有助于那些目前在现实世界中使用 Prophet 的人。一些例子包括:
运行时优化也可以在生产流程中提供很大的帮助,通常情况下,适合不同的模型并针对不同的数据片段生成预测。
有关故障排除预测、了解不同参数如何影响模型,以及添加自定义季节性回归变量的问题,是Github问题中最常见的类型,占过去六个月报告问题的50%。
虽然我们已经有了基本的文档,但有机会用更多的案例研究来扩展这些文档(我们最近增加了一个案例研究,用于处理新冠封锁造成的系统性变化),并深入探讨如何通过参数选择来表示对时间序列的先前信念。毕竟,Prophet是用来与“圈内分析师”一起使用的,与其他算法相比,它的优势之一是具有可解释、可调整的参数,详见原始论文。
一些基准研究:microprediction、NIXTLA/STATSFOREST) 也表明,对于具有某些特征的时间序列,PROPHET的默认设置导致预测精度较差。
我们真的很喜欢这项研究,并认为在我们自己的文档中提供关于Prophet的亮点(在准确性方面),以及其他技术在哪里表现更好的清晰度是很重要的。
已经有了标准化的基础设施(例如 sktime),和数据集(例如用于时间序列基准的 https://forecastingdata.org/))的努力,我们将为这些计划做出贡献,最终目的是引导最终用户找到适合他们用例的正确工具。
基础设置:sktime
公开预测数据集:https://forecastingdata.org/
其他预测库:https://github.com/uber/orbit
这些github存储库提供了在Prophet之上构建的示例,可能会引起广泛的兴趣: