python入门fbprophet工具包

说明

更新时间:2021/06/11 15:25,更新完基本内容

基于python,记录一下facebook开源的时序分析预测算法包fbprophet的基本入门

注意:本文仅为记录学习轨迹,如有侵权,联系删除

这里先给出用到的所有数据来源:https://github.com/facebook/prophet

一、时序预测说明

(1)定义

时序预测法是根据历史统计数据的时间序列,对未来的变化趋势进行预测分析。

一般来说,时间序列由四种变化成分组成,如长期趋势变化、季节性变化、周期性变化和随机波动。 一些简单的预测模型可用来预测上述三种趋势变化,如指数平滑模型、移动平均模型等。随机变化成分是无法预测的,它是混入时间序列中的一种“噪音”,须设法将其过滤掉,以免影响预测结果的精度。

以上定义来自百度百科的解释,个人理解就是利用包含时间日期序列的历史数据进行分析,预测未来的变化趋势

(2)适用场景

关于适用场景,个人总结就只有一句话,具有明显周期性、趋势性的数据,这类数据可以用来做时序分析预测。

二、prophet

(1)prophet项目下载

prophet是Facebook开源的工具,github的地址:https://github.com/facebook/prophet,在使用前需要先下载到本地
在这里插入图片描述
简单说一下里面的目录结构,docs文件里面存放这开发项目的说明文档,包括安装、快速入门等文档
在这里插入图片描述
examples文件是对应用到的数据(csv)
在这里插入图片描述
其他的文件没怎么用到,这里就不说明了。

(2)定义

关于定义,可直接进入docs文件里面的有一个index.md文件说得很清楚
在这里插入图片描述

翻译成中文如下
Prophet 是一种基于可加模型预测时间序列数据的程序,其中非线性趋势与每年、每周和每天的季节性以及假日效应相吻合。 它最适用于具有强烈季节性影响和多个季节历史数据的时间序列。 Prophet 对缺失数据和趋势变化具有稳健性,并且通常可以很好地处理异常值。

(3)快速入门

进入docs文档,找到quick_start.md文件,里面有详细的教程,python和R语言的都有
在这里插入图片描述
首先读取数据(csv格式),数据的包含两列:ds 和 y 。ds 列只能是日期(YYYY-MM-DD)或者是具体的时间点(YYYY-MM-DD HH:MM:SS)。 y 列必须是数值变量,表示我们希望去预测的量。
在这里插入图片描述
开始读取数据集

import numpy as np
import pandas as pd
from prophet import Prophet


# 读入数据集
df = pd.read_csv('fbprophet/data/example_wp_log_peyton_manning.csv')
df.head()

在这里插入图片描述
拟合模型,并且构建要预测的未来是日期范围

#拟合模型
m = Prophet()
m.fit(df)

#periods在当前日期基础上往后推几天,创建出未来的日期,后面会预测这几天的数据
future = m.make_future_dataframe(periods=10)
future.tail()

在这里插入图片描述
预测设置好的未来日期内的数据

#predict 方法将会对每一行未来 future 日期得到一个预测值(称为 yhat )
#yhat:预测值   yhat_lower:置信区间的下限    yhat_upper:置信区间的上限   
#置信区间的上限和下限之间可以看成是误差范围
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

在这里插入图片描述
绘制图形

#传入预测得到的数据,对预测的效果进行绘图。
fig1 = m.plot(forecast)

在这里插入图片描述
成分分析,趋势图是整个数据集合以及预测的整个趋势,年度季节性图是根据所有数据,比如很多年的历史数据,分析得出的每一年的数据图,周季节性则是对应的每一个星期的数据图

# plot_components 方法可以查看预测的成分分析,默认情况下,将展示趋势、时间序列的年度季节性和周季节性。如果之前包含了节假日,也会展示出来。
fig2 = m.plot_components(forecast)

在这里插入图片描述
至此,整个快速入门案例完成。

(4)prophet参数说明

通过上面的快速入门案例可以知道,该工具包的使用主要有模型的拟合类Prophet以及该类下的make_future_dataframe方法,下面主要整理这两块的参数设置。

参考文章
(1)https://blog.csdn.net/Joely_112/article/details/100090176
(2)https://blog.csdn.net/u014710355/article/details/97265517
(3)https://blog.csdn.net/anshuai_aw1/article/details/83412058

Prophet()

参数名称说明备注总结
holidays设置节假日特征,通常数据中存在节假日的突增或者突降时使用设置该参数可以降低在节假日期间的预测量,降低整体的预测偏差,节假日的日期周期设定和日期的位置没有关系
changepoint_prior_scale调整趋势的灵活性值越高越灵活如果趋势的变化被过度拟合(即过于灵活)或者拟合不足(即灵活性不够),可以利用输入参数 changepoint_prior_scale 来调整稀疏先验的程度。默认下,这个参数被指定为 0.05 。
n_changepoints预设转折点数量(潜在突变点)根据实际设置,例如:10,100,200
yearly_seasonality年度的拟合度默认为开启默认值10通常是合适的,但是当季节性需要适应更高频率的变化时,它们可以增加,
seasonality_mode模型的学习方式,主要有加法模型和乘法模型两种,默认是加法模型乘法:multiplicative具有明显的年度周期,但预测中的季节性在时间序列开始时太大,在结束时又太小。在这个时间序列中,季节性并不是Prophet所假定的是一个恒定的加性因子,而是随着趋势在增长。这就是乘法季节性
holidays_prior_scale假期的拟合度,默认情况下为10例如:holidays_prior_scale=0.05如果发现节假日效应被过度拟合了,通过设置参数 holidays_prior_scale 可以调整它们的先验规模来使之平滑,默认下该值取 10 。
changepoints指定转折点的具体位置如果你希望手动指定潜在突变点的位置而不是利用自动的突变点监测,可以使用 changepoints 参数。
growthprophet默认使用的线性模型进行预测growth='linear’或growth = “logistic” ,默认应该是linear。
changepoint_range默认在数据的前百分之80处寻找潜在变化点默认情况下,只有在时间序列的前80%才会推断出突变点,以便有足够的长度来预测未来的趋势,并避免在时间序列的末尾出现过度拟合的波动。可以使用changepoint_range参数进行更改。例如,Python中的m = Prophet(changepoint_range=0.9)。这意味着将在时间序列的前90%处寻找潜在的变化点。
weekly_seasonality周的拟合度该参数的值越高,周的拟合越好,一般auto即可
daily_seasonality天的拟合度该参数的值越高,天的拟合越好,一般auto即可
mcmc_samples季节效应的不确定性默认情况下, Prophet 只会返回趋势中的不确定性和观测值噪声的影响。你必须使用贝叶斯取样的方法来得到季节效应的不确定性,可通过设置 mcmc.samples 参数(默认下取 0 )来实现。

make_future_dataframe()

参数名称说明
periodsperiods 周期,一般是根据实际意义确定,重点:后续预测的长度是一个周期的长度。
freq常见的有‘MS‘、H、M ,预测sin,要设置H ,个人理解数据如果变化很快,要用H
  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值