时间序列神器Prophet教程-入门教程

news2024/12/26 21:07:52

公众号:尤而小屋
编辑:Peter
作者:Peter

大家好,我是Peter~

今天给大家分享一个时间序列预测神器Prophet的简易入门教程。

什么是Prophet

Prophet是一种基于加法模型的时间序列预测工具,由Facebook的数据科学团队开发。它可以处理时间序列数据中的多种复杂性,包括趋势变化、季节性变化以及节假日效应等。

官网地址:https://facebook.github.io/prophet/docs/quick_start.html#python-api

在Prophet中,时间序列被分解为多个组成部分,包括趋势、季节性、节假日效应和误差项。这些组成部分可以分别进行建模和预测,然后将它们组合起来得到最终的预测结果。

Prophet的主要优点是易于使用和可解释性强。它提供了一种简单的接口,可以通过几行代码来训练和预测时间序列模型。同时,它还提供了丰富的可视化工具,可以帮助用户理解模型的行为和性能。

Prophet安装

Github官方地址:https://github.com/facebook/prophet

先安装prophet包:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple prophet

Windows系统中一次性安装成功。如果有安装失败,需要自行百度下。

导入库

import numpy as np
import pandas as pd
import os
import datetime 
import time
import re
np.random.seed(42)   

import plotly_express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import matplotlib.pyplot as plt
%matplotlib inline
# 设置支持中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] 
# 设置图像标题字体
plt.rcParams['axes.unicode_minus'] = False
import seaborn as sns
sns.set_theme(style="darkgrid")

import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.tsa.stattools import adfuller
from sklearn.metrics import r2_score,mean_squared_error,mean_squared_log_error

from prophet import Prophet 

import warnings
warnings.filterwarnings('ignore')

读取数据

df = pd.read_csv("https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv")
# df.to_csv("data.csv",index=False)  # 保存到本地
df.head()

该数据是佩顿.曼宁(美式橄榄球运动员)的维基百科的每日访问量的时间序列数据。

Prophet的输入数据一般都是两列:ds和y。其中,ds表示时间数据,y是我们希望预测的数值变量。

数据基本信息

df["ds"].min(),df["ds"].max()

(‘2007-12-10’, ‘2016-01-20’)

df["y"].min(),df["y"].max()

(5.26269018890489, 12.846746888829)

原数据可视化

fig = px.scatter(df,x="ds",y="y")

fig.show()

从图像中能够观察到,该数据有良好的周期性(季节性),y值在不断地变化。

数据对数转换

对数据进行对数转换:np.log

df["y"] = np.log(df["y"])

Prophet简易预测

Prophet遵循了sklearn的接口方式,在实例化Prophet对象的基础上可以使用fit方法进行训练,predict进行预测。

fit过程

p = Prophet()  
p.fit(df)

<prophet.forecaster.Prophet at 0x78c63111acb0>

构建预测数据

使用辅助的方法 Prophet.make_future_dataframe构建待预测的数据:

future = p.make_future_dataframe(periods=365)  # 指定预测一年的数据
future

predict过程

forecast = p.predict(future)
forecast.head()

forecast.columns  # 生成预测数据的全部字段信息

Index(['ds', 'trend', 'yhat_lower', 'yhat_upper', 'trend_lower', 'trend_upper',
           'additive_terms', 'additive_terms_lower', 'additive_terms_upper',
           'weekly', 'weekly_lower', 'weekly_upper', 'yearly', 'yearly_lower',
           'yearly_upper', 'multiplicative_terms', 'multiplicative_terms_lower',
           'multiplicative_terms_upper', 'yhat'],
          dtype='object')

选取部分我们关注的字段:原始ds、预测值yhat、预测最低值yhat_lower、预测最高值yhat_upper

forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

预测可视化

调用plot方法进行预测结果的可视化:

p.plot(forecast)
plt.show()

预测成分分析

调用plot_components方法

forecast.columns

Index(['ds', 'trend', 'yhat_lower', 'yhat_upper', 'trend_lower', 'trend_upper',
           'additive_terms', 'additive_terms_lower', 'additive_terms_upper',
           'weekly', 'weekly_lower', 'weekly_upper', 'yearly', 'yearly_lower',
           'yearly_upper', 'multiplicative_terms', 'multiplicative_terms_lower',
           'multiplicative_terms_upper', 'yhat'],
          dtype='object')
p.plot_components(forecast)
plt.show()

