Python爬虫与Stata应用能力提升与实证前沿  寒假工作坊

Author: Greg Rafferty Title: Forecasting in Python with Facebook Prophet-How to tune and optimize Prophet using domain knowledge to add greater control to your forecasts. Site https://towardsdatascience.com/forecasting-in-python-with-facebook-prophet-29810eb57e66

网络上有很多prophet教程,但大多都比较肤浅,没有教程教我们如何优化Prophet模型,也没有说清楚如何结合分析师经验进行分析预测。在本篇教程中,我试图在这两个问题上多下点功夫。

之前我分享过用ARIMA算法来预测美国商业飞行市场乘客数。ARIMA能很好的预测短期趋势,但是Facebook的工程师构建的Prophet框架还能做ARIMA做不了的事情。Prophet底层是STAN语言,这是一种概率编程语言。这使Prophet具有贝叶斯统计提供的许多优势,包括季节性,领域知识的和使用置信区间来进行风险估计。

安装

!pip3 install fbprophet

文章末尾会有jupyter notebook下载方式

航空乘客数据集

prophet需要传入的时间序列数据有两个字段

  • ds 日期

  • y 所在日期对应的值

import pandas as pd
passengers = pd.read_csv('data/AirPassengers.csv', header=0,names=['ds', 'y'])
passengers['ds']=pd.to_datetime(passengers['ds'])
passengers.head()

import matplotlib.pyplot as plt
import seaborn as sns
sns.lineplot(x='ds', y='y', data=passengers)

简单的绘图,趋势是上升的,我们想了解更多,这里就需要用到prophet库。

Prophet参数解读

这里看不懂可以先跳过去,之后看到实际例子再回来瞅瞅

Prophet(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.8, uncertainty_samples=1000)
  • growth: 趋势默认为线性增长'linear', 还有 'logistic'

  • changepoints: 默认不指定改变点,prophet会根据趋势自动搜寻潜在的改变点

  • n_changepoints:如果changepoints设置了,该参数不起作用;如果changepoints没有设置,那么改变点将在changepointrange范围内搜寻。默认设置为25

  • changepoint_range: 范围0-1,表示改变点落在趋势中的可能的范围。

  • yearly_seasonality: 即数据存在年度周期性变化,拟合年度趋势。参数有'auto', 参数有'auto'、True和False

  • weekly_seasonality: 同上,拟合周度趋势,默认为auto, 参数有'auto'、True和False

  • daily_seasonality: 同上,拟合日度趋势,默认为auto, 参数有'auto'、True和False

  • holidays:默认为None,如果要指定传入节假日数据,数据格式为dataframe,有两个指定的字段holiday和ds,其中holiday列的数据为字符串, ds列为date数据类型

  • seasonality_mode: 趋势模式有'additive'和'multiplicative',默认为加法'additive'

  • seasonality_prior_scale: 趋势缩放系数,如果该参数大,会让后续趋势波动变大。如果系数较小,会抑制趋势甚至熨平趋势。默认参数设置为10

  • holiday_prior_scale: 类似于seasonalitypriorscale参数的作用,主要用于解释节假日对趋势波动幅度起到熨平或者加大波动强度对作用。默认也是10

  • changepoint_prior_scale:类似于seasonalitypriorscale参数的作用,主要用于解释改变点对趋势波动幅度起到熨平或者加大波动强度对作用。默认是0.05

  • mcmc_samples:参数为整数。如果大于0, 模型使用贝叶斯推断;如果设置为0,使用最大后验概率估计(MAP)

  • interval_width:浮点数类型,为预测提供不确定性区间的宽度。如果mcmcsamples = 0,则模型使只使用MAP估计得出的趋势中的不确定性;如果mcmc.samples> 0,则将对所有模型参数进行积分,其中将包括季节性不确定性。

  • uncertainty_samples:用于估计不确定性间隔的模拟次数,默认为1000

趋势分解

我们想看看乘客出行的规律,比如

  • 乘客出行的总体趋势是上升还是下降

  • 每周的星期几是出行高峰

  • 12个月份是否存在季度或者月份区别

这里我做一个6年的预测,频率是月份,即未来 6*12=72 期的预测。

from fbprophet import Prophet
import matplotlib.pyplot as plt
#Prophet默认禁用了周度,这里将其打开,设置为True
prophet = Prophet(weekly_seasonality=True)
#prophet模型对passengers数据进行拟合
prophet.fit(passengers)
#构造未来72期(12年,月度,共72期)
future = prophet.make_future_dataframe(periods=12*6, freq='M')
fig = prophet.plot_components(forecast)
plt.show()

看图总结

  • 航空出行的总体趋势是稳步发展。

  • 每周的周五是出行高峰期,这跟我们的常识一致。

  • 每年年度范围内,2月, 678航空乘客较多。

还有一个要注意的地方, 而且我们发现在1954-1956之前趋势有转折,在此之后增长加快了一些。这说明在1954-1956年区间段有较大的转折,可能是政策发生改变。

标注改变

add_changepoints_to_plot(ax, m, fcst)

在趋势图中加入改变的标注

  • ax: 趋势图,这里我们输入的fig.gca() gca是get current axis的意思

  • m:prophet模型

  • fcst: prophet的预测

这里我们可以在图中标注改变点,使用到 addchangepointsto_plot 函数

