既然是玩转,就得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建模方法


参考:

  1. https://github.com/artefactory/streamlit_prophet
  2. https://facebook.github.io/prophet/docs/quick_start.html#python-api
  3. https://github.com/xihuishawpy/little_demo/tree/main/Prophet

欢迎关注个人公众号:DS数说

基于Streamlit_prophet玩转Prophet时序预测的更多相关文章

  1. R+先知︱Facebook大规模时序预测『真』神器——Prophet(遍地代码图)

    经统专业看到预测的packages都是很眼馋的.除了之前的forecast包,现在这个prophet功能也很强大.本packages是由机器之心报道之后,抽空在周末试玩几小时.一些基本介绍可见机器之心 ...

  2. facebook开源的prophet时间序列预测工具---识别多种周期性、趋势性(线性,logistic)、节假日效应,以及部分异常值

    简单使用 代码如下 这是官网的quickstart的内容,csv文件也可以下到,这个入门以后后面调试加入其它参数就很简单了. import pandas as pd import numpy as n ...

  3. Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测

    Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931   近日,Artur Suilin 等人发布了 Kaggl ...

  4. 教程 | Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测

    https://mp.weixin.qq.com/s/JwRXBNmXBaQM2GK6BDRqMw 选自GitHub 作者:Artur Suilin 机器之心编译 参与:蒋思源.路雪.黄小天 近日,A ...

  5. 作为深度学习最强框架的TensorFlow如何进行时序预测!(转)

    作为深度学习最强框架的TensorFlow如何进行时序预测! BigQuant 2 个月前 摘要: 2017年深度学习框架关注度排名tensorflow以绝对的优势占领榜首,本文通过一个小例子介绍了T ...

  6. 基于Python玩转人工智能最火框架 TensorFlow应用实践

    慕K网-299元-基于Python玩转人工智能最火框架 TensorFlow应用实践 需要联系我,QQ:1844912514

  7. 基于Python玩转人工智能最火框架 TensorFlow应用实践✍✍✍

    基于Python玩转人工智能最火框架  TensorFlow应用实践 随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架.而在昨天机器之心发起 ...

  8. 深度学习|基于LSTM网络的黄金期货价格预测--转载

    深度学习|基于LSTM网络的黄金期货价格预测 前些天看到一位大佬的深度学习的推文,内容很适用于实战,争得原作者转载同意后,转发给大家.之后会介绍LSTM的理论知识. 我把code先放在我github上 ...

  9. 基于深度学习的建筑能耗预测01——Anaconda3-4.4.0+Tensorflow1.7+Python3.6+Pycharm安装

    基于深度学习的建筑能耗预测-2021WS-02W 一,安装python及其环境的设置 (写python代码前,在电脑上安装相关必备的软件的过程称为环境搭建) · 完全可以先安装anaconda(会自带 ...

随机推荐

  1. Mybatis映射文件动态SQL语句-02

    foreach UserMapper.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP ...

  2. Protoc安装

    系统:linux 记住,千万别混乱版本,一般protoc可执行文件在/usr/local/bin/或/usr/bin/下 个人这里使用3.13版本示例,下面两部分命令可以写入shell脚本,记住执行要 ...

  3. 论文翻译:2021_Performance optimizations on deep noise suppression models

    论文地址:深度噪声抑制模型的性能优化 引用格式:Chee J, Braun S, Gopal V, et al. Performance optimizations on deep noise sup ...

  4. 图数据库|基于 Nebula Graph 的 BetweennessCentrality 算法

    本文首发于 Nebula Graph Community 公众号 ​在图论中,介数(Betweenness)反应节点在整个网络中的作用和影响力.而本文主要介绍如何基于 Nebula Graph 图数据 ...

  5. 新手入门C语言第九章:C函数

    C 函数 函数是一组一起执行一个任务的语句.每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数.您可以把代码划分到不同的函数中.如何划分代码到不同的函数中 ...

  6. Prometheus TSDB存储原理

    Prometheus 包含一个存储在本地磁盘的时间序列数据库,同时也支持与远程存储系统集成,比如grafana cloud 提供的免费云存储API,只需将remote_write接口信息填写在Prom ...

  7. Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题

    问题:Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题 解决方案: 修改Visual Studio 配置项 [工具]-[选项]-[项目和解决方案]-[Web项目]-[ ...

  8. Java函数的学习

    函数的定义 - 定义的位置:定义在类的内部 - 组成部分: 函数修饰符 类型 函数名(形式参数){ 局部变量: 注释: 函数体: } 函数的调用 - 调用函数时使用 : `函数名():` - 函数在执 ...

  9. WEB安全信息收集

    目录 信息收集 子域名&敏感信息 敏感信息收集--Googlehack 敏感信息收集--收集方向 空间测绘引擎域名资产收集 子域名收集 WEB指纹 端口扫描 IP查询 cms识别 WAF识别 ...

  10. 超越iTerm! 号称下一代终端神器,功能贼强大!

    程序员的一生,用的最多的两个工具,一个是代码编辑器(Code Editor),另外一个就是命令行终端工具(Terminal).这两个工具对于提高开发效率至关重要. 代码编辑器在过去的 40 年里不断进 ...