基于Streamlit_prophet玩转Prophet时序预测
既然是玩转,就得easy,在通俗搞懂核心原理的基础上,重在实践。
本文首先介绍Prophet模型基本使用,再介绍一个开箱即用的开源项目--Streamlit_prophet,进一步降低Prophet使用门槛(甚至给运营、业务都会用~)
简介
时间序列受4种成分影响:
- 趋势:宏观、长期、持续性的作用力
- 周期:比如商品价格在较短时间内,围绕某个均值上下波动;
- 季节:变化规律相对固定,并呈现某种周期特征;“季节”不一定按年计,每周、每天的不同时段的规律,也可称作季节性。
- 随机:随机的不确定性,也就是指随机过程 (Stochastic Process)。
4种成分叠加起来就是对整个时序的影响,有加法模型和乘法模型:
- 加法模型:相对独立,4个成分间的影响较小;
- 乘法模型:相互影响更明显;
之前时序文章介绍了AR、MA、ARIMA等传统的时序模型,但用起来较麻烦,需要不断调整d\p\q三个参数,虽然可以通过“无脑”随机搜索交叉验证找出合适的参数,但并不丝滑,就算是优秀的数据分析师都会感觉头皮发麻~(哈哈哈,大佬勿喷)
Prophet,就是为上述场景量身定制的,直接通过参数去调整4种成分,简单易用,效果拉满(闪亮登场~)。
Prophet使用
1、安装
这里的坑比较多(win下安装),网上也有很多爬坑记录,但有一种最简单的方式--conda安装:
conda install pystan
conda install prophet
2、使用
基本用法
和scikit-learn的用法风格类似:
from prophet import Prophet
import pandas as pd
df = pd.read_csv('example_wp_log_peyton_manning.csv')
# 0、基本方法
# 创建预测器,拟合数据
m = Prophet()
m.fit(df)
# 设置预测框
future = m.make_future_dataframe(periods=365)
future.tail()
# 对未来时间点进行预测,预测给出预测值和置信区间
forecast = m.predict(future)
forecast[['ds','yhat','yhat_lower','yhat_upper']].tail()
# 画图
fig1 = m.plot(forecast)
# 画出分量图
fig2 = m.plot_components(forecast)
引入假期因子
# 1、对【假期和特别活动】进行建模
# 通过 holidays 参数,将假期因素加入模型
playoffs = pd.DataFrame({
'holiday': 'playoff',
'ds': pd.to_datetime(['2008-01-13', '2009-01-03', '2010-01-16',
'2010-01-24', '2010-02-07', '2011-01-08',
'2013-01-12', '2014-01-12', '2014-01-19',
'2014-02-02', '2015-01-11', '2016-01-17',
'2016-01-24', '2016-02-07']),
'lower_window': 0,
'upper_window': 1,
})
superbowls = pd.DataFrame({
'holiday': 'superbowl',
'ds': pd.to_datetime(['2010-02-07', '2014-02-02', '2016-02-07']),
'lower_window': 0,
'upper_window': 1,
})
holidays = pd.concat((playoffs, superbowls))
# 传入假期时间构建预测器
m = Prophet(holidays=holidays)
forecast = m.fit(df).predict(future)
fig = m.plot_components(forecast)
引入法定节假日因子
# 2、另外引入【法定节假日】,加入模型(通过add_country_holidays方法)
m = Prophet(holidays=holidays)
m.add_country_holidays(country_name='US') # CN :中国法定节假日
m.fit(df)
forecast = m.predict(future)
fig = m.plot_components(forecast)
季节性调整
使用“部分傅里叶和"来估计季节性:
# 3、更改年季节性参数
# 年季节性,默认是10;周季节性,默认是3
# 增加傅立叶项的数量可以使季节性适应更快的变化周期,但也可能导致过度拟合
from prophet.plot import plot_yearly
m = Prophet(yearly_seasonality=20).fit(df)
a = plot_yearly(m)
Prophet默认:【每周】和【每年】的季节性,可以使用 add_seasonality方法添加其他季节性,比如每月、每季度、每小时:
# 4、指定自定义季节性
# 关闭周季节性,加入月季节性
m = Prophet(weekly_seasonality=False)
m.add_seasonality(name='monthly', period=30.5, fourier_order=5)
forecast = m.fit(df).predict(future)
fig = m.plot_components(forecast)
如果发现假期效应过拟合了,可以通过holidays_prior_scale参数调整(默认是10),降低该参数会减弱假期效应;seasonality_prior_scale,季节效应同理
m = Prophet(holidays=holidays, holidays_prior_scale=0.05).fit(df)
forecast = m.predict(future)
forecast[(forecast['playoff'] + forecast['superbowl']).abs() > 0][
['ds', 'playoff', 'superbowl']][-10:]
还有其他用法,不多介绍,可参考个人github上的代码示例,示例来源于Prophet官方文档。
Streamlit_prophet部署
开源项目官方介绍:
Deploy a Streamlit app to train, evaluate and optimize a Prophet forecasting model visually.
可知,streamlit_prophet是构建在streamlit上、基于prophet时序预测模型的应用。。看官方视频介绍,感觉很好用,跑起来~
1、部署
和本地安装prophet一样,坑很多,但还是基于conda去安装就行。
创建虚拟环境:
conda create -n streamlit_prophet python=3.8
activate streamlit_prophet
安装streamlit_prophet:
conda install pystan
pip install -U streamlit_prophet
#启动服务
streamlit_prophet deploy dashboard
本地访问:http://127.0.0.1:8080/ ,浏览器看到如下界面即说明部署成功~
2、使用介绍
官方自带了一些数据示例,能快速上手;遗憾的是,我们使用只能上传csv文件数据(限制了最大200M),不能直连数仓数据。
对于数据列有选择、过滤、抽样、清洗模块:
调整潜在拐点、季节、节假日效应参数:
模型验证、预测:
3、模型结果
点击左上角运行预测选项,开始模型预测,左侧参数调整了,模型会自动重跑:
模型性能指标:
模型错误分析,第二个图中,离红线越远的点,预测误差越离谱(便于后续模型调整,误差最大时间点,是否考虑剔除异常数据):
蓝色阴影是模型预测结果的置信区间(80%),红线是模型估计的趋势:
更多细节需要小伙伴们自己去尝试~这里不一一展示
小结
Streamlit_prophet是一个能大大简化时序预测的优秀数据产品,对于数据分析师来说非常友好,但最大缺点是不能直连数仓进行预测,有些遗憾~(看开发者后续会不会考虑接入吧)。
但想要用好这类产品(不限于此产品),核心还是在于了解业务、深入理解时序模型、Prophet建模方法。
参考:
- https://github.com/artefactory/streamlit_prophet
- https://facebook.github.io/prophet/docs/quick_start.html#python-api
- https://github.com/xihuishawpy/little_demo/tree/main/Prophet
欢迎关注个人公众号:DS数说
基于Streamlit_prophet玩转Prophet时序预测的更多相关文章
- R+先知︱Facebook大规模时序预测『真』神器——Prophet(遍地代码图)
经统专业看到预测的packages都是很眼馋的.除了之前的forecast包,现在这个prophet功能也很强大.本packages是由机器之心报道之后,抽空在周末试玩几小时.一些基本介绍可见机器之心 ...
- facebook开源的prophet时间序列预测工具---识别多种周期性、趋势性(线性,logistic)、节假日效应,以及部分异常值
简单使用 代码如下 这是官网的quickstart的内容,csv文件也可以下到,这个入门以后后面调试加入其它参数就很简单了. import pandas as pd import numpy as n ...
- Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测
Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931 近日,Artur Suilin 等人发布了 Kaggl ...
- 教程 | Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测
https://mp.weixin.qq.com/s/JwRXBNmXBaQM2GK6BDRqMw 选自GitHub 作者:Artur Suilin 机器之心编译 参与:蒋思源.路雪.黄小天 近日,A ...
- 作为深度学习最强框架的TensorFlow如何进行时序预测!(转)
作为深度学习最强框架的TensorFlow如何进行时序预测! BigQuant 2 个月前 摘要: 2017年深度学习框架关注度排名tensorflow以绝对的优势占领榜首,本文通过一个小例子介绍了T ...
- 基于Python玩转人工智能最火框架 TensorFlow应用实践
慕K网-299元-基于Python玩转人工智能最火框架 TensorFlow应用实践 需要联系我,QQ:1844912514
- 基于Python玩转人工智能最火框架 TensorFlow应用实践✍✍✍
基于Python玩转人工智能最火框架 TensorFlow应用实践 随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架.而在昨天机器之心发起 ...
- 深度学习|基于LSTM网络的黄金期货价格预测--转载
深度学习|基于LSTM网络的黄金期货价格预测 前些天看到一位大佬的深度学习的推文,内容很适用于实战,争得原作者转载同意后,转发给大家.之后会介绍LSTM的理论知识. 我把code先放在我github上 ...
- 基于深度学习的建筑能耗预测01——Anaconda3-4.4.0+Tensorflow1.7+Python3.6+Pycharm安装
基于深度学习的建筑能耗预测-2021WS-02W 一,安装python及其环境的设置 (写python代码前,在电脑上安装相关必备的软件的过程称为环境搭建) · 完全可以先安装anaconda(会自带 ...
随机推荐
- MySQL高级以及锁机制
MySQL高级 推荐阅读: 锁:https://www.cnblogs.com/zwtblog/tag/锁/ 数据库:https://www.cnblogs.com/zwtblog/tag/数据库/ ...
- re模块、collections模块、time模块、datetime模块
正则表达式之re模块 re.findall用法(重要) re.findall( '正则表达式' , '待匹配的字符' ) 找出所有的目标字符,用列表的形式展现,如果找不到返回空列表. import r ...
- SpringBoot系列——防重放与操作幂等
前言 日常开发中,我们可能会碰到需要进行防重放与操作幂等的业务,本文记录SpringBoot实现简单防重与幂等 防重放,防止数据重复提交 操作幂等性,多次执行所产生的影响均与一次执行的影响相同 解决什 ...
- 【GPLT】 图着色问题(c++)
题目如下: 这道题就是奇葩,多少有点低质量,这题不难,知识点就是邻接矩阵,但有以下奇葩点 1.颜色的编号是1-v 不是1-k,这点卡了我一会: 2.颜色涂色可以多于3,也可以少于3(这其实正常,但如果 ...
- OpenHarmony 3.1 Beta 样例:使用分布式菜单创建点餐神器
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 刘丽红 随着社会的进步与发展,科技手段的推陈出新,餐饮行业也在寻求新的突破与变革,手机扫描二维码点餐系统已经成为餐饮行 ...
- Go学习-基本语法(一)
前言 一直对Service Mesh相关内容比较感兴趣,后面一路学习了Dcoker.Kubernetes等相关内容,可以说是对基本概念和使用有一定了解,随着开始学习一些相关的组件的时候,发现基本上全部 ...
- 【Hadoop】9、Sqoop组件
目录 Sqoop组件安装与配置 1.使用xftp将软件包上传到/opt/software 2.部署sqoop(在master上执行) 3.启动sqoop集群(在master上执行) 4.连接hive配 ...
- openstack之Designate组件,入门级安装(快速)
@ 目录 前言 架构 前提准备 创建 DNS 服务 API 端点 安装和配置组件 验证操作 前言 Designate 是一个开源 DNS 即服务实施,是用于运行云的 OpenStack 服务生态系统的 ...
- 一文彻底搞懂MySQL分区
一个执着于技术的公众号 一.InnoDB逻辑存储结构 首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地存放在表空间,表空间又由段,区,页组成. 段 段就是上图的segment ...
- 使用requests爬取梨视频、bilibili视频、汽车之家,bs4遍历文档树、搜索文档树,css选择器
今日内容概要 使用requests爬取梨视频 requests+bs4爬取汽车之家 bs4遍历文档树 bs4搜索文档树 css选择器 内容详细 1.使用requests爬取梨视频 # 模拟发送http ...