可以看到每个成分的变化趋势。图1是根据trend画出来的,图2是根据weekly画出来的,图3是根据yearly画出来的。

在加法模型中,有如下关系式:

forecast['additive_terms'] = forecast['weekly'] + forecast['yearly']
forecast['yhat']  = forecast['trend'] +  forecast['additive_terms'] 
forecast['yhat']  = forecast['trend'] +forecast['weekly'] + forecast['yearly']

如果存在假期因素holidays,则有:

forecast['yhat']  = forecast['trend'] +forecast['weekly'] + forecast['yearly'] + forecast['holidays']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战训练与源码教程:用Real-ESRGAN对抗生成超分技术实现超高清图像!

目录 前言 超分数据如何构造呢&#xff1f; Real-ESRGAN 1. 高质量细节重建 2. 真实感和自然度 3. 处理真实世界数据 4. 多尺度和多种类型的输入 5. 视觉效果的提升 超分如何退化 1. 模糊处理 2. 噪声处理 3. 压缩失真 4. 训练数据的退化模拟 2.经典退化模型◆退…

【苍穹外卖】Day 7 缓存、购物车相关接口

1 缓存 存在问题&#xff1a; 用户端小程序展示的菜品数据都是通过査询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 >解决&#xff1a; 通过 Redis 来缓存菜品数据&#xff0c;减少数据库查询操作 缓存逻辑分析&#xff1a; 每个分…

PyDracula:用 PySide6 和 PyQt6打造现代感 Python GUI 的利器

PyDracula 是一个基于 PySide6 或 PyQt6 的 Python GUI 库&#xff0c;它以其现代、美观、易于定制的特点而闻名。PyDracula 融合了流行的 Dracula 主题&#xff0c;并提供了丰富的功能&#xff0c;让开发者可以轻松构建出具有吸引力的图形界面。本文将详细介绍 PyDracula 的核…

【Godot4.3】CanvasShape资源化改造

概述 通过把之前自定义的CanvasShape类变成资源类型&#xff0c;将可以同时用于CanvasItem绘图和创建扩展的Node2D和Polygon2D节点等。 本篇就完成CanvasShape类的资源化改造&#xff0c;并记录改造过程和思路。 CanvasShape资源类型体系 CanvasShape仍然为图形基类&#xf…

Android Auto未来可能支持无线电广播

通过Android Auto&#xff0c;可以在车载收音机上使用 Google 地图、音乐、收听播客&#xff0c;还能获取天气等基本信息。最近&#xff0c;国外科技媒体9to5Google通过分析 Android Auto v12.3 和 v12.4的应用程序的代码发现了一些提示信息&#xff0c;特别提到了 AM、FM、HD …

【Protobuf】xml、json与protobuf有什么区别,protobuf详解(保姆篇)

文章目录 简介Protobuf 的原理安装 Protobuf 编译器在 Python 中使用 Protobuf安装语言特定的 Protobuf 库定义消息结构生成代码使用 Protobuf 进行序列化和反序列化 在 Java 中使用 Protobuf安装和配置编译 .proto 文件使用生成的 Java 类创建和序列化对象 代码注释 高级特性嵌…

LabVIEW灵活集成与调试的方法

在LabVIEW开发中&#xff0c;为了构建一个既便于调试又能灵活集成到主VI中的控制VI&#xff0c;开发者需要采用适当的编程方式和架构。常见的选择包括模块化设计、状态机架构以及事件驱动编程。这些方法有助于简化调试过程、提高系统的稳定性&#xff0c;并确保代码的重用性和可…

day43-测试平台搭建之前端vue学习-基础2

目录 一、数据代理 二、事件处理 三、计算属性 四、监控属性 五、绑定样式 六、今日学习思维导图 一、数据代理 1.1.数据代理&#xff1a;通过一个对象代理对另外一个对象中属性的操作 (读/写) 1.2.Vue中数据代理的好处&#xff1a;更加方便的操作data中的数据 1.3.基本原…

vue2结合element-ui使用tsx格式实现formily自定义组件

简洁 在公司实习&#xff0c;需要参与开发一个基于formily的低代码平台&#xff0c;实现自定义formily组件&#xff0c;在此记录一下。 示例源码 demo源码 实现思路 开始实现自定义组件之前最好先看一下formily官网的core、vue、element部分&#xff0c;如果有能力也可以阅…

2024数学建模国赛A题word版成品论文30页【附带完整解题代码+可视化图表】

