Facebook时序预测工具Prophet实战分析

article/2025/9/20 3:40:07

引言

去年Facebook开源了一套时序预测工具叫做Prophet。Prophet是一个预测时间序列数
据的模型。 它基于一个自加性模型,用来拟合年、周、季节以及假期等非线性趋势。 它在至少有一年历史数据的日常周期性数据,效果最好。 Prophet对缺失值,趋势的转变和大量的异常值是有极强的鲁棒性。Prophet中文翻译是:“先知”。名字还是挺贴切的。在看完本篇文章后,你将会知道:

  • Prophet有什么亮点
  • Prophet是怎么工作的
  • 如何去使用Prophet

为什么会发布这套工具

预测是一项数据科学任务,是组织内许多活动的核心。 例如,Facebook这样的大型组织必须参与容量规划,以有效分配稀缺资源和目标设置,以便衡量相对于基线的性能。
得到高质量的预测对于任何机器或大多数分析师来说都不是一个简单的问题。 在现实生活中,我做了不少商业预测,归纳总结发现,预测任务有两大核心问题:

  • 完全自动化的预测技术往往都比较“脆弱”,不是太灵活,对一些问题缺乏有效的假设以及启发式的思路
  • 能够得到高质量预测的数据科学家是非常罕见的,因为预测需要丰富的经验以及专业的数据科学技能

在现实生活中,对高质量预测的需求往往要远远超过分析人员可以生产的速度。因此Prophet的出现就是为了让专家和非专家能够更轻松地进行高质量的预测。

很多人在做预测的时候,总会提出这个一个潜在的考虑因素:“规模”。当我数据量很大的时候,计算与存储的开销能满足要求么?其实对于时序预测问题,计算问题可以通过并行执行解决,存储问题可以通过关系型数据库MySQL或数据仓库Hive解决。
Prophet解决的“规模”问题,其实本质上是在完成时序预测任务时面临的各种复杂情况,Prophet能够适用于多种业务场景下的预测。

Prophet的亮点

当你做了很多时序预测任务时,你就会发现,并不是所有的任务都能用一个预测流程来解决。“一招鲜,吃遍天”在数据科学里是行不通的。通过分析平时我们做时序任务时遇到的问题,我们发现给定的时序数据有以下几个特点:

  • 观察值是按每小时或每天或每周或每月给出的一段历史数据
  • 多尺度的周期性:一周七天,一个月30天,12个月等等
  • 提前已知的一些重要假期:各种法定节日或传统节日
  • 数据中存在缺失值或异常值
  • 历史趋势的变化
  • 趋势是非线性变化,达到自然极限或趋于饱和

Prophet通过将全自动预测与在线学习相结合从而保证了该工具能够解决大多数商业业务问题,Prophet工作流程如下图所示:

prophet

相比于目前开源的一些预测工具,Prophet主要有以下两点优势:

  • Prophet能够让你更方便直接地创建一个预测任务,而其他的一些工具包(ARMA,指数平滑)等,这些工具每个有自己的优缺点及参数,即使是优秀的数据分析师想要从众多的模型中选择合适的模型及相应的参数也是够让他头皮发麻的。
  • Prophet是为非专家们"量身定制"的。为什么这么说呢?你利用Prophet可以直接通过修改季节参数来拟合季节性,修改趋势参数来拟合趋势信息,指定假期来拟合假期信息等等。

Prophet是如何工作的

本质上讲,Prophet是由四个组件组成的自加性回归模型:

  • 分段线性或逻辑增长曲线趋势。 Prophet通过从数据中选择改变点,自动检测趋势的变化。
  • 用傅里叶级数模拟每年的季节性分量。
  • 用虚拟变量来模拟每周的周期性分量。
  • 用户提供的重要节日列表

Prophet其中最重要的思想就是曲线拟合,这与传统的时序预测算法有很大的不同。

如何使用Prophet

安装

因为Prophet已经发布在PyPI上了,所以我们可以通过pip进行安装:

$ pip install fbprophet

我的是ubuntu16.10版本,软件大小为68.1MB

快速启动

Prophet遵循sklearn模型API。 我们创建一个prophet类的实例,然后调用它的fit和predict方法。
Prophet的输入必须包含两列数据:ds和y,其中ds是时间戳列,必须是时间信息;y列必须是数值,代表我们需要预测的信息。首先我们获取数据:这里我们采用官网给出的Peyton Manning这个维基百科页面日常被访问的数据(下载链接)。

然后我们导入相关库以及数据:

