Facebook开源大规模预测工具Prophet:支持Python和R

简介:

近日,Facebook 宣布开源了一个可以通过 Python 和 R 语言使用的预测工具 Prophet。以下是 Facebook 研究博客对该工具的介绍。

预测(forecasting)是一个数据科学问题,也是很多组织机构内许多活动的核心。比如说,像 Facebook 这样的大型组织必须进行能力规划(capacity planning)以有效地分配稀缺资源和目标配置,以便能基于基准对业绩表现进行测量。不管是对于机器还是对于分析师而言,得出高质量的预测都并非易事。我们已经在创建各种各样的业务预测(business forecasts)的实践中观察到了两大主要主题:

  • 完全自动化的预测技术可能会很脆弱,而且往往非常不灵活,不能整合有用的假设或启发。
  • 能够产生高质量预测的分析师相当少,因为预测是一种需要大量经验的数据科学领域的专业技能。

这两个主题会导致一个结果:对高质量预测的需求往往超出分析师能够得出的预测速度。这个情况是我们创造 Prophet 的动力:我们想要让专家和非专家都能轻松地做出高质量的预测来满足自身的需求。

对于「规模(scale)」的通常考虑涉及到计算和存储,但这些都不是预测的核心问题。我们发现预测大量时间序列(time series)的计算和基础设施问题是相对简单的——通常这些拟合过程可以很容易地并行化,而预测本身也能容易地被存储在 MySQL 这样的关系数据库或 Hive 这样的数据仓库中。据我们观察,「规模」在实践中面临的问题涉及的是由多种预测问题所引入的复杂性(complexity)和在得出预测后如何在大量预测结果中构建信任(trust)。Prophet 已经成为了 Facebook 创建大量可信预测的能力的关键组成部分,这些预测可被用于决策制定甚至用在产品功能中。

Prophet 有什么用?

并非所有的预测问题都可以通过同一种程序(procedure)解决。Prophet 是为我们在 Facebook 所遇到的业务预测任务而优化的,这些任务通常具有以下特点:

  • 对于历史在至少几个月(最好是一年)的每小时、每天或每周的观察
  • 强大的多次的「人类规模级」的季节性:每周的一些天和每年的一些时候
  • 事先知道的以不定期的间隔发生的重要节假日(如,超级碗)
  • 合理数量的缺失的观察或大量异常
  • 历史趋势改变,比如因为产品发布或记录变化
  • 非线性增长曲线的趋势,其中有的趋势达到了自然极限或饱和

我们发现默认设置的 Prophet 能产生往往和经验丰富的预测师得到的一样准确的预测,而所花费的工作却更少。使用 Prophet,如果该预测不令人满意,你也不用局限于一个完全自动化的程序——即使一个没有接受过任何时间序列方法训练的分析师也能够使用各种各样的可轻松解读的参数来改进或调整预测。我们已经发现:通过在特定案例上将自动化预测和分析师参与的预测(analyst-in-the-loop forecasts)结合到一起,它有可能可适用于非常大范围的业务用例。下图给出了我们发现的可以大规模使用的预测过程:

Facebook开源大规模预测工具Prophet:支持Python和R

