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

article/2025/9/20 4:09:31

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

优点:

  1. 准确快速
    本模型是Facebook开源的一个模型,据官网说本模型已经大量运用于许多应用程序中,发现在大多数情况下,它的性能优于其他方法,并且能在短时间内的得到预测
  2. 参数可解释强
    模型中的参数都有着比较具象的含义,有季节性(年月日为周期)、节假日,操作者可以结合项目背景,进行调参,并对别人做出解释

模型原理

y(t)=g(t)+s(s)+h(t)+ϵt

g(t)表示增长函数,用来拟合非周期性变化的。
s(t)用来表示周期性变化,比如说每周,每年,季节等。
h(t)表示假期,节日等特殊原因等造成的变化。
ϵt为噪声项,用他来表示随机无法预测的波动,我们假设ϵt是高斯的。

在这里插入图片描述

  • 时间序列模型:分析师可以根据不同的项目背景,建立不同的模型
  • 模型评估:根据模型对历史数据进行拟合,在模型参数不确定的情况下,进行多种尝试,并对模型进行评估
  • 呈现问题:尝试了多种参数后,模型依然不理想,则会把误差较大的原因呈现给分析师
  • 结果可视化:以可视化的方式呈现给分析师,分析师可以更加直观的得知问题所在并对模型进行调整

在Prophet模型中,模型评估和呈现问题是自动处理,分析师只需要注重模型建立和结果可视化就行

模型的简单应用

这里我们以基于Prophet模型对新冠的预测中的数据来为大家举例说明,在例子中,我们为大家详细介绍模型


首先向大家展示数据的格式
在这里插入图片描述
但是由于Prophet模型的输入必须包含两列数据:ds和y,其中ds列的数据必须是时间戳或日期,日期格式为 YYYY-MM-DD,时间戳格式为 YYYY-MM-DD HH:MM:SS;y列必须是数值,代表我们需要预测的信息。

假设我们要预测确诊病例的情况,首先我们需要对列名进行重命名

导入数据、修改列名

import pandas as pdpath="D:\\疫情预测\\USA.csv"
data=pd.read_csv(path,parse_dates=["date"])
data_new=data.rename(columns={"date":"ds","cases":"y"})

建立模型

from fbprophet import Prophet
pm=Prophet()

参数解释:
这里我们将简单介绍一下Prophet的参数

参数描述
growth模型的趋势函数,有linear和logistic两种,默认为linear函数
changepoints是指一个特殊的日期,在这个日期,模型的趋势将发生一定的改变(比如周末确诊人数一般会激增),我们可以手动设置,若不设置,则模型自动识别
n_changepoints表示changepoints的数量,如果changepoints指定了,则该参数失效不被使用,一般配合changepoint_range使用
changepoint_range估计趋势变化点的历史比例,若changepoints被指定,则该参数失效不被使用,一般配合n_changepoints使用。例如Prophet(changepoint_range=0.9,n_changepoints=30),表示从历史数据的前90%中自动选取30个趋势变化点。默认情况下是前80%取25个点
changepoint_prior_scale设定自动突变点选择的灵活性,值越大越容易出现changepoint

补充:
linear函数(分段线性函数)

  • 线性函数指的是y=kx+b,分段线性函数指的是在每一个子区间上,函数都是线性函数

在这里插入图片描述

logistic函数
在这里插入图片描述
growth=’linear’和growth=’logistic’该如何选择?
根据图像,很容易看出logistic有上限和下限,所以当项目背景存在一个饱和点的时候,可以选择logistic函数,一般情况使用linear函数,prohphet默认的也是选择linear


除此之外,还有其他参数,本章就不展开细说,下面列出所有参数:

class Prophet(object):def __init__(self,growth='linear',changepoints=None,n_changepoints=25,changepoint_range=0.8,yearly_seasonality='auto',weekly_seasonality='auto',daily_seasonality='auto',holidays=None,seasonality_mode='additive',seasonality_prior_scale=10.0,holidays_prior_scale=10.0,changepoint_prior_scale=0.05,mcmc_samples=0,interval_width=0.80,uncertainty_samples=1000,stan_backend=None):

模型训练以及预测

#首先分割数据集,我们这里采用预测区间前两个月的数据,来预测后一个月的数据,下面是分割训练集和预测集
train_data = data_new[-90:-30]
test_data =  data_new[-30:]
#建立模型并训练
pm=Prophet(changepoint_prior_scale=0.95)
pm.fit(train_data )
#预测30天
future = pm.make_future_dataframe(periods=30)
pm_forecast = pm.predict(future)

可视化