# Python
import pandas as pd
import numpy as np
from fbprophet import Prophet
df = pd.read_csv('example_wp_peyton_manning.csv')
df['y'] = np.log(df['y'])
df.head()
dsy
02007-12-109.590761
12007-12-118.519590
22007-12-128.183677
32007-12-138.072467
42007-12-147.893572
m = Prophet()
m.fit(df);
# Python
future = m.make_future_dataframe(periods=365)
future.tail()
ds
32652017-01-15
32662017-01-16
32672017-01-17
32682017-01-18
32692017-01-19
# Python
forecast = m.predict(future)
forecast.tail()
dstrendtrend_lowertrend_upperyhat_loweryhat_upperseasonalseasonal_lowerseasonal_upperseasonalitiesseasonalities_lowerseasonalities_upperweeklyweekly_lowerweekly_upperyearlyyearly_loweryearly_upperyhat
32652017-01-157.1890856.8364607.5568977.5290098.8742591.0176681.0176681.0176681.0176681.0176681.0176680.0482860.0482860.0482860.9693820.9693820.9693828.206753
32662017-01-167.1880596.8344737.5573507.7839239.2376961.3437071.3437071.3437071.3437071.3437071.3437070.3522980.3522980.3522980.9914090.9914090.9914098.531766
32672017-01-177.1870336.8324127.5578027.5556369.0612721.1321231.1321231.1321231.1321231.1321231.1321230.1196310.1196310.1196311.0124931.0124931.0124938.319156
32682017-01-187.1860066.8300797.5582557.4563708.9823070.9657650.9657650.9657650.9657650.9657650.965765-0.066664-0.066664-0.0666641.0324291.0324291.0324298.151772
32692017-01-197.1849806.8277577.5584747.4455088.8897370.9787100.9787100.9787100.9787100.9787100.978710-0.072264-0.072264-0.0722641.0509731.0509731.0509738.163690
m.plot(forecast)

这里写图片描述

m.plot_components(forecast)

这里写图片描述

不同业务场景下的预测效果

这一小节,我们基于不同业务场景,看看Prophet的预测效果好不好。

饱和性预测

这里通过制定预测值的上限、下限,从而来进行饱和性预测

#Forecasting Growth
df = pd.read_csv('example_wp_R.csv')
df['y'] = np.log(df['y'])
df.head()
dsy
02008-01-305.976351
12008-01-166.049733
22008-01-176.011267
32008-01-145.953243
42008-01-155.910797
# 指定上限df['cap'] = 8.5
df['cap'] = 8.5
m = Prophet(growth='logistic')
m.fit(df)
future = m.make_future_dataframe(periods=1826)
future['cap'] = 8.5
fcst = m.predict(future)
m.plot(fcst)

png

趋势变化点

Prophet能够实现历史趋势变化点的自动检测,并可以通过调整参数适当修正变化。Prophet通过changepoint_prior_scale来调整变化点的趋势程度,值越大,趋势就越灵活。同时Prophet通过参数changepoints来手动指定趋势变化点。

m = Prophet(changepoint_prior_scale=0.5)
forecast = m.fit(df).predict(future)
m.plot(forecast)

png

m = Prophet(changepoint_prior_scale=0.001)
forecast = m.fit(df).predict(future)
m.plot(forecast)

png

m = Prophet(changepoints=['2014-01-01'])
forecast = m.fit(df).predict(future)
m.plot(forecast)

这里写图片描述

Prophet在异常值、缺失值、周期性、季节性、节假日等方面效果也不错,这里就不赘述了。

总结

读了这篇文章,是不是感觉这个Prophet很好用,是不是迫不及待想去试试水?哈哈哈
demo代码:github : Prophe_in_action


http://chatgpt.dhexx.cn/article/DjN8XjtO.shtml

相关文章

Prophet代码实战(一)趋势项调节

这里写目录标题 Prophet Quick StartProphet的缺点数据格式建模流程 Prophet详解趋势线性趋势逻辑斯蒂趋势无趋势 检测和设置趋势的分段点分段点的检测和可视化趋势的置信区间 Prophet Quick Start Prophet的缺点 时间t上的观测值的分布只能是高斯分布无法高效处理大量相关时…

fbprophet

1 Prophet 简介 Facebook 开源了一个时间序列预测的算法,叫做 fbprophet,它的官方网址与基本介绍来自于以下几个网站: Github:https://github.com/facebook/prophet官方网址:https://facebook.github.io/prophet/论文…

ML之prophet:prophet的简介、安装、使用方法之详细攻略