0906 0:30 v1.0 问题一、问题二的完整可运行代码&#xff0c;模型建立与求解这一部分的论文。 0906 5:20 v1.1 增加了第三问的完整可运行代码和第二、三问的“模型建立与求解”的论文。&#xff08;即1-3问的代码、模型建立与求解、算法设计、结果分析&#xff09; 1-4问完整可…

TensorFlow创建回归神经网络及Optimizer优化器

一.TensorFlow创建神经层 如图所示&#xff0c;通过该神经网络识别动物猫或狗&#xff0c;共包括输入层&#xff08;Input Layer&#xff09;、隐藏层3层&#xff08;Hidden Layer&#xff09;和输出层&#xff08;Output Layer&#xff09;。其中每个隐藏层神经元都有一个激励…

Unity(2022.3.41LTS) - UI详细介绍- 原始图像

目录 零.简介 一、基本功能 二、属性和设置 三、与其他 UI 元素的配合 四、代码控制 六. 和 image的区别 零.简介 在 Unity 中&#xff0c;RawImage 是一种用于显示原始图像的 UI 组件。 一、基本功能 显示图像&#xff1a;RawImage 主要用于在 UI 中直接显示一张图像。…

Python数组遍历-从基础到高级的全面指南

你有没有想过,为什么有些程序员能够轻松地操纵大量数据,而其他人却在简单的数组操作上挣扎?答案往往藏在一个看似简单却至关重要的技能中:数组遍历。无论你是刚入门的新手,还是寻求提升的老手,掌握Python中的数组遍历技巧都将极大地提升你的编程效率和代码质量。 在这篇文章中…

使用 systemd-analyze 分析 Linux 系统启动慢的原因

使用 systemd-analyze 命令可以查看 Linux 系统在启动过程中每个服务的耗时情况, 方便我们排查是哪个环节导致系统启动缓慢, 以下是整理的常用命令参数和效果. 例子中一下子就可以定位到是 gssproxy.service 服务启动耗时过长. systemd-analyze blame Print list of running u…

LabVIEW如何自学成为专业开发者

自学成为LabVIEW专业开发者需要一个系统化的学习和实践过程&#xff0c;以下是一些关键步骤&#xff1a; 1. 扎实的基础学习 了解LabVIEW的基础概念&#xff1a;首先要熟悉LabVIEW的基本操作、数据流编程理念和图形化编程环境。可以通过LabVIEW的官方教程、Bilibili上的视频课程…

【舞动生命,不缺营养!】亨廷顿舞蹈症患者的维生素补给站

Hey小伙伴们~ &#x1f44b; 今天我们要聊的是一个温暖而重要的话题——关于亨廷顿舞蹈症&#xff08;HD&#xff09;患者如何通过合理补充维生素&#xff0c;来更好地支持他们的健康与生活品质&#xff01;&#x1f31f; &#x1f338; ‌首先&#xff0c;了解亨廷顿舞蹈症‌…

TCP的传输速度

如何确定TCP最大传输速度&#xff1f; TCP 的传输速度&#xff0c;受限于发送窗⼝&#xff0c;接收窗⼝以及⽹络设备传输能⼒。 其中&#xff0c;窗⼝⼤⼩由内核缓冲区⼤⼩决定。如果缓冲区与⽹络传输能⼒匹配&#xff0c;那么缓冲区的利⽤率就达到了最⼤化。 如何计算网络传…

JAVA:Spring Boot 整合 Swagger 的技术指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 在现代Web开发中&#xff0c;API文档的生成和维护是非常重要的。Swagger是一款流行的API文档生成工具&#xff0c;它可以帮助开发者自动生成API文档&#xff0c;并提供可视化的接口…

Redis从简单使用到底层原理与分布式缓存

文章目录 [Redis参考手册](https://redis.io/docs/latest/commands/)1 基础认识1.1 安装配置1.2 通用命令1.3 数据类型1.3.1 数据结构与内部编码stringkey的结构hashlistsetsorted_set 1.4 单线程模型 2 redis客户端2.1 RESP协议&#xff08;Redis serialization protocol&…

SpringBoot2:请求处理原理分析-接口参数的常用注解

1、PathVariable 作用说明&#xff1a;获取路径参数 案例&#xff1a; 接口收参形式&#xff1a; GetMapping("/car/{id}/owner/{username}")public Map<String,Object> getCar(PathVariable("id") Integer id,PathVariable("username")…