大白话Prophet模型以及简单的应用(一)
Prophet 是基于加法模型预测时间序列数据。适合于具有季节性影响的时间序列和具有多个季节的历史数据。Prophet对数据中的异常值和缺失值以及趋势的强烈变化有着较好的鲁棒性(耐操性),所以通常情况下都不需要对数据进行处理。
优点:
- 准确快速
本模型是Facebook开源的一个模型,据官网说本模型已经大量运用于许多应用程序中,发现在大多数情况下,它的性能优于其他方法,并且能在短时间内的得到预测 - 参数可解释强
模型中的参数都有着比较具象的含义,有季节性(年月日为周期)、节假日,操作者可以结合项目背景,进行调参,并对别人做出解释
模型原理
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模型的其他方法以及参数进行描述和使用
大白话Prophet模型以及简单的应用(一)相关推荐
- python 时间序列prophet 模型分析_手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)...
原标题:手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码) 作者:ANKIT CHOUDHARY:翻译:王雨桐:校对:丁楠雅: 本文约3000字,建议阅读12分钟. 本文将通过 ...
- 云音乐用户增长预测之Prophet模型
Prophet模型是Meta公司开发并应用于Facebook/Twitter等产品的开源时间序列模型,适用于MAU/DAU和新增的预测.在云音乐的业务中,此模型不仅能用于DAU预测,也能用于评估活动和 ...
- R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、使用lm模型构建简单线性回归模型、使用lmp函数生成置换检验回归分析模型
R语言使用lmPerm包应用于线性模型的置换方法(置换检验.permutation tests).使用lm模型构建简单线性回归模型.使用lmp函数生成置换检验回归分析模型(Permutation te ...
- python多线程实现生产者消费者_用Python实现多线程“生产者-消费者”模型的简单例子...
用 Python 实现多线程"生产者 - 消费者"模型的简单例子 生产者消费者问题是一个著名的线程同步问题, 该问题描述如下: 有一个生产者在生产产品, 这些产品将提供给若干个消费 ...
- Java网络编程案例--CS模型的简单实现
Java网络编程案例–CS模型的简单实现 Java网络编程案例CS模型的简单实现 基本概述 程序原理图 源代码 基本概述 该程序采用C/S模型,在服务器端简单的建立了一个多线程类,来实现对多个客户端传 ...
- Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据
#2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...
- 灰色模型 java代码_灰色模型的简单Java实现
前几天在以前的遗留代码中发现一个问题,就是我生成的一个数据的走势曲线的预测值(用于灰色时间序列预测)总是和老代码里的不一致,具体来说就是:遗留代码里面的预测值的斜率总是为零,相比之下我生成的就比较合理 ...
- cad怎么表示出一个孔_怎么训练出一个NB的Prophet模型
上篇<神器の争>主要是介绍Prophet的特点以及prophet入门的一些注意事项,但离真正的实际运用还有段距离.本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验. ...
- matlab中portcons,Matlab在马柯维茨均值-方差模型的简单应用.ppt
Matlab在马柯维茨均值-方差模型的简单应用 Matlab在马柯维茨均值-方差模型的简单应用 陈思仰 20100512003 Markowitz(1952)发展了一 个在不确定条件下严格陈述的 可操 ...
最新文章
- 手写简单的双向数据绑定
- 基于ARP的网络扫描工具netdiscover
- 你真的会二分查找吗?
- 命名实参和可选实参(C#)
- Yarn ResourceManager High Availability
- 为什么阿里飞猪、滴滴、携程都被质疑滥用大数据杀熟?
- 一个故事告诉你什么是消息队列
- Oracle Database 11g 下载
- 四川传媒学院计算机应用技术分数,四川传媒学院历年各专业录取文化最低控制分数线一览表...
- 酒店服务机器人或被用于长期偷窥旅客
- 李炎恢PHP高端培训视频教程
- android ios相机,曝苹果iOS13相机加入了这项功能 安卓上早就有了
- 织梦栏目地址使用栏目名称首字母
- Python之龟兔赛跑
- 我们要不要和to B“霸王龙”企业交朋友?
- UEFI——UEFI Package Module
- 关于微信小程序Tomcat服务器后端程序搭建
- php api 接口
- continue和break的区别,以及如何跳出多重循环(或者判断)语句
- 【idea敲代码没有提示解决办法】
热门文章
- 去掉kindle电子书的DRM
- I2C 协议抓包,学习,总结
- MobData助力金融行业拓客、风控、运营,数据驱动下的新方案
- 10 个吸引眼球的滚动动画创意
- 广东省工程类人才需求暴涨
- java html ubb_简单的Html转换UBB的程序
- 【MyAndroid】viewpage+cardView卡片叠层效果展示(2)--100个经典UI设计模板(98/100)
- python点亮led_用Python点亮led灯
- 2022年全球市场热力步枪瞄准镜总体规模、主要生产商、主要地区、产品和应用细分研究报告
- CSS 设置超过一定高度后出现滚动条