ML之prophet:prophet的简介、安装、使用方法之详细攻略 目录 prophet的简介 1、四大特点 prophet的安装 prophet的使用方法 1、基础案例 2、进阶案例 ML之prophet:利用prophet算法对维基百科页面的日志每日页面浏览量实现回归预测(时间序列的趋势…

Prophet学习(二) 时序预测开源工具包Prophet介绍

目录 一、Prophet 简介 二、Prophet 适用场景 三、Prophet 算法的输入输出 四、Prophet 算法原理 五、与机器学习算法的对比 六、代码 6.1 依赖安装 6.2 预测demo 七、参考资料 八、官方链接: 九、案例链接: 一、Prophet 简介 Prophet是Faceb…

【数据分析】利用机器学习算法进行预测分析(五):Prophet

时间序列预测中的机器学习方法(五):Prophet 本文是“时间序列预测中的机器学习方法”系列文章的第五篇,如果您有兴趣,可以先阅读前面的文章: 【数据分析】利用机器学习算法进行预测分析(一&…

关于导入Prophet库

在做项目时在参考别人的代码时,其from fbgrophet import Proghet给我造成了很大的困扰。我先是用conda装了能在里面找到的prophet,可以看到我在里面安装了prophet(p是小写的): 但这个并不能用import prophet来替代他的那句from fbgrophet im…

Prophet学习(一) Python API实现

目录 Python API 详细介绍 完整代码: Python API 详细介绍 Prophet遵循sklearn模型API。我们创建Prophet类的实例,然后调用它的fit和predict方法。 Prophet的输入总是一个有两列的数据帧:ds和y。ds(日期戳)列应该是Pandas期望的格式,理想…

Prophet时间序列

Prophet参数介绍 growth:趋势函数-默认是线性趋势(linear),还可以选非线性(logistic). changepoints:突变点-默认是none,可以手动选择,如6-18节日有活动,就可以指点突变点在6-18。 n_changepoints:突变点个数-若未指定&#xff0c…

Windows下安装Python版本的prophet

prophet是Facebook开源的一款时序预测的工具。地址。 在Mac和linux下比较好安装,在Windows下安装就比较坑了。所以,记录以下自己安装成功的过程。 我的环境是win10 64位,python 3.6.1 第一步:安装PyStan fbprophet依赖于PyStan…

【关于时间序列的ML】项目 8 :使用 Facebook Prophet 模型预测股票价格

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

Prophet调参

本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验。 一 参数理解篇 class Prophet(object):def __init__(self,growthlinear,changepointsNone,n_changepoints25,changepoint_range0.8,yearly_seasonalityauto,weekly_seasonalityauto,daily_seasonalityaut…

Python实现Prophet时间序列数据建模与异常值检测(Prophet算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Prophet由facebook开源的基于python和R语言的数据预测工具,基于时间和变量值结合时间序列分…

结合 Prophet 的原理理解 Prophet 的使用

结合 Prophet 的原理理解 Prophet 的使用 前言 本文也是时序领域工作学习过程中的一些学习笔记,将会结合 Prophet 的原理,讲一讲如何成为一个合格的 Prophet 调包侠 使用者。如果有任何理解不到位的地方,请多多指正。 Why Prophet? Prop…

大白话Prophet模型以及简单的应用(一)

Prophet 是基于加法模型预测时间序列数据。适合于具有季节性影响的时间序列和具有多个季节的历史数据。Prophet对数据中的异常值和缺失值以及趋势的强烈变化有着较好的鲁棒性(耐操性),所以通常情况下都不需要对数据进行处理。 优点&#xff1…

Prophet算法

Prophet简介 Prophet是FaceBook公司在2017年开源的一款时间序列建模工具。Prophet的方法是将时间序列看成是关于t的一个函数,用你和函数曲线的方法进行预测,所以这和传统的时间序列模型有本质上的区别,他更倾向于机器学习的建模方式。 Prop…

时间序列模型Prophet使用详细讲解

之前我们已经讲过了如何在Windows系统下安装Python版本的Prophet。详细见这里。 接下来的几个部分,我们说下如何使用Prophet,以此来体验下Prophet的丰富内容。内容会比较多,主要翻译自官方文档。教程中使用的数据集可在 Prophet 的 github 主…

Prophet拟合模型入门学习

先展示效果: Facebook 时间序列预测算法 Prophet 的研究 Prophet 简介 Facebook 去年开源了一个时间序列预测的算法,叫做 fbprophet,它的官方网址与基本介绍来自于以下几个网站: Github:https://github.com/facebo…

时间序列预测——Prophet模型

文章链接: 时间序列预测——ARIMA模型https://blog.csdn.net/beiye_/article/details/123317316?spm1001.2014.3001.5502 1、Propht模型概述 Prophet模型是Facebook于2017年发布开源的时间序列预测框架。Prophet适用于各种具有潜在特殊特征的预测问题包括广泛的业…

Prophet 时间序列预测框架入门实践笔记

1. Prophet时间序列预测框架概述 Prophet是Facebook开源的一种时间序列预测框架,旨在使时间序列分析更加容易和快速。Prophet可以处理具有多个季节性和突发事件的时间序列数据,并且在数据缺失或异常情况下仍然能够进行良好的预测。Prophet采用了一种基于…

Prophet的原理知识

目录 1、Prophet 简介 2、Prophet 适用场景 3、Prophet 算法的输入输出 4、Prophet 算法原理 5、Prophet 使用时可设置的参数 6、Prophet 学习资料参考 7、Prophet 模型应用 7.0 背景描述7.1 导入数据7.2 拟合模型7.3 预测(使用默认参数)7.4 趋势…