对于该预测过程的建模阶段,目前仅有有限数量的工具可用。Rob Hyndman 的出色的预测 R 语言的预测软件包(http://robjhyndman.com/software/forecast/)可能是目前最受欢迎的选择,而且谷歌和 Twitter 也都分别发布了带有更加特定的时间序列功能的软件包——CausalImpact(https://google.github.io/CausalImpact/)和 AnomalyDetection(https://github.com/twitter/AnomalyDetection)。就我们所知,在使用 Python 的预测上,还少有开源的软件包可用。

我们常常在许多设置中使用 Prophet 作为预测(forecast)软件包的替代,因为其有如下两个主要优点:

Prophet 让我们可以更加简单直接地创建合理且准确的预测。该预测包包含了许多不同的预测技术(比如 ARIMA、指数平滑等),其中每一个都有它们自己的长处、短处和调整参数。我们发现错误的模型或参数选择往往会导致糟糕的结果,而在这样的选择阵列下,即使是经验丰富的分析师也不太可能能够有效地选择出正确的模型和参数。

Prophet 预测可以通过对非专家而言很直观的方式进行自定义。有关于季节性的平滑参数让你能调整与历史周期之间的接近程度,以及关于趋势的平滑参数让你能调整跟随历史趋势变化的激进程度。对于增长曲线而言,你可以手动设定「capacity」或增长曲线的上限,这能让你注入关于你预测的增长或下降情况的先验信息。最后,你还可以为模型指定没有规律的节假日,比如超级碗、感恩节和黑色星期五的日期。

Prophet 如何工作

本质上讲,Prophet 程序是一个可加性回归模型(additive regression model),它包含 4 个主要组件:

  • 分段线性或者 logistic 增长曲线趋势。通过从数据中选择变化点,Prophet 自动探测趋势变化。
  • 使用傅立叶级数建模每年的季节分量。
  • 使用虚变量(dummy variables)的每周的季节分量。
  • 用户提供的重要节假日列表。

例如,下面是一个特征预测:使用 wikipediatrend 包(https://cran.r-project.org/web/packages/wikipediatrend/index.html)下载的 Peyton Manning 的维基百科页面的查看数量的日志。由于 Peyton Manning 是一名美式橄榄球运动员,你可以看到他每年季节性的重要程度变化,同时每周的周期性也明显存在。最后你看到特定事件(比如他参加的季后赛)也可能被建模了。

Facebook开源大规模预测工具Prophet:支持Python和R

Prophet 将提供一个组分图,用图形描述它所拟合的模型:

Facebook开源大规模预测工具Prophet:支持Python和R

这个组分图更加清晰地展示了与浏览 Peyton Manning 的网页(橄榄球常规赛与季后赛)相关的每年的季节性,以及每周的季节性:(星期日和星期一)比赛当天和比赛之后有更多的访问。你也可以注意到趋势组件自他最近退休以来的下行调整。

Prophet 的重要思想是:通过更好地灵活拟合趋势组分,我们可以更精确地建模季节性,并且有更准确的预测结果。对于这个任务我们更喜欢使用非常灵活的回归模型(有一点像曲线拟合)而不是传统的时序模型,因为前者可以使我们建模更灵活,更容易拟合模型,更优雅地处理丢失数据或离群值。

通过模拟时间序的未来趋势变化,Prophet 默认地会为趋势组分提供不确定的间隔。如果你希望对未来季节性或假期影响的不确定性进行建模,你可以运行数百个 HMC 迭代(花费几分钟),你的预测就将会包括季节性不确定评估。

我们使用 Stan(http://mc-stan.org/)调整 Prophet 模型,并在 Stan 的概率编程语言中实现了 Prophet 流程的核心部分。Stan 对参数的 MAP 优化有着极快的速度( 1 秒),让我们可以选择使用 Hamiltonian Monte Carlo 算法评估不确定的参数,也使得我们能够在多种接口语言上重复使用该拟合程序。目前,我们提供了 Python 和 R 语言的 Prophet 实现。它们有着几乎相同的特征,而且通过提供这两种实现,我们希望该预测方法能够在数据科学社区有更广泛的用途。





本文作者:佚名
来源:51CTO
目录
相关文章
|
4天前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
80 61
Python装饰器实战:打造高效性能计时工具
|
9天前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
60 37
Python时间序列分析工具Aeon使用指南
|
14天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
1月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
405 7
|
机器学习/深度学习 算法 决策智能
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
226 0
|
缓存 数据可视化 测试技术
开源多年后,Facebook这个调试工具,再登Github热门榜
让许多工程师合作开发大型应用大多会面临一个挑战,通常没有一个人知道每个模块是如何工作的,这种技能会让开发新功能、调查Bug或优化性能变得困难,为了解决这个问题,Facebook创建并开源了Flipper,一个可扩展的跨平台的调试工具,用来调试 iOS 和 Android 应用。近日又双叒登上了Github热榜。
|
前端开发 JavaScript 测试技术
Facebook 开源可扩展文本编辑器 Lexical
Meta(原 Facebook)近日开源可扩展文本编辑器 Lexical,源代码托管在 GitHub 上采用 MIT 许可证。
562 0
Facebook 开源可扩展文本编辑器 Lexical
|
XML jenkins Java
Facebook开源静态代码分析工具Infer介绍
Infer是Facebook公司的一个开源的静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,用于发现潜在的问题。其作用类似于sonar和fortify。Infer更倾向于发现代码中的空指针异常、资源泄露以及内存泄漏的问题。
Facebook开源静态代码分析工具Infer介绍
|
机器学习/深度学习 人工智能 文字识别
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分
近日,Facebook的AI研究院发表了一篇论文「DIFFERENTIABLE WEIGHTED FINITE-STATE TRANSDUCERS」,开源了用于图网络建模的GTN框架,操作类似于PyTorch这种传统的框架,也可以进行自动微分等操作,大大提高了对图模型建模的效率。
368 0
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分
|
移动开发 Java 程序员
Facebook 将神奇动画引擎 Pop 开源了!
Facebook 2月发布的新闻类应用Paper,因为其灵动的用户界面和交互,成为近来最令人眼前一亮的移动产品之一。 而这个产品的背后是2011年Facebook收购的Push Pop Press,创始人是分别在Apple任设计师和工程师的Mike Matas与Kimon Tsinteris。他们的合作者还有传奇人物Bret Victor。他们为美国前副总统Al Gore开发的电子书Our Choice当时就曾技惊四座。
358 0
Facebook 将神奇动画引擎 Pop 开源了!