Facebook的数据预测缺陷管理工具 优势Prophet有何优势

点击阅读原文
Prophet(先知):Facebook大规模预报框架
3月1日 发布,来源:
新盆友点击上方蓝色“网路冷眼”订阅;老盆友点击右上分享
日前,Facebook 开源了Prophet,一个可用于 Python 和 R 编程语言的预测工具。预测是一个数据科学任务,是组织内许多活动的核心。例如,像Facebook这样的大型组织必须进行能力规划,以有效地分配稀缺的资源和目标设置,以便相对于基线测量性能。产生高质量的预测对于机器或大多数分析师来说并不是一个容易的问题。我们在创建各种业务预测的实践中观察到两个主要主题:
完全自动的预测技术可能很脆弱,并且往往太不灵活而无法纳入有用的假设或启发。
能够产生高质量预报的分析师是相当罕见的,因为预测是专业数据科学技能,需要大量经验积累。
这些主题的结果是对高质量预测的需求通常远远超过了分析师可以生成它们的速度。这个观察是我们建设Prophet的动机:我们希望让专家和非专家更容易做出与需求保持一致的高质量预测。
“规模”暗示的典型考虑,计算和存储,不仅仅关注预测。我们发现,预测大量时间序列的计算和基础设施问题相对简单 - 通常这些拟合过程很容易并行化,预测不难存储在关系数据库(如MySQL)或数据仓库(如Hive)中。
我们在实践中观察到的规模问题涉及由各种预测问题引入的复杂性,并且一旦已经产生,就在大量预测中建立信任。Prophet一直是提高Facebook的能力、建立用于决策、甚至在产品功能大量可信预测的关键。
Prophet 的亮点
不是所有的预测问题都可以通过相同的过程来解决。Prophet 针对我们在Facebook上遇到的业务预测任务进行了优化,这些任务通常具有以下特征:
每小时,每天或每周观察至少几个月(优选一年)的历史
强化的多重“人类规模”季节性:工作日和一年的时间
以预先知道的不规则间隔发生(例如超级碗)重要的节假日
合理数量的缺失观测值或大的异常值
历史趋势变化,例如由于产品启动或记录更改
趋势是非线性增长曲线,其中趋势达到自然极限或饱和
我们发现Prophet的默认设置产生的预测往往是准确的,如熟练的预报员所产生的预测那样,但所做的代价更少。使用 Prophet ,如果预测不令人满意,那么你不会在一个完全自动过程的结果面前止步不前- 没有经过时间序列方法训练的分析师可以使用各种易于解释的参数改进或调整预测。我们发现,针对特殊情况通过将自动预测与环路预测分析(analyst-in-the-loop)相结合,可以覆盖各种各样的业务用例。下图说明了我们发现大规模工作的预测过程:
对于预测过程的建模阶段,目前只有有限数量的工具可用。 Rob Hyndman 出色的 R 语言预测包可能是最受欢迎的选项,Google 和 Twitter 都发布了更具体的时间序列功能的包 - CausalImpac t和 AnomalyDetection。据我们所知,在 Python 中用于预测的开源软件包很少。
我们经常使用 Prophet 作为forecast包在许多设置中的替代,这是因为下面两个主要优点:
1.Prophet让创造一个合理、准确的预测更直截了当。预测包包括许多不同的预测技术(ARIMA,指数平滑等),每个都有自己的优势、弱点和调整参数。我们已经发现,选择错误的模型或参数通常可能产生不良结果,并且即使经验丰富的分析人员也不可能有效地选择正确的模型和参数。
2.Prophet预测可以对非专家来说直观的方式进行定制。有季节性的平滑参数,允许您调整适合历史周期的紧密程度,以及平滑趋势的参数,允许您调整如何主动跟踪历史趋势更改。对于增长曲线,您可以手动指定“容量”或增长曲线的上限,从而允许您注入自己的关于预测将如何增长(或下降)的先前信息。最后,您可以指定不规则的假日,如超级碗、感恩节和黑色星期五的日期。
Prophet 的工作原理
在其核心,Prophet程序是一个加性回归模型(additive regression model),包含四个主要部分:
分段线性或逻辑增长曲线趋势。 Prophet通过从数据中选择变化点来自动检测趋势变化。
使用傅里叶级数建模的年度季节分量。
使用虚拟变量的每周季节分量。
用户提供的重要节日列表。
例如,这里有一个特征预测:我们使用wikipediatrend包下载的Peyton Manning的Wikipedia页面的log-scale页面视图。由于 Peyton Manning是一个美式足球运动员,你可以看到每年的季节性比赛和重要的角色,而每周的周期性也明显存在。最后,你看到某些事件(如他出现的季后赛)也可以建模。
Prophet 将提供一个组件图,用图形描述它适合的模型:
这个图更清楚地显示了与浏览Peyton Manning的页面(足球赛季和季后赛)以及每周季节性相关的年度季节性:比赛日(星期日和星期一)和之后的访问增多。也可以注意到趋势组件自他最近退役以来的向下调整。
Prophet 的重要思想是,通过更灵活地配合趋势组件,我们更准确地模拟季节性,结果是预测更加准确。我们更喜欢使用非常灵活的回归模型(有点像曲线拟合),而不是传统的时间序列模型,因为它给我们更多的建模灵活性,更容易拟合模型,更加优雅地处理丢失的数据或离群值。
默认情况下,Prophet 将通过模拟您的时间序列的未来趋势变化为趋势组件提供不确定性区间。如果你想模拟未来季节性或假期效应的不确定性,你可以运行几百个HMC迭代(需要几分钟),你的预测将包括季节不确定性估计。
我们使用 Stan 匹配Prophet模型,并以Stan概率编程语言中实现了Prophet 过程的核心。 Stan对参数执行MAP优化非常快(&1秒),给出了使用哈密尔顿蒙特卡洛算法(Hamiltonian Monte Carlo algorithm)估计参数不确定性的选项,并允许我们在多种接口语言中重复使用拟合过程。目前,我们提供了Prophet 的Python 和 R 语言的实现。它们具有完全相同的功能,通过提供这两个实现,我们希望让我们的预测方法在数据科学社区更广泛使用。
如何使用Prophet
使用Prophet的最简单的方法是从PyPI(Python)或CRAN(R)安装软件包。您可以阅读我们的快速入门指南,并深入了解我们的全面文档。如果您正在寻找一个有趣的时间序列数据源,建议尝试wikipediatrend包,它可在维基百科页面的下载历史页面视图提供下载。
帮助我们改进 Prophet
有两个主要方法来帮助我们改进Prophet。首先,你可以自己试试使用,告诉我们你的结果。我们一直在寻找更多的用例,以便了解当Prophet表现是否良好。第二,有大量的功能需要构建!我们欢迎拉取请求(pullrequest)、修复错误和增加新的功能。看看如何贡献的指南,我们期待与社区互动,使 Prophet更广泛地有用。
原文:/prophet-forecasting-at-scale/?
作者:Sean J. Taylor, Ben Letham
在微信里长按二维码可以关注公众号“网路冷眼”,喜欢就分享一下
明天提醒我
我要该,理由是:
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
扫扫下载 App雷锋网按:上个月(2月23日),Facebook开源了一款基于 Python 和 R 语言的数据预测工具——“Prophet”(详细报道请看雷锋网此前文章 《支持Python!Facebook开源预测工具Prophet》)。本文则详细介绍了Prophet的贝叶斯推理实践,具体展示了研究人员把两个数据集用在Prophet上的运行效果。
如今,市面上已经许多Python 和 R语言可适用的时间序列预测模型了,那么Facehook的Prophet在这一领域又有什么优势呢?
Prophet在进行预测,其后端系统是一个概率程序语言Stan,这代表Prophet能发挥出很多贝叶斯算法的优势,比如说:
使模型具有简单、易解释的周期性结构;
预测结果包括才完全后验分布中导出的置信区间,即Prophet提供的是一个数据驱动的风险估计。
在下面研究中,研究者让Prophet对两组数据进行预测,在后端使用概率程序语言,读者可以借此看到使用Stan的一些工作细节。
Prophet使用了一种通用时间序列模型,这种模型可适用于Facebook上的数据,并且具有分段走向(piecewise trends)、多周期及弹性假期(floating holiday)三种特性。
Prophet的把时间序列预测问题转变成了一个曲线拟合练习(exercise)。在这个曲线中,因变量是增长、周期和holiday的总体表现。
增长(growth)
这一部分采用一个随时间变化的逻辑增长模型,属于非线性增长,所以,要用简单的分段常数函数来模拟线性增长。
用比率调整向量模拟分段点,每个分段点都对应一个具体的时间点。用拉普拉斯分布(Laplace distribution)模拟比率调整变量,位置参数(location parameter)设定为0。
Prophet 模型周期(periodic seasonality)
采用标准傅里叶级数。年、周的周期性(seasonality)近似值分别为20和6,周期性成分(seasonal component)在正常情况下是平滑状态。
假期(Holiday)
用一个指标函数来模拟。
使用者可以调节扩散参数(spread parameter),以模拟未来会有多少历史季节性变化(historical seasonal variation)。
Prophet的使用
用户在用Prophet时,不需要了解Stan代码,仅仅使用大家熟知的Python 或 R编程语言即可。
下面,研究者让它在一个周期性极强的数据集上运行(运行过程如下图所示)。
该数据集为摩纳哥夏威夷火山上测量的大气二氧化碳含量。
设置好程序后,只用了几秒钟,模型就给出了下图所示的预测结果:
Prophet很容易就探测到该数据以年为周期,并且长期增长的趋势。在这里要提一下,Prophet自带数据驱动的置信区间,这是概率编程系统的一个重要优点。
另外,Prophet也为时间序列的组成部分(例如一周中某天、或一年中的某天)提供了简单、易解释的预测结果,如下图所示:
这里要注意的是,以周为单位的预测数据要比其他两个的数据小得多,而且噪点也更大。知道这一点非常有意义:这表明,在全球范围内,大气中化学物质的含量并不是以周为周期变化的;另外,年数据也显示出北半球植被对二氧化碳含量的影响:夏天过后含量降低,冬天过后含量升高。
下面,研究人员让Prophet对一组更具挑战性的数据集(美国年出生人数)进行预测。
该数据集用高斯过程(雷锋网注:也叫正态随机过程)进行分析,它同时具有周期性和“假期效果”。
Prophet能够通过调整转折点平滑参数自动探测到转折点。研究者把转折点平滑参数设为0.1,而不是默认的0.05。这可使预测结果更灵活,更少平滑,但也更容易显示噪点。
Prophet用了大概1分钟来理解这些数据集下图中的黑点),然后给出了预测结果(下图中的蓝线)。
Prophet预测出,出生率会在每年的八月到十月有所提高。
从下图中能看出,新年期间出生人数较少,而情人节期间则偏高。Prophet通过定义指示变量系列(indicator variable
series),把这种一年某些天数据猛然增高的现象自动看做“holidays”,这个指示变量系列能说明(或预测)该点的数据是不是(或是否将是)一个假期。
以上概率程序报告中展示了Prophet在贝叶斯算法中的实践效果,结果发现:
开发者和数据员们能通过概率编程语言(例如Stan和pymc3),更容易地量化所有结果的概率值,而不仅仅是选出最有可能性的那一个;
在做预测时,它能为通用时间序列模拟合适的函数。但在模拟函数时,为了达到Prophet用户想要的效果,可能会牺牲一些灵活性;
Prophet使研究人员能更简单、快捷地运行Stan,省掉了使用Python和R的复杂;
Prophet的鲁棒性良好,作为一个概率程序产品,用户很容易就能上手。
via:fastforwardlabs
相关文章,请参看雷锋网(公众号:雷锋网)此前报道:
Cloudera 发布自助式数据科学开发环境 原生支持 R、Python、Scala 和各大开源框架
谷歌开源 Python Fire;一张图读懂 Python、R 的大数据应用等 | AI 开发者头条支援 Python 与 R 语言!Facebook 开源大规模预测工具“Prophet”
Photo Credit: C_osett 本文来自合作媒体
,INSIDE 授权转载
前几天,Facebook 宣布开源一款基于 Python 和 R 语言的数据预测工具——“Prophet”,即“先知”。取名倒是非常直白。 Facebook 表示,Prophet 相比现有预测工具更加人性化,并且难得地提供 Python 支援。另外,它生成的预测结果足以和专业数据分析师媲美 。 Facebook 把预测任务的流程用下图展示出来:
从图中可以看出,预测共分四个流程:建模,预测评估,表面问题和人工检查。 在建模阶段,目前可用的 Python 工具包寥寥无几。最广为人知的“forecast”,Google 开发的 CausalImpact, 以及推特的 AnomalyDetection,均是基于 R 语言。很显然 Facebook 想要改变这一点。 从 Facebook 官方声明来看, 推出 Prophet,是希望用它来替代 forecast,成为最受欢迎的预测工具 。相对于后者,Facebook 表示 Prophet 有两大优点: 1. 开发合理、准确的预测模型更加直接。 Prophet 包含许多预测技术,比如 ARIMA 和 exponential smoothing。每一项工具都有它的长处、短处和调节参数。Facebook 表示,选择不恰当的模型或参数会造成让人难以满意的结果;而即便是有经验的数据分析师在选择模型、参数上也经常遇到困难。言下之意是,Prophet 将着重改善这方面的体验,让模型、参数的选择更直观。 2. 用 Prophet 做出的预测,能够以对普通人更加直观的方式进行定制。 Prophet 有针对周期性的平滑参数(smoothing parameters for seasonality),允许开发者调整与历史周期的匹配程度。它还有针对趋势的平滑参数,能够调整对历史趋势变化的紧跟程度。对于成长曲线(growth curves),开发者能人工设置上限,即 capacities,把关于“该预测如何成长(或下降)”的先验讯息注入进去。最后,开发者还能设置不规则日期,来对超级杯、感恩节、黑色星期五之类的特殊日子进行建模。 组成部分 在它的核心,Prophet 是一个可加性回归模型(additive regression model),它有四个组成部分:
一个分段的线性或逻辑成长曲线趋势。Prophet 通过提取数据中的转变点,自动检测趋势变化。 一个按年的周期组件,使用傅立叶级数(Fourier series)建模而成。 一个按周的周期组件,使用虚拟变量(dummy variables)。 使用者设置的重要节日表。
适用范围 Prophet 针对的是商业预测任务,适用于具备以下特征的场景:
针对每小时、每天或每星期的观察,有至少数月(理想情况的一年)的历史记录。 多重显著的“人类层级”周期性:星期 X 以及年份。 日期间隔不规则的重要节日(比如超级杯),需要事先得知。 观察缺失或是异常值在合理范围内。 历史趋势变化,比如产品发布或者改写记录(logging changes)。 符合非线性成长曲线的趋势,有天然上、下限或者饱和点。
想要进一步了解 Prophet 的读者,请参考以下链接: Facebook 部落格: 使用指南: 档案:
想在手机阅读更多程式设计资讯?
分享到Facebook
请先登入,以便把文章加到我的最爱或订阅作者。
Inside成立于2009年11月底,系由一群热爱网络的人所成立的共笔部落格。

我要回帖

更多关于 精准数据营销优势 的文章

 

随机推荐