facebook-Prophet时序预测实战(附代码)

更新时间:2023-06-14 10:16:11 阅读: 评论:0

facebook-Prophet时序预测实战(附代码)
关于prophet库的安装参考,linux平台下⼀般没什么问题,直接⽤pip就可以。本⽂安装的fbprophet包版本为0.4.0(最新版本)
简介
输⼊到prophet中的数据要求是Dataframe类型,时间列的标签要命名为 ds ,数据列的标签需要命名为 y (命名⼀定要是ds,y否则⽆法通过编译)
引⽤模块我的同桌400字
import pandas as pd
from fbprophet import Prophet
读取csv数据
df = pd.read_csv('Result.csv')
我们可以看到列名为ds和y,但是ds并不是datatime格式,需要进⾏转换,这⾥可以看到时间是每隔5分钟记录⼀次
df['ds']=pd.to_datetime(df['ds'], unit='s')
建⽴实例并拟合数据
学习(拟合)数据需要先创建⼀个Prophet类对象,同时可以通过参数来调整它的学习能⼒。然后再使⽤fit 函数来让它进⾏学习拟合。下⾯的代码是默认,⽆更改的Prophet模型。
m=Prophet()macosx
m.fit(df)
⽣成时间框
我们需要给Prophet提供⼀个数据框,其中包含有ds,它是⼀个⽇期数据列,包含有历史数据的⽇期和预测的⽇期。
Prophet为我们提供了⽣成标准数据框的函数语句,Prophet.make_future_dataframe() ,参数periods设定了预测的天数。这⾥我设置了freq参数调整为分钟
future = m.make_future_dataframe(periods=5000,freq='min')verba
future.tail()
执⾏预测
Prophet提供的函数predict会产⽣⼀个新的数据框架,其中包含有*Prophet.make_future_dataframe()*⽣成的所有⽇期,以及它们对应的预测值,并命名标签为yhat,如果是历史⽇期,那么会给出模拟对历史数据的拟合值,可以通过它观察模型对历史数据的学习效果。此外返回的新数据框中还包含有预测值的上下界,如果设置了假期因素或者其他的额外因素,那么这些因素对预测的影响也会展⽰在该数据框中。
forecast = m.predict(future)
forecast.tail()
可视化
可以通过类中的plot函数绘制图像,给它输⼊predict函数返回的数据框架,就可以便捷地得到预测图。
pink是啥意思
查看更多细节
注:许多⽅法的细节可以通过help(Prophet) 或者 help(Prophet.fit) 来获得。
转折点⾃动检测
模型会在适应度允许的范围内寻找出⼤量的潜在转折点,可以通过以下代码显⽰出转折点的位置:
from fbprophet.plot import add_changepoints_to_plot
口号英语翻译fig = m.plot(forecast)
a = add_changepoints_to_a(), m, forecast)
默认情况下,只有在时间序列的前80%才会推断出突变点,以便有⾜够的长度来预测未来的趋势,并避免在时间序列的末尾出现过度拟合的波动。这个默认值可以在很多情况下⼯作,但不是所有情况下都可以,可以使⽤changepoint_range参数进⾏更改。例如,Python中的m = Prophet(changepoint_range=0.9)。这意味着将在时间序列的前90%处寻找潜在的变化点
指定突变点的位置
如果你希望⼿动指定潜在突变点的位置⽽不是利⽤⾃动的突变点监测,可以使⽤ changepoints 参数。
c4im = Prophet(changepoints=['2014-01-01'])
m.fit(df)
调整趋势的灵活性
如果趋势的变化被过度拟合(即过于灵活)或者拟合不⾜(即灵活性不够),可以利⽤输⼊参数 changepoint_prior_scale 来调整稀疏先验的程度。默认下,这个参数被指定为 0.05 。
增加这个值,会导致趋势拟合得更加灵活。减少这个值,会导致趋势拟合得灵活性降低。对偶的作用
# 拟合模型
m = Prophet(changepoint_prior_scale=0.5)
m.fit(df)
对假期和特征事件建模
如果需要专门对节假⽇或者其它的事件进⾏建模,你就必须得为此创建⼀个新的dataframe,其中包含两列(节假⽇ holiday 和⽇期
戳 ds ),每⾏分别记录了每个出现的节假⽇。这个数据框必须包含所有出现的节假⽇,不仅是历史数据集中还是待预测的时期中的。如果这些节假⽇并没有在待预测的时期中被注明, Prophet 也会利⽤历史数据对它们建模,但预测未来时却不会使⽤这些模型来预测。
注:也就是说,在待预测的⽇期⾥,我们也必须指定所有出现的节假⽇。
你可以在这个数据框基础上再新建两列 lower_window 和 upper_window ,从⽽将节假⽇的时间扩展成⼀个区间
[ lower_window , upper_window ] 。举例来说,如果想将平安夜也加⼊到 “圣诞节” ⾥,就设置 lower_window = -1 , upper_window = 0 ;如果想将⿊⾊星期五加⼊到 “感恩节” ⾥,就设置 lower_window = 0 , upper_window = 1 。
下⾯我们创建⼀个数据框,其中包含了所有佩顿 · 曼宁参加过的决赛⽇期:
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,
})
太原ui培训
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))
迈格森少儿英语koji上述代码中,我们将超级碗的⽇期既记录在了决赛的⽇期数据框中,也记录在了超级碗的⽇期数据框中。这就会造成超级碗⽇期的效应会在决赛⽇期的作⽤下叠加两次。

本文发布于:2023-06-14 10:16:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/144610.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   预测   拟合   时间   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图