首页 > 其他分享 >时间序列预测---Prophet

时间序列预测---Prophet

时间:2024-10-30 19:48:19浏览次数:6  
标签:plot df Prophet forecast --- future prophet 序列

更多细节可见官网地址:https://facebook.github.io/prophet/docs/quick_start.html#python-api

一、模型介绍

Prophet 是facebook开源的的一个时间序列预测算法,特别适合于处理具有季节性和趋势的数据。主要思想是将数据分解为如下三个部分:趋势、季节性、节假日和特殊事件。
y(t)=g(t)+s(t)+h(t)+α
其中g(t)表示趋势项,s(t)表示季节项,h(t)表示节假日项,α表示残差项,通常是正态分布的。然后各项分别被拟合,最后的累加结果即是Prophet算法的预测结果。

二、Prophet 案例

Prophet 遵循sklearn模型 API。我们创建类的实例Prophet,然后调用它的fit方法predict。
Prophet 的输入始终是一个包含两列的数据框:ds和y。ds(日期戳)列应为 Pandas 所需的格式,理想情况下,日期为 YYYY-MM-DD,时间戳为 YYYY-MM-DD HH:MM:SS。该y列必须是数字,代表我们希望预测的测量值。

# python -m pip install prophet  安装
#从 v0.6 开始,不再支持 Python 2。
#从 v1.0 开始,PyPI 上的包名称为“prophet”;在 v1.0 之前它是“fbprophet”。
#从 v1.1 开始,支持的最低 Python 版本为 3.7。

import pandas as pd
from prophet import Prophet
#加载数据
df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv')
df.head()

在这里插入图片描述
通过实例化一个新对象来拟合模型Prophet。预测过程的任何设置都会传递到构造函数中。然后调用其fit方法并传入历史数据框

m = Prophet()
m.fit(df)

对数据框进行预测,其中有一列ds包含要进行预测的日期。可以使用辅助方法获取延伸到未来指定天数的合适数据框Prophet.make_future_dataframe。默认情况下,它还将包含历史记录中的日期,因此我们也将看到模型拟合。

future = m.make_future_dataframe(periods=365)
future.tail()

在这里插入图片描述

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

在这里插入图片描述
Prophet.plot可以通过调用该方法并传入预测数据框来绘制预测图。

fig1 = m.plot(forecast)

在这里插入图片描述
查看预测成分,可以使用Prophet.plot_components方法。默认情况下,看到时间序列的趋势、年度季节性和每周季节性

fig2 = m.plot_components(forecast)

在这里插入图片描述
可以使用 plotly 创建预测和组件的交互式图表。需要单独安装 plotly 4.0 或更高版本,因为它不会默认与 prophecy 一起安装。还需要安装notebook和ipywidgets包。

from prophet.plot import plot_plotly, plot_components_plotly
plot_plotly(m, forecast)

在这里插入图片描述

plot_components_plotly(m, forecast)

在这里插入图片描述

三、乘法季节性(Multiplicative Seasonality)

  默认情况下,Prophet 会拟合附加季节性,这意味着季节性的影响会添加到趋势中以获得预测。下图这个时间序列具有明显的年度周期,但预测中的季节性在时间序列开始时太大,在结束时太小。在这个时间序列中,季节性不是 Prophet 假设的恒定加法因子,而是随着趋势而增长。这是乘法季节性。

import pandas as pd
from prophet import Prophet
df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_air_passengers.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(50, freq='MS')
forecast = m.predict(future)
fig = m.plot(forecast)

在这里插入图片描述
seasonality_mode=‘multiplicative’ Prophet 可以通过设置输入参数来模拟乘法季节性

m = Prophet(seasonality_mode='multiplicative')
m.fit(df)
forecast = m.predict(future)
fig = m.plot(forecast)

在这里插入图片描述

fig = m.plot_components(forecast)

在这里插入图片描述
使用seasonality_mode=‘multiplicative’,假日效应也将被建模为乘法。同时存在加法和乘法季节性混合出现的可能性很小,因此通常只有在有理由预期会出现这种情况时才会使用。具体见官网https://facebook.github.io/prophet/docs/multiplicative_seasonality.html。

四、异常值

