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

article/2025/9/20 3:41:47

这里写目录标题

    • Prophet Quick Start
        • Prophet的缺点
        • 数据格式
        • 建模流程
    • Prophet详解
      • 趋势
        • 线性趋势
        • 逻辑斯蒂趋势
        • 无趋势
      • 检测和设置趋势的分段点
      • 分段点的检测和可视化
      • 趋势的置信区间

Prophet Quick Start

Prophet的缺点

  • 时间t上的观测值的分布只能是高斯分布
  • 无法高效处理大量相关时间序列

数据格式

Prophet 的输入必须包含两列的数据框:ds 和 y 。

  • ds 列必须包含日期(YYYY-MM-DD)或者是具体的时间点(YYYY-MM-DD HH:MM:SS)。
  • y 列必须是数值变量,表示我们希望去预测的量。

example_wp_log_peyton_manning.csv下载地址:

import pandas as pd
from prophet import Prophet# 读入数据集
df = pd.read_csv('data/example_wp_log_peyton_manning.csv')print(df.tail(5))
"""ds          y
2900  2016-01-16   7.817223
2901  2016-01-17   9.273878
2902  2016-01-18  10.333775
2903  2016-01-19   9.125871
2904  2016-01-20   8.891374
"""

建模流程

通过使用辅助的方法 Prophet.make_future_dataframe 来将未来的日期扩展指定的天数,得到一个合规的数据框。

m = Prophet()
m.fit(df)
# 构建待预测日期数据框,periods = 365 代表除历史数据的日期外再往后推 365 天
horizon = 365
future = m.make_future_dataframe(periods=horizon)
future.tail(5)
"""ds
3265 2017-01-15
3266 2017-01-16
3267 2017-01-17
3268 2017-01-18
3269 2017-01-19
"""
# 预测
forecast = m.predict(future)
# 通过 Prophet.plot 方法传入预测得到的数据框,可以对预测的效果进行绘图。
fig1 = m.plot(forecast)
# 使用 Prophet.plot_components 方法。默认情况下,将展示趋势、时间序列的年度季节性和周季节性。如果之前包含了节假日,也会展示出来。
fig2 = m.plot_components(forecast)

在这里插入图片描述
如果想查看预测的成分分析,可以使用 Prophet.plot_components 方法。默认情况下,将展示趋势、时间序列的年度季节性和周季节性。如果之前包含了节假日,也会展示出来。

在这里插入图片描述

Prophet详解

在另一篇文章Prophet算法简介中介绍了Prophet算法是一个加(乘)法模型,可分解为趋势项、季节项、外部变量(节假日)、误差项(随机项)。接下来我们一一介绍如何设置或者调节Prophet这些分解的成分。

趋势

调整趋势的类型"growth":

  • 线性:“linear” 默认值,线性趋势,可选择分段线性趋势
  • 逻辑斯蒂:“logisitic” 逻辑斯蒂趋势,可选择分段逻辑斯蒂趋势
  • 无趋势 :“flat” 无趋势

线性趋势

m = Prophet(growth="linear")
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)
fig = m.plot_components(forecast[["ds", "trend", "trend_upper", "trend_lower"]])

在这里插入图片描述

逻辑斯蒂趋势

必须在训练集和测试集的data_frame中提供"cap",即趋势的上限

m = Prophet(growth="logistic")df["cap"] = 10
m.fit(df)horizon = 365
future = m.make_future_dataframe(periods=horizon)future["cap"] = 10
forecast = m.predict(future)fig = m.plot_components(forecast[["ds", "trend", "trend_upper", "trend_lower"]])
fig2 = m.plot(forecast)df.drop(columns=["cap"], inplace=True)
future.drop(columns=["cap"], inplace=True)

在这里插入图片描述
在这里插入图片描述
在有需要的情况下好可以提供"floor",即趋势的下限

m = Prophet(growth="logistic")df["cap"] = 10
df["floor"] = 6
m.fit(df)horizon = 365
future = m.make_future_dataframe(periods=horizon)future["cap"] = 10
future["floor"] = 6
forecast = m.predict(future)fig = m.plot_components(forecast[["ds", "trend", "trend_upper", "trend_lower"]])
fig2 = m.plot(forecast)df.drop(columns=["cap", "floor"], inplace=True)
future.drop(columns=["cap", "floor"], inplace=True)

在这里插入图片描述
在这里插入图片描述

无趋势

当序列平稳性检测P-value值比较小的时候可以考虑使用无趋势的Prophet。

m = Prophet(growth="flat")
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)
fig = m.plot_components(forecast[["ds", "trend", "trend_upper", "trend_lower"]])

在这里插入图片描述

检测和设置趋势的分段点

分段点的检测和可视化

通过超参数changepoint_range调整潜在的分段点位置

  • changepoint_range,0-1之间的小数,表示分段点只能存在训练集的前百分之几,默认0.8
  • changepoint_range越大,模型越容易拟合近期的数据,也容易过拟合
m = Prophet()
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)from prophet.plot import add_changepoints_to_plot
fig = m.plot(forecast)
a = add_changepoints_to_plot(fig.gca(),m ,forecast)

在这里插入图片描述
允许训练集前90%的数据趋势发生变化

m = Prophet(changepoint_range=0.9) # 允许训练集前90%的数据趋势发生变化
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)from prophet.plot import add_changepoints_to_plot
fig = m.plot(forecast)
a = add_changepoints_to_plot(fig.gca(),m ,forecast)

通过超参数n_changepoints调整潜在的分段点的数量

  • n_changepoints,整数,表示在changepoint_range规定的范围内,均匀选取n_changepoints个时间点作为潜在的分段点,默认值为25
  • n_changepoints越大,模型的线性波动越大,模型对训练集的拟合程度越高,越容易过拟合
m = Prophet(n_changepoints=50) 
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)from prophet.plot import add_changepoints_to_plot
fig = m.plot(forecast)
a = add_changepoints_to_plot(fig.gca(),m ,forecast)

在这里插入图片描述
通过调整changepoints指定分段点的位置

  • 用户提供changepoints时,程序会忽略n_changepoints和changepoint_range
m = Prophet(changepoints=["2012-01-01", "2014-01-01"]) # 允许训练集前90%的数据趋势发生变化
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)from prophet.plot import add_changepoints_to_plot
fig = m.plot(forecast)
a = add_changepoints_to_plot(fig.gca(),m ,forecast)

通过超参数changepoint_prior_scale控制速率变化了的先验概率

  • changepoint_prior_scale,大于0的小数,表示分段点前后两条趋势线增长速率的变化量的先验概率。默认0.05
  • changepoint_prior_scale越大,趋势线波动越大,模型对训练集的拟合程度越高,越容易过拟合
  • 通常而言,用户可以固定n_changepoints,只需要通过调整changepoint_prior_scale来控制趋势变化的频繁程度。
m = Prophet(changepoint_prior_scale=0.5) # 允许训练集前90%的数据趋势发生变化
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)from prophet.plot import add_changepoints_to_plot
fig = m.plot(forecast)
a = add_changepoints_to_plot(fig.gca(),m ,forecast)

趋势的置信区间

产参数interval_width

  • 0-1的小数,需要计算的置信度区间,默认值为0.8
m = Prophet(interval_width=0.95) # 允许训练集前90%的数据趋势发生变化
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)
fig = m.plot(forecast)

在这里插入图片描述


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

相关文章

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

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

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