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

news2024/11/24 6:53:41

目录

一、Prophet 简介

二、Prophet 适用场景

三、Prophet 算法的输入输出

四、Prophet 算法原理

五、与机器学习算法的对比

六、代码

6.1 依赖安装

6.2 预测demo

七、参考资料

八、官方链接:

九、案例链接:


一、Prophet 简介

Prophet是Facebook开源的时间序列预测算法,可以有效处理节假日信息,并按周、月、年对时间序列数据的变化趋势进行拟合。根据官网介绍,Prophet对具有强烈周期性特征的历史数据拟合效果很好,不仅可以处理时间序列存在一些异常值的情况,也可以处理部分缺失值的情形。算法提供了基于Python和R的两种实现方式。

从论文上的描述来看,这个 prophet 算法是基于时间序列分解和机器学习的拟合来做的,其中在拟合模型的时候使用了 pyStan 这个开源工具,因此能够在较快的时间内得到需要预测的结果。

二、Prophet 适用场景

Prophet适用于具有明显的内在规律的商业行为数据,例如:有如下特征的业务问题:

•有至少几个月(最好是一年)的每小时、每天或每周观察的历史数据;•有多种人类规模级别较强的季节性趋势:每周的一些天和每年的一些时间;•有事先知道的以不定期的间隔发生的重要节假日(比如国庆节);•缺失的历史数据较大的异常数据的数量合理范围内;•有历史趋势的变化(比如因为产品发布);•对于数据中蕴含的非线性增长的趋势都有一个自然极限或饱和状态

三、Prophet 算法的输入输出

image.png


上图为一个时间序列场景:

黑色表示原始的时间序列离散点

深蓝色的线表示使用时间序列来拟合所得到的取值

浅蓝色的线表示时间序列的一个置信区间,也就是所谓的合理的上界和下界

•prophet 所做的事情就是:

•输入已知的时间序列的时间戳和相应的值;

•输入需要预测的时间序列的长度;

•输出未来的时间序列走势。

•输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。

传入prophet的数据分为两列 ds 和 y ,ds表示时间序列的时间戳y表示时间序列的取值
其中:

dspandas的日期格式,样式类似YYYY-MM-DD for a date or YYYY-MM-DD HH:MM:SS

y列必须是数值型,代表着我们希望预测的值。

通过 prophet 的计算,可以计算出:

•yhat,表示时间序列的预测值

•yhat_lower,表示预测值的下界

•yhat_upper,表示预测值的上界

四、Prophet 算法原理

算法模型:

模型整体由三部分组成:

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

其中:

•g(t) 表示趋势项,它表示时间序列在非周期上面的变化趋势;

•s(t) 表示周期项,或者称为季节项,一般来说是以周或者年为单位;

•h(t) 表示节假日项,表示时间序列中那些潜在的具有非固定周期的节假日对预测值造成的影响;

•  

即误差项或者称为剩余项,表示模型未预测到的波动,服从高斯分布;

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

五、与机器学习算法的对比

与先进的机器学习算法如LGBM相比,Prophet作为一个时间序列的工具。
优点就是不需要特征工程就可以得到趋势,季节因素和节假日因素。
但是这同时也是它的缺点之一,它无法利用更多的信息,如在预测商品的销量时,无法利用商品的信息,门店的信息,促销的信息等。

因此,寻找一种融合的方法是一个迫切的需求。

六、代码

测试数据集及代码获取地址:

https://github.com/SeafyLiang/machine_learning_study/blob/master/实践项目/prophet_time_forecast.py

6.1 依赖安装

# 安装pystan
conda install pystan

# 安装plotly
conda install plotly -y

# 安装prophet
sudo pip install fbprophet

6.2 预测demo

import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt

# 读入数据集
df = pd.read_csv('data/example_wp_log_peyton_manning.csv')
print(df.head())
# 拟合模型
m = Prophet()
m.fit(df)

# 构建待预测日期数据框,periods = 365 代表除历史数据的日期外再往后推 365 天
future = m.make_future_dataframe(periods=365)
future.tail()
# 预测数据集
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
# 展示预测结果
m.plot(forecast)
# 预测的成分分析绘图,展示预测中的趋势、周效应和年度效应
m.plot_components(forecast)
plt.show()

                                                                 image.png

                                                     image.png

七、参考资料

•时间序列模型Prophet使用详细讲解[1]

•Prophet官网[2]

•github项目[3]

•论文:Forecasting at scale[4]

•Facebook 时间序列预测算法 Prophet 的研究[5]

八、官方链接:

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

•github:https://github.com/facebook/prophet[7]

•官网:https://facebook.github.io/prophet/[8]

九、案例链接:

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

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

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

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

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

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

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

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

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

参考资料:时序预测开源工具包Prophet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习 Day1

目录 1. C关键字(C98) 2.命名空间 3. C输入&输出 1. C关键字(C98) C总计63个关键字,C语言32个关键字 目前只是初学阶段,只是大致的了解,以后再深入研究。 2.命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的&am…

C++中的类模版

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

Linux驱动开发——高级I/O操作(一)

一个设备除了能通过读写操作来收发数据或返回、保存数据,还应该有很多其他的操作。比如一个串口设备还应该具备波特率获取和设置、帧格式获取和设置的操作;一个LED设备甚至不应该有读写操作,而应该具备点灯和灭灯的操作。硬件设备是如此众多,…

PDF怎么转CAD文件?(免费!高效转换方法汇总)

