乐趣区

关于机器学习:基于Streamlitprophet玩转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 建模办法


参考:

  1. https://github.com/artefactor…
  2. https://facebook.github.io/pr…
  3. https://github.com/xihuishawp…

欢送关注集体公众号:DS 数说

原文链接:https://mp.weixin.qq.com/s/Kf…

退出移动版