fig1 = pm.plot(pm_forecast)
fig2 = pm.plot_components(pm_forecast)

结果如图:
下图黑点为历史数据,蓝线为拟合曲线,蓝色范围为预测区间
在这里插入图片描述
下图为每周的趋势变化,可以得出结论,在周五的时候,确诊人数增加最快,周日增加最慢,那我们可以结合背景做出解释,比如周一到周五大家要工作,所以接触频繁,容易感染,周六周日大家都待在家里,接触少,所以感染不那么容易
在这里插入图片描述
自此,我们就通过Prophet模型,完成了对确诊人数的预测,并对结果进行了可视化,下一章我们会对prophet模型的其他方法以及参数进行描述和使用


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

相关文章

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对象&#…

时序预测工具库(Prophet)介绍+代码

时序预测工具库(Prophet) 一、Prophet 简介二、Prophet 适用场景三、Prophet 算法的输入输出四、Prophet 算法原理五、与机器学习算法的对比六、代码6.1 依赖安装6.2 预测demo6.3 效果图 七、参考资料八、官方链接:九、案例链接: …

图的顺序存储及其深度优先遍历和广度优先遍历

图的基本概念 在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关&am…

算法模板-深度优先遍历

简介 深度优先遍历,顾名思义对于树或者图中的某个节点,尽可能往一个方向深入搜索下去。具体而言,从某个节点v出发开始进行搜索,不断搜索直到该节点的所有边都被遍历完。对于很多树、图和矩阵地搜索问题,深度优先遍历是…

图的深度优先遍历java代码详解

代码是根据矩阵来实现深度优先遍历的 邻接结点就是按照vertex中的顺序来一个一个来找的 if(edges[i][j]>0&&!isVisited[j]) { return j; } 就很好的说明了 如果没找到就return -1 回到dfs(i)这一层 再retur…

图(深度优先遍历、广度优先遍历)

文章目录 一、图的概述1.1 什么是图1.2 图对比线性表和树1.3 图的常见概念 二、图的存储方式2.1 邻接矩阵2.2 邻接表 三、图的遍历3.1 图的深度优先遍历3.1.1 什么是深度优先遍历3.1.2 深度优先遍历的步骤3.1.3 深度优先遍历代码实现 3.2 图的广度优先遍历3.2.1 什么是广度优先…

树与图的深度优先遍历

目录 一、概念 二、操作说明 1.树与图的深度优先遍历 2.树的DFS序 3.树的深度 4.树的重心 5.图的连通块划分 三、例题实践 1.树的重心例题实战 a.题目描述 b.解题思路 c.代码实现 一、概念 树与图的深度优先遍历:深度优先遍历,就是在每一个…

算法总结-深度优先遍历和广度优先遍历

深度优先遍历(Depth First Search,简称DFS) 与广度优先遍历(Breath First Search,简称BFS)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等。 一、深度优先遍历 深度优先…

图的两种遍历:深度优先遍历+广度优先遍历

一、深度优先遍历 1、简介 深度优先遍历是指按照深度方向搜索,它类似于树的先根遍历,是树的先根遍历的推广。 基本思想(通俗) 选一条路走到 底,直到 走不通,就 原路返回看看 是否还有路可走,如…

C++实现图的深度优先遍历和广度优先遍历

图的深度和广度优先遍历 图的深度优先遍历1、算法思想2、邻接矩阵构造图3、邻接表构造图 图的广度优先遍历1、算法思想2、邻接矩阵构造图 参考 图的深度优先遍历 1、算法思想 (1)从图中的某个初始点 v 出发,首先访问初始点 v.(…

深度优先遍历

1.先序序列为a,b,c,d 的不同二叉树的个数是 (14) 。 13 14 15 16 f(n)c(n 2n)/n1 2.在构建哈弗曼树时,要使树的带权路径长度最小,只需要遵循一个原则,那就是:权重越大的结点离树…

图的遍历——深度优先遍历与广度优先遍历

目录 何谓遍历? 图的遍历特点 图的遍历方式 深度优先搜索 过程分析 案例分析: 算法的代码实现 测试案例: 测试结果如下: 遍历非连通图 算法复杂度分析 额外补充 广度优先搜索 过程分析 辅助队列 算法的代码实现 队…

图的深度优先遍历和广度优先遍历

本文参考自《大话数据结构》 文章目录 定义图的存储结构邻接矩阵邻接表 图的遍历深度优先遍历邻接矩阵代码邻接表代码 广度优先遍历邻接矩阵邻接表 最小生成树最短路径算法 定义 图(Graph) 是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V&#xff0…