一般而言,PDF图纸是不能修改的。若需修改,则需将PDF转CAD,此时如何满足PDF转CAD的需求呢?今天,我将教你两种免费的PDF转CAD的方法,助力高效办公。 1.本地软件转换法 这是用本地软件转换方法,支…

【系统集成项目管理工程师】项目管理一般知识

💥项目管理一般知识 一、什么是项目 1、项目定义 项目是为达到特定的目的,使用一定资源,在确定的期间内,为特定发起人提供独特的产品、服务或成果而进行的一系列相互关联的活动的集合。项目有完整的生命周期,有开始…

Dubbo(超级无敌认真好用,万字收藏篇!!!!)

文章目录Dubbo前言大型互联网架构目标集群和分布式集群分布式架构演进1 Dubbo概述1.1 Dubbo概念1.2 Dubbo架构图2 Dubbo快速入门2.1 Zookeeper的安装2.2 springBoot整合DubboZookeeper2.2.1 创建项目Dubbo--provider2.2.2 创建项目Dubbo--consumer2.2.3 测试3 Dubbo高级特性3.1…

可视化 | Flask+Pyecharts可视化模板

文章目录🏳️‍🌈 1. 系统说明界面🏳️‍🌈 2. 柱状图示例界面🏳️‍🌈 3. 饼状图示例界面🏳️‍🌈 4. 折现图示例界面🏳️‍🌈 5. 散点图示例界面&#x1f3…

人工智能(Pytorch)搭建transformer模型,真正跑通transformer模型,深刻了解transformer的架构

大家好,我是微学AI,今天给大家讲述一下人工智能(Pytorch)搭建transformer模型,手动搭建transformer模型,我们知道transformer模型是相对复杂的模型,它是一种利用自注意力机制进行序列建模的深度学习模型。相较于 RNN 和…

【数据结构Java】--图、BFS、DFS、拓扑结构

目录 一、图(Graph) 1.概念 2.有向图 3.出度、入度 4.无向图 5.简单图、多重图 6.无向完全图 7.有向完全图 8.有权图 9.连通图 10.连通分量(无向图) 11.强连通图(有向图) 12.强连通分量 13.邻接矩…

微服务架构-服务网关(Gateway)-权限认证(分布式session替代方案)

权限认证-分布式session替代方案 前面我们了解了Gateway组件的过滤器,这一节我们就探讨一下Gateway在分布式环境中的一个具体用例-用户鉴权。 1、传统单应用的用户鉴权 从我们开始学JavaEE的时候,就被洗脑式灌输了一种权限验证的标准做法,…

Adobe全新AI工具引关注,Adobe firefly助力创作更高效、更有创意

原标题:Adobe全新AI工具引关注,Adobe firefly(萤火虫)助力创作更高效、更有创意。 以ChatGPT为首的生成式AI、AIGC等工具的战局正如火如荼的进行中..... 除了微软、百度的聊天机器人和一些初创公司的AI画图工具令人惊艳&#xff…

Greenplum数据库执行器——PartitionSelector执行节点

为了能够对分区表有优异的处理能力,对于查询优化系统来说一个最基本的能力就是做分区裁剪partition pruning,将query中并不涉及的分区提前排除掉。如下执行计划所示,由于单表谓词在parititon key上,在优化期间即可确定哪些可以分区…

003:Mapbox GL设定不同的投影方式

第003个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中设定不同的投影方式 。默认情况下为Mercator投影,或者设置为null或者undefined时候,显示为Mercator投影。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源…

【分享】维格表集成易聊实现线索自动化,减少流失率

公司•介绍 北京某职业教育公司专注行业发展、国际就业、留学、移民咨询。秉承专业性至上的原则,与行业内专家、高等学府以及产业集团合作,并邀请各领域专家组建了强大的专委会团队,为公司的业务开展提供专业性支持。 客户•遇到的问题 作为…

【Java面试八股文宝典之MySQL篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day23

大家好,我是陶然同学,软件工程大三即将实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…

用Spring Doc代替Swagger

1 OpenApi OpenApi 是一个业界的 API 文档标准,是一个规范,这个规范目前有两大实现,分别是: SpringFoxSpringDoc 其中 SpringFox 其实也就是我们之前所说的 Swagger,SpringDoc 则是我们今天要说的内容。 OpenApi 就…

苹果智能戒指专利曝光,Find My技术加持不易丢

根据美国商标和专利局(USPTO)公示的清单,苹果近日获得了一项“智能戒指”相关的设计专利,编号为“US 11625098 B2”。 这款智能戒指专利主要服务于增强现实(AR)或者虚拟现实(VR)场…

leetcodeTmp

39. 组合总和 39. 组合总和 DFS排列&#xff1a;每个元素可选0次&#xff0c;1次以及多次 public List<List<Integer>> combinationSum(int[] candidates, int target) {//Arrays.sort(candidates);//注释了也能通过this.candidates candidates;ans.clear();co…

Omniverse Replicator 入门

OmniverseReplicator入门 Omniverse Replicator 作为 Omniverse Kit 扩展创建&#xff0c;并通过 Omniverse Code 方便地分发。 要使用复制器&#xff0c;您需要下载可在此处找到的 Omniverse 启动器。 有关 Omniverse 启动器的更多详细信息&#xff0c;请查看此视频。 使用…

kafaka学习

kafaka 消息队列&#xff1a;通常用来解决一个进程内&#xff0c;多线程环境下&#xff0c;资源竞争的问题&#xff1b;但是消息队列的锁的粒度太大了&#xff0c;需要进行拆分 消息队列中间组件 一个进程中&#xff0c;同时存在生产者、消费者、消息队列&#xff0c;在分布…