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模型的其他方法以及参数进行描述和使用

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

  1. python 时间序列prophet 模型分析_手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)...

    原标题:手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码) 作者:ANKIT CHOUDHARY:翻译:王雨桐:校对:丁楠雅: 本文约3000字,建议阅读12分钟. 本文将通过 ...

  2. 云音乐用户增长预测之Prophet模型

    Prophet模型是Meta公司开发并应用于Facebook/Twitter等产品的开源时间序列模型,适用于MAU/DAU和新增的预测.在云音乐的业务中,此模型不仅能用于DAU预测,也能用于评估活动和 ...

  3. R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、使用lm模型构建简单线性回归模型、使用lmp函数生成置换检验回归分析模型

    R语言使用lmPerm包应用于线性模型的置换方法(置换检验.permutation tests).使用lm模型构建简单线性回归模型.使用lmp函数生成置换检验回归分析模型(Permutation te ...

  4. python多线程实现生产者消费者_用Python实现多线程“生产者-消费者”模型的简单例子...

    用 Python 实现多线程"生产者 - 消费者"模型的简单例子 生产者消费者问题是一个著名的线程同步问题, 该问题描述如下: 有一个生产者在生产产品, 这些产品将提供给若干个消费 ...

  5. Java网络编程案例--CS模型的简单实现

    Java网络编程案例–CS模型的简单实现 Java网络编程案例CS模型的简单实现 基本概述 程序原理图 源代码 基本概述 该程序采用C/S模型,在服务器端简单的建立了一个多线程类,来实现对多个客户端传 ...

  6. Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据

    #2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...

  7. 灰色模型 java代码_灰色模型的简单Java实现

    前几天在以前的遗留代码中发现一个问题,就是我生成的一个数据的走势曲线的预测值(用于灰色时间序列预测)总是和老代码里的不一致,具体来说就是:遗留代码里面的预测值的斜率总是为零,相比之下我生成的就比较合理 ...

  8. cad怎么表示出一个孔_怎么训练出一个NB的Prophet模型

    上篇<神器の争>主要是介绍Prophet的特点以及prophet入门的一些注意事项,但离真正的实际运用还有段距离.本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验. ...

  9. matlab中portcons,Matlab在马柯维茨均值-方差模型的简单应用.ppt

    Matlab在马柯维茨均值-方差模型的简单应用 Matlab在马柯维茨均值-方差模型的简单应用 陈思仰 20100512003 Markowitz(1952)发展了一 个在不确定条件下严格陈述的 可操 ...

最新文章

  1. 手写简单的双向数据绑定
  2. 基于ARP的网络扫描工具netdiscover
  3. 你真的会二分查找吗?
  4. 命名实参和可选实参(C#)
  5. Yarn ResourceManager High Availability
  6. 为什么阿里飞猪、滴滴、携程都被质疑滥用大数据杀熟?
  7. 一个故事告诉你什么是消息队列
  8. Oracle Database 11g 下载
  9. 四川传媒学院计算机应用技术分数,四川传媒学院历年各专业录取文化最低控制分数线一览表...
  10. 酒店服务机器人或被用于长期偷窥旅客
  11. 李炎恢PHP高端培训视频教程
  12. android ios相机,曝苹果iOS13相机加入了这项功能 安卓上早就有了
  13. 织梦栏目地址使用栏目名称首字母
  14. Python之龟兔赛跑
  15. 我们要不要和to B“霸王龙”企业交朋友?
  16. UEFI——UEFI Package Module
  17. 关于微信小程序Tomcat服务器后端程序搭建
  18. php api 接口
  19. continue和break的区别,以及如何跳出多重循环(或者判断)语句
  20. 【idea敲代码没有提示解决办法】

热门文章

  1. 去掉kindle电子书的DRM
  2. I2C 协议抓包,学习,总结
  3. MobData助力金融行业拓客、风控、运营,数据驱动下的新方案
  4. 10 个吸引眼球的滚动动画创意
  5. 广东省工程类人才需求暴涨
  6. java html ubb_简单的Html转换UBB的程序
  7. 【MyAndroid】viewpage+cardView卡片叠层效果展示(2)--100个经典UI设计模板(98/100)
  8. python点亮led_用Python点亮led灯
  9. 2022年全球市场热力步枪瞄准镜总体规模、主要生产商、主要地区、产品和应用细分研究报告
  10. CSS 设置超过一定高度后出现滚动条