df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_R_outliers1.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=1096)
forecast = m.predict(future)
fig = m.plot(forecast)

在这里插入图片描述
趋势预测似乎合理,但不确定性区间似乎太宽。Prophet 能够处理历史中的异常值,但只能通过将其与趋势变化相拟合。然后,不确定性模型会预期未来趋势变化的幅度相似。处理异常值的最佳方法是将其移除 - Prophet 不会处理缺失数据。处理方式将异常值设置为None。

df.loc[(df['ds'] > '2010-01-01') & (df['ds'] < '2011-01-01'), 'y'] = None
model = Prophet().fit(df)
fig = model.plot(model.predict(future))

在这里插入图片描述

标签:plot,df,Prophet,forecast,---,future,prophet,序列
From: https://blog.csdn.net/u012121721/article/details/143336699

相关文章

  • 实验7-1-11 装箱问题
     ......
  • 明解c语言第四章while语句练习4-6和练习4-7
    就在前几天我学习了一个do语句,接着这几天学习了一个while语句,看完书来写练习4-6和练习4-7感觉一头雾水,可能是今天中午没睡觉的缘故我脑子里空空的,于是对于练习4-6我求助了ai练习4-6:编写一段程序,按照升序显示出小于输入值的所有真偶数ai是这样写的//编写一段程序,按照升序显示......
  • 2024-10-30 学习人工智能的Day18
    Python包和模块当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。1.模块(Modules)1.1什么是模块一个.py文件就是一个模块模块是含有一系列数据,函数,类等的程序作用把相关功能的函数等放在一起有利于管理,有利于多人合作开......
  • FLUX.1-dev-LoRA 混合现实与插画风格模型,生成你的卡通旅游照片
      FLUX.1-dev-LoRA是一个混合现实与插画风格模型。该模型可以生成融合了现实与插画元素的图像。它基于FLUX.1-dev基础模型进行训练,特别擅长生成前景角色为插画风格,而背景为现实风格的视觉效果。可以通过使用该模型生成图片并发布在社交平台上,如微信朋友圈或小红书,达到不露脸......
  • [ windows权限维持 ] 利用永恒之蓝(MS17-010)漏洞取靶机权限并创建后门账户
    ......
  • rsync和inotify-tools实现文件实时同步
    rsync和inotify-tools实现文件实时同步一、环境准备服务器设置确定一台源服务器(假设为ServerA)和多台目标服务器(假设为ServerB、ServerC等),确保它们之间网络连通,并且能够互相通过SSH访问。在每台服务器上安装inotify-tools和rsync软件包。在CentOS系统中,可......
  • 若依 v-hasPermi v-if insertBefore
    背景:项目框架用的ruoyi,最近测试提了一个bug:关闭开启的按钮权限,新建数据后会出现按钮(并没有报错),但是刷新后又消失了。定位问题:按钮权限通过v-hasPermi控制,之前的页面也是这么用的没有复现,区别在于这里用了v-if。控制变量法确定就是v-if和v-hasPermi同时使用造成,检索解决方案是......
  • 论文翻译 | PROMPTING GPT-3 TO BE RELIABLE
    摘要        大型语言模型(LLMs)通过少量提示展现出了令人印象深刻的的能力。商业化的API,如OpenAI的GPT-3,进一步增加了它们在现实世界语言应用中的使用。然而,如何提高GPT-3的可靠性这一关键问题仍然尚未得到充分探索。虽然可靠性是一个广泛且定义模糊的术语,但我们将其......
  • Question Decomposition Improves the Faithfulness of Model-Generated Reasoning
    文章目录题目摘要简介结果相关工作结论附录题目问题分解提高了模型生成推理的准确性论文地址:https://arxiv.org/abs/2307.11768摘要    随着大型语言模型(LLM)执行越来越困难的任务,验证其行为的正确性和安全性变得越来越困难。解决此问题的一种方法是促......
  • 2024牛客暑期多校训练营10 - VP记录
    A.SurrendertoMyWill直接判断当前是否不可翻盘。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ charstr[10];scanf("%s",str); inty=0,n=0; for(inti=0;i<5;i++) { if(str[i]=='Y')y++; if(str[i]=='N')n++; ......