fbprophet

article/2025/9/20 3:38:52

1 Prophet 简介 

      Facebook 开源了一个时间序列预测的算法,叫做 fbprophet,它的官方网址与基本介绍来自于以下几个网站:

  1. Github:https://github.com/facebook/prophet
  2. 官方网址:https://facebook.github.io/prophet/
  3. 论文名字与网址:Forecasting at scale,https://peerj.com/preprints/3190/

        从官网的介绍来看,Facebook 所提供的 prophet 算法不仅可以处理时间序列存在一些异常值的情况,也可以处理部分缺失值的情形,还能够几乎全自动地预测时间序列未来的走势。从论文上的描述来看,这个 prophet 算法是基于时间序列分解和机器学习的拟合来做的,其中在拟合模型的时候使用了 pyStan 这个开源工具,因此能够在较快的时间内得到需要预测的结果。除此之外,为了方便统计学家,机器学习从业者等人群的使用,prophet 同时提供了 R 语言和 Python 语言的接口。从整体的介绍来看,如果是一般的商业分析或者数据分析的需求,都可以尝试使用这个开源算法来预测未来时间序列的走势。

2 Prophet 数据的输入和输出

        prophet 所做的事情就是:

  1. 输入已知的时间序列的时间戳和相应的值;
  2. 输入需要预测的时间序列的长度;
  3. 输出未来的时间序列走势。
  4. 输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。

        就一般情况而言,时间序列的离线存储格式为时间戳和值这种格式,更多的话可以提供时间序列的 ID,标签等内容。因此,离线存储的时间序列通常都是以下的形式。其中 date 指的是具体的时间戳,category 指的是某条特定的时间序列 id,value 指的是在 date 下这个 category 时间序列的取值,label 指的是人工标记的标签('0' 表示异常,'1‘ 表示正常,'unknown' 表示没有标记或者人工判断不清)。

                  

        而 fbprophet 所需要的时间序列也是这种格式的,根据官网的描述,只要用 csv 文件存储两列即可,第一列的名字是 'ds', 第二列的名称是 'y'。第一列表示时间序列的时间戳,第二列表示时间序列的取值。通过 prophet 的计算,可以计算出 yhat,yhat_lower,yhat_upper,分别表示时间序列的预测值,预测值的下界,预测值的上界。两份表格如下面的两幅图表示。 

                 

         Prophet 的输入画图:

  • 黑色表示原始的时间序列离散点,
  • 深蓝色的线表示使用时间序列来拟合所得到的取值,
  • 浅蓝色的线表示时间序列的一个置信区间,也就是所谓的合理的上界和下界。 

3 Prophet 算法原理

        在时间序列分析领域,有一种常见的分析方法叫做时间序列的分解(Decomposition of Time Series),它把时间序列 分成几个部分,分别是季节项,趋势项,剩余项,也就是说对所有的,都有

        

        除了加法的形式,还有乘法的形式,也就是:

         \varepsilon \left ( t \right )

        以上式子等价于 ​​​​​​​。所以,有的时候在预测模型的时候,会先取对数,然后再进行时间序列的分解,就能得到乘法的形式。在 fbprophet 算法中,作者们基于这种方法进行了必要的改进和优化。

        模型整体主要由三部分组成:

  • growth(增长趋势)
  • seasonality(季节趋势)
  • holidays(节假日对预测值的影响)

        其中:

  • g(t) 表示趋势项,它表示时间序列在非周期上面的变化趋势;
  • s(t) 表示周期项,或者称为季节项,一般来说是以周或者年为单位;
  • h(t) 表示节假日项,表示时间序列中那些潜在的具有非固定周期的节假日对预测值造成的影响;
  • \varepsilon \left ( t \right )即误差项或者称为剩余项,表示模型未预测到的波动,\varepsilon \left ( t \right )服从高斯分布; 

        Prophet 算法就是通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。

2.1 趋势项模型

        趋势项有两个重要的函数,一个是基于逻辑回归函数的(非线性增长),另一个是基于分段线性函数的(线性增长)

2.1.1 基于逻辑回归的趋势项

        如果回顾逻辑回归函数的话,一般都会想起这样的形式:,它的导数是,如果增加一些参数的话,那么逻辑回归就可以改写成:

            

        这里的   称为曲线的最大渐近值,  表示曲线的增长率,  表示曲线的中点。当  时,恰好就是大家常见的 sigmoid 函数的形式。从 sigmoid 的函数表达式来看,它满足以下的微分方程:

        那么,如果使用分离变量法来求解微分方程就可以得到:

           

        但是在现实环境中,函数 的三个参数  不可能都是常数,而很有可能是随着时间的迁移而变化的,因此,在 Prophet 里面,作者考虑把这三个参数全部换成了随着时间而变化的函数,也就是   

         除此之外,在现实的时间序列中,曲线的走势肯定不会一直保持不变,在某些特定的时候或者有着某种潜在的周期曲线会发生变化,这种时候,就有学者会去研究变点检测,也就是所谓 change point detection。例如下面的这幅图的   就是时间序列的两个变点。

         

         在 Prophet 里面,是需要设置变点的位置的,而每一段的趋势和走势也是会根据变点的情况而改变的。在程序里面有两种方法:

  1. 一种是通过人工指定的方式指定变点的位置;
  2. 另外一种是通过算法来自动选择。

        在默认的函数里面,Prophet 会选择 n_changepoints = 25 个变点,然后设置变点的范围是前 80%(changepoint_range),也就是在时间序列的前 80% 的区间内会设置变点。通过 forecaster.py 里面的 set_changepoints 函数可以知道,首先要看一些边界条件是否合理,例如时间序列的点数是否少于 n_changepoints 等内容;其次如果边界条件符合,那变点的位置就是均匀分布的,这一点可以通过 np.linspace 这个函数看出来。

 

2.1.2 基于分段线性函数的趋势项

         众所周知,线性函数指的是  ,而分段线性函数指的是在每一个子区间上,函数都是线性函数,但是在整段区间上,函数并不完全是线性的。正如下图所示,分段线性函数就是一个折线的形状。

         

 因此,基于分段线性函数的模型形如:

         

        其中 

  •   表示增长率(growth rate), 
  •  表示增长率的变化量,
  •   表示 offset parameter。

        而这两种方法(分段线性函数与逻辑回归函数)最大的区别就是   的设置不一样,在分段线性函数中,   注意:这与之前逻辑回归函数中的设置是不一样的。 

         在 Prophet 的源代码中,forecast.py 这个函数里面包含了最关键的步骤,其中 piecewise_logistic 函数表示了前面所说的基于逻辑回归的增长函数,它的输入包含了 cap 这个指标,因此需要用户事先指定 capacity。而在 piecewise_linear 这个函数中,是不需要 capacity 这个指标的,因此 m = Prophet() 这个函数默认的使用 growth = 'linear' 这个增长函数,也可以写作 m = Prophet(growth = 'linear');如果想用 growth = 'logistic',就要这样写:

m = Prophet(growth='logistic') 
df['cap'] = 6 
m.fit(df) 
future = m.make_future_dataframe(periods=prediction_length, freq='min') 
future['cap'] = 6

 2.2 变点的选择

      在介绍变点之前,先要介绍一下 Laplace 分布,它的概率密度函数为:

        

       其中   表示位置参数,  表示尺度参数。Laplace 分布与正态分布有一定的差异。 

        在 Prophet 算法中,是需要给出变点的位置,个数,以及增长的变化率的。因此,有三个比较重要的指标,那就是

  1. changepoint_range,
  2. n_changepoint,
  3. changepoint_prior_scale。

       changepoint_range 指的是百分比,需要在前 changepoint_range 那么长的时间序列中设置变点,在默认的函数中是 changepoint_range = 0.8。n_changepoint 表示变点的个数,在默认的函数中是 n_changepoint = 25。changepoint_prior_scale 表示变点增长率的分布情况,在论文中,  ,这里的  就是 change_point_scale。

         在整个开源框架里面,在默认的场景下,变点的选择是基于时间序列的前 80% 的历史数据,然后通过等分的方法找到 25 个变点(change points),而变点的增长率是满足 Laplace 分布  的。因此,当  趋近于零的时候,  也是趋向于零的,此时的增长函数将变成全段的逻辑回归函数或者线性函数。这一点从  的定义可以轻易地看出。

 2.3 对未来的预估

 2.4 季节性趋势

        几乎所有的时间序列预测模型都会考虑这个因素,因为时间序列通常会随着天,周,月,年等季节性的变化而呈现季节性的变化,也称为周期性的变化。对于周期函数而言,大家能够马上联想到的就是正弦余弦函数。而在数学分析中,区间内的周期性函数是可以通过正弦和余弦的函数来表示的:假设  是以  ​​​​​​​ 为周期的函数,那么它的傅立叶级数就是

         

 

2.5 节假日效应(holidays and events)

        在现实环境中,除了周末,同样有很多节假日,而且不同的国家有着不同的假期。在 Prophet 里面,通过维基百科里面对各个国家的节假日的描述,hdays.py 收集了各个国家的特殊节假日。除了节假日之外,用户还可以根据自身的情况来设置必要的假期,例如 The Super Bowl,双十一等。

              

 2.5 模型拟合(Model Fitting)

       按照以上的解释,我们的时间序列已经可以通过增长项,季节项,节假日项来构建了,i.e.

                

       下一步我们只需要拟合函数就可以了,在 Prophet 里面,作者使用了 pyStan 这个开源工具中的 L-BFGS 方法来进行函数的拟合。具体可以参考 forecast.py 里面的 stan_init 函数。

2.6 Prophet 中可以设置的参数​​​​​​​

        在 Prophet 中,用户一般可以设置以下四种参数:

  1. growth:增长趋势模型。分为两种:”linear”与”logistic”,分别代表线性与非线性的增长,默认值:”linear”.
  2. Capacity:在增量函数是逻辑回归函数的时候,需要设置的容量值,表示非线性增长趋势中限定的最大值,预测值将在该点达到饱和.
  3. Change Points:可以通过 n_changepoints 和 changepoint_range 来进行等距的变点设置,也可以通过人工设置的方式来指定时间序列的变点,默认值:“None”.
  4. n_changepoints:用户指定潜在的”changepoint”的个数,默认值:25。
  5. changepoint_prior_scale:增长趋势模型的灵活度。调节”changepoint”选择的灵活度,值越大,选择的”changepoint”越多,从而使模型对历史数据的拟合程度变强,然而也增加了过拟合的风险。默认值:0.05。
  6. seasonality_prior_scale(seasonality模型中的):调节季节性组件的强度。值越大,模型将适应更强的季节性波动,值越小,越抑制季节性波动,默认值:10.0.
  7. holidays_prior_scale(holidays模型中的):调节节假日模型组件的强度。值越大,该节假日对模型的影响越大,值越小,节假日的影响越小,默认值:10.0。
  8. freq:数据中时间的统计单位(频率),默认为”D”,按天统计.
  9. periods:需要预测的未来时间的个数。例如按天统计的数据,想要预测未来一年时间内的情况,则需填写365。
  10. mcmc_samples:mcmc采样,用于获得预测未来的不确定性。若大于0,将做mcmc样本的全贝叶斯推理,如果为0,将做最大后验估计,默认值:0。
  11. interval_width:衡量未来时间内趋势改变的程度。表示预测未来时使用的趋势间隔出现的频率和幅度与历史数据的相似度,值越大越相似,默认值:0.80。当mcmc_samples = 0时,该参数仅用于增长趋势模型的改变程度,当mcmc_samples > 0时,该参数也包括了季节性趋势改变的程度。
  12. uncertainty_samples:用于估计未来时间的增长趋势间隔的仿真绘制数,默认值:1000。

 

 

 

如果不想设置的话,使用 Prophet 默认的参数即可。

 

 

 

 

 

 

 

 

Prophet原理:Facebook 时间序列预测算法 Prophet 的研究 - 知乎

Prophet的原理知识:
Prophet的原理知识_lamusique的博客-CSDN博客_prophet原理

Prophet的使用:时间序列模型Prophet使用详细讲解_anshuai_aw1的博客-CSDN博客_prophet

官方链接:

  • 论文:《Forecasting at scale》,https://peerj.com/preprints/3190/

  • github:https://github.com/facebook/prophet

  • 官网:https://facebook.github.io/prophet/

案例链接:

  • 预测股价并进行多策略交易:https://mp.weixin.qq.com/s/bf_CHcoZMjqP6Is4ebD58g

  • 预测Medium每天发表的文章数:https://mp.weixin.qq.com/s/1wujYYDP_P2uerZzZBaspg

  • 预测网站流量:https://pbpython.com/prophet-overview.html

  • 预测空气质量:https://mp.weixin.qq.com/s/S-NNG7BmviitBmMBJRJSRQ

  • 预测客运量:https://www.analyticsvidhya.com/blog/2018/05/generate-accurate-forecasts-facebook-prophet-python-r/

  • 疫情预测分析:https://mp.weixin.qq.com/s/fZpsy1bQ3Olhng1P5p5WAg

  • 原理讲解:https://mp.weixin.qq.com/s/675ASxDSVH_8BX6W8WRRqg

  • 知乎专栏:https://zhuanlan.zhihu.com/p/52330017

  • 股票价格预测:https://mp.weixin.qq.com/s/78xpmsbC2N1oZ3UIMm29hg


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

相关文章

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 趋势…

Prophet:一种大规模时间序列预测模型

前言 Prophet是由facebook开发的开源时间序列预测程序,擅长处理具有季节性特征大规模商业时间序列数据。本文主要介绍了Prophet模型的设计原理,并与经典的时间序列模型ARIMA进行了对比。 1. Prophet模型原理 Prophet模型把一个时间序列看做由3种主要成分…

Prophet模型的简介以及案例分析

目录 前言一、Prophet安装以及简介二、适用场景三、算法的输入输出四、算法原理五、使用时可以设置的参数六、学习资料参考七、模型应用7-1、股票收盘价格预测7-1-1、导入相关库7-1-2、读取数据7-1-3、数据预处理以及进行训练集和测试集的划分。7-1-4、实例化Prophet对象&#…