from fbprophet import Prophet
from fbprophet.plot import add_changepoints_to_plot
#Prophet默认禁用了周度和,这里将其打开,设置为True
prophet = Prophet(weekly_seasonality=True)
#prophet模型对passengers数据进行拟合
prophet.fit(passengers)
#构造未来72期(12年,月度,共72期)
future = prophet.make_future_dataframe(periods=12*6, freq='M')
#预测
forecast = prophet.predict(future)
#forecast趋势中有过去真实对数据,也有未来72期的预测值
fig = prophet.plot(forecast)
#在趋势图中加入断点标注
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)
a

近期文章

精选课程 | Python数据分析实战(学术)

Python爬虫与Stata应用能力提升与实证前沿  寒假工作坊

使用Python读取图片中的文本数据

Loughran&McDonald金融文本情感分析库

股评师分析报告文本情感分析预测股价

如何使用seaborn绘制组合图

代码不到40行的超燃动态排序图

使用Python自动生成事件分析图谱

使用分析师报告中含有的情感信息预测上市公司股价变动

日期数据操作第1期 datetime库

日期数据操作第2期 pandas库

史上最大规模1.4亿中文知识图谱开源下载

【公开视频课】Python语法快速入门

【公开视频课】Python爬虫快速入门

文本数据分析文章汇总(2016-至今)

当文本分析遇到乱码(ง'⌣')ง怎么办?

当pandas遇上数据类型问题

如何理解pandas中的transform函数

一行pandas代码生成哑变量

Python最被低估的库,用好了效率提升10倍!

课件获取方式,请在公众号后台回复关键词“20191214

觉得本文有用,请不吝点赞评论转发~谢谢支持~

使用prophet库分析航空出行人次规律相关推荐

  1. 基于python分析航空公司客户价值《数据挖掘》 课程实验报告

    一.实验目的 1)了解K-Means 聚类算法在客户价值分析实例中的应用. 2)利用pandas快速实现数据z-score(标准差)标准化以及用scikit-learn 的聚类库实现K-Means聚类 ...

  2. 独家 | 手把手教你用Python的Prophet库进行时间序列预测

    作者:Jason Brownlee 翻译:殷之涵 校对:吴振东 本文长度为4800字,建议阅读10+分钟 本文为大家介绍了如何在Python中使用由Facebook开发的Prophet库进行自动化的时 ...

  3. 利用Python分析航空公司客户价值

      利用Python分析航空公司客户价值 一.背景介绍 随着社会生活中数据量的急剧增多,如何从这些海量的数据中提取与发掘出对我们决策有用的信息成为当前亟待解决的题,因此,数据分析与挖掘技术在这些年得到 ...

  4. python 颜色_如何使用python中matplotlib库分析图像颜色

    用代码分析图像可能很困难.你如何使代码"理解"图像的上下文? 通常,使用AI分析图像的第一步 是找到主要颜色.在如何使用python中matplotlib库分析图像颜色中,我们将使 ...

  5. Seurat的单细胞免疫组库分析来了!

    使用Seurat进行单细胞VDJ免疫分析 NGS系列文章包括NGS基础.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程) ...

  6. python数据挖掘课程】十七.社交网络Networkx库分析人物关系(初识篇)

    #2018-03-30 09:21:39 March Friday the 13 week, the 089 day SZ SSMR python数据挖掘课程]十七.社交网络Networkx库分析人物 ...

  7. Kotlin协程核心库分析-5 Job异常处理器注意点

    本章我们简单探讨一下异常处理: 我们知道协程传入CoroutineExceptionHandler对象即可捕获异常,那么对于子协程是否适用呢? fun main() {val eChild = Cor ...

  8. stm32 HAL库分析之CAN

    stm32 HAL库分析之CAN 阻塞发送 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) ...

  9. 【机器学习】使用CatBoost库分析股票行情(指标为RSI、Boll、MACD和MA)并输出因子占比分析

    文章目录 前言 一.CatBoost是什么? 二.准备工作 2.1 MyTT 2.2 获取日K数据 2.3 安装CatBoost 三. 使用CatBoost库分析股票行情(完整源码) 总结 前言 随着 ...

最新文章

  1. jsp里面java和js交互_jsp与js交互实例 | 学步园
  2. UVA-10047 The Monocycle (图的BFS遍历)
  3. Leaflet中使用Leaflet.Graticule插件实现添加矩形格网
  4. Spring MVC + Thymeleaf
  5. 网络的分层思想和数据封装与解封装概论
  6. mysql dump gtid_mysqldump GTID搭建主从复制库
  7. 美团flutter_ggtalk 聊聊跨平台:后起之秀 Flutter
  8. 扎心!程序员泪奔的8个瞬间
  9. [jQuery] jQuery和Zepto的区别?各自的使用场景?
  10. java笔记之过滤器
  11. dedecms 问答系统 ask
  12. FLEX 字符串处理函数
  13. Android Behavior详解
  14. 《python数据分析》电子书
  15. 最新------如何不通过AppStore,直接安装IOS应用程序 兼容最新版IOS系统
  16. 配色三部曲-创建自己的调色板
  17. SQL Server菜鸟入门
  18. 动态规划-剪绳子问题
  19. 试题 算法训练 猴子分苹果
  20. Chrome,Firefox浏览器驱动下载地址

热门文章

  1. ubuntu上打开md文件_Linux_查看.md
  2. c语言编程实现简单三子棋游戏
  3. 微信号名称乱码什么情况_微信号改成什么比较好,2020最火微信号!
  4. 计算机毕设项目:毕业论文管理系统(一)
  5. Matplotlib画图之调整字体大小
  6. Redis Eviction policies (驱逐策略)
  7. k8s eviction机制
  8. debian中文输入法——拼音和五笔的解决方法
  9. matlab的图片上如何画线,如何在照片上画线?
  10. 如何处理多重共线性问题