当前位置: 首页 > 科技观察

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

时间:2023-03-20 11:56:38 科技观察

近日,Facebook宣布开源了一款可在Python和R语言中使用的预测工具Prophet。以下是Facebook研究博客对该工具的介绍。预测是一个数据科学问题,是许多组织中许多活动的核心。例如,像Facebook这样的大型组织必须进行容量规划,以有效地分配稀缺资源和目标分配,以便可以根据基准来衡量绩效。生成高质量的预测对于机器或分析师来说都不是一件容易的事。在创建各种业务预测的实践中,我们观察到两个主要主题:完全自动化的预测技术可能很脆弱,而且通常太不灵活,无法结合有用的假设或启发式方法。能够做出高质量预测的分析师相对较少,因为预测是数据科学领域的一项专业技能,需要大量经验。这两个主题导致了一个结果:对高质量预测的需求往往超过了分析师做出预测的速度。这种情况是我们创建Prophet的动机:我们希望让专家和非专家都能轻松地针对自己的需求做出高质量的预测。“规模”的通常考虑因素涉及计算和存储,但这些都不是预测的核心。我们发现,预测大量时间序列的计算和基础设施问题相对简单——通常这些拟合过程可以很容易地并行化,并且预测本身可以很容易地存储在关系数据库(如MySQL)或数据仓库(如作为蜂巢。根据我们的观察,“尺度”在实践中面临的问题涉及多个预测问题引入的复杂性,以及预测做出后如何在大量预测结果之间建立信任。Prophet已成为Facebook创建大量可信预测的能力的关键组成部分,这些预测可用于决策制定甚至产品功能。先知有什么用?并非所有的预测问题都可以通过相同的过程来解决。Prophet针对我们在Facebook遇到的业务预测任务进行了优化,这些任务通常具有以下特点:强大的每小时、每天或每周的观察,至少有几个月(***一年)的历史多个“人类尺度”季节性:一周中的某些天和一年中的某些时间提前已知在重大节日(例如超级碗)的不规则间隔内发生合理数量的缺失观测值或大量异常历史趋势变化,例如因为产品发布或记录变化非线性增长曲线的趋势,其中一些达到其自然极限或饱和工作。有了Prophet,如果预测不尽人意,您就不会局限于完全自动化的程序——即使是没有接受过时间序列方法培训的分析师也可以使用各种易于解释的参数来改进或调整预测。我们发现,通过将自动化预测与特定案例中的分析师在环预测相结合,它有可能适用于非常广泛的业务用例。下图显示了我们发现可大规模使用的预测过程:对于此预测过程的建模阶段,目前可用的工具数量有限。RobHyndman在R中出色的预测包(http://robjhyndman.com/software/forecast/)可能是目前最好的选择,Google和Twitter都发布了单独的序列函数包-CausalImpact(https://google.github.io/CausalImpact/)和异常检测(https://github.com/twitter/AnomalyDetection)。据我们所知,很少有开源包可用于使用Python进行预测。我们经常在许多设置中使用Prophet作为预测包的替代方案,因为它有两个主要优点:Prophet使我们能够更简单直接地创建合理准确的预测。预测包包含许多不同的预测技术(例如ARIMA、指数平滑等),每种技术都有自己的优点、缺点和调整参数。我们发现,错误的模型或参数选择通常会导致糟糕的结果,而面对如此多的选择,即使是经验丰富的分析师也不太可能有效地选择正确的模型和参数。Prophet预测可以通过非专家直观的方式进行定制。季节性平滑参数允许您调整与历史周期的接近程度,趋势平滑参数允许您调整您遵循历史趋势的积极程度。对于增长曲线,您可以手动设置增长曲线的“容量”或上限,这允许您注入有关您预测的增长或下降的先验信息。***,您还可以为模型指定不规则的假期,例如超级碗、感恩节和黑色星期五的日期。Prophet的工作原理从本质上讲,Prophet程序是一个加性回归模型,具有4个主要组成部分:分段线性或逻辑增长曲线趋势。Prophet通过从数据中选择变化点自动检测趋势变化。使用傅里叶级数对每年的季节性成分进行建模。使用虚拟变量的每周季节性成分。用户提供的重要假期列表。例如,这里有一个特征预测:使用wikipediatrend包(https://cran.r-project.org/web/packages/wikipediatrend/index.html)下载的PeytonManning的维基百科页面的浏览量日志。由于PeytonManning是一名美式足球运动员,您可以看到他每年的季节性变化的重要性,而每周的周期性也很明显。***你看到某些事件(比如他参加的季后赛)也可能被建模。Prophet将提供一个组件图,以图形方式描述它适合的模型:该组件图更清楚地显示与浏览PeytonManning网页相关的年度季节性(足球常规赛与季后赛),以及每周季节性:(周日和周一)更多访问比赛日和比赛后。您还可以注意到自他最近退休以来趋势成分的向下调整。Prophet的重要思想是:通过更好地灵活拟合趋势成分,我们可以更准确地对季节性进行建模,得到更准确的预测结果。对于这个任务我们更愿意使用非常灵活的回归模型(有点像曲线拟合)而不是传统的时间序列模型,因为前者可以让我们的建模更灵活,更容易拟合模型,更优雅地处理缺失数据或异常值。通过模拟时间序列中的未来趋势变化,Prophet默认为趋势分量提供不确定的区间。如果您希望对未来季节性或假日影响的不确定性进行建模,您可以运行数百次HMC迭代(这需要几分钟)并且您的预测将包括季节性不确定性估计。我们使用Stan(http://mc-stan.org/)调整了Prophet模型,并使用Stan的概率编程语言实现了Prophet管道的核心部分。Stan极快的MAP参数优化(1秒)使我们可以选择使用哈密顿蒙特卡罗算法来评估不确定参数,还允许我们在多种界面语言上重用拟合程序。目前,我们在Python和R中提供Prophet实现。它们具有几乎相同的特征,并且通过提供这两种实现,我们希望预测方法能够在数据科学社区中得到更广泛的应用。