时间序列预测实战(十七)利用Prophet实现电力负荷长期预测(附代码+数据集+详细讲解)

一、本文介绍 

Prophet是一个由Facebook开发的开源工具,用于时间序列预测。这个工具特别适合于具有强季节性影响和多个历史数据季节的业务时间序列数据。Prophet的主要思想是将数据分解为如下三个部分:趋势、季节性、节假日和特殊事件。这个模型非常适合于处理具有强烈季节性和趋势变化的业务时间序列数据(这里为什么适合的是业务数据呢是因为它考虑了节假日等特殊事件,同时其面对数据中的缺失值和异常值时也能保持其性能)。Prophet通过这种方式,可以有效地预测未来的趋势和模式。需要注意的是Prophet是一种介于机器学习和传统的时间序列预测方法中间的一种方法,其中分解趋势、季节性这种属于是传统的方法,但是其又可以自动拟合属于机器学习的方法。

回顾内容:时间序列专栏->包含上百种时间序列预测模型以及基础讲解适合各种人群

预测类型:长期预测、单元预测。

预测效果图如下(未知数据)->

目录

一、本文介绍 

二、Prophet介绍 

2.1 Prophet的主要思想

2.2 Prophet的优缺点

三、数据集介绍

四、参数讲解

五、模型实战

5.1 模型完整代码块

5.2 模型训练和输出结果 

六、结果展示和分析

六、全文总结 


二、Prophet介绍 

2.1 Prophet的主要思想

Prophet的主要思想是:提供一个灵活且易于使用的工具,用于处理各种业务时间序列数据的预测。它基于一个加性模型,其中非线性趋势与年度、周度和日度季节性模式结合,还可以包括节假日效应。这个模型包括几个主要部分

  1. 趋势模型:它捕捉数据的长期趋势,可以处理趋势的变化,如趋势中的拐点。

  2. 季节性模型:识别并拟合数据的季节性模式,如一周内或一年内的周期性变化。

  3. 节假日组件:用户可以指定影响模型的特定日期或事件,如公共假期或特别活动。

Prophet的目标是将这些复杂的时间序列分析技术变得更加易于理解和使用,即使是对于非专业人士来说。

下图为Prophet处理时间这一特征时其考虑时间的方法

 而且岂会将时间处理为不同的维度进行处理如下图所示:分别为年月周日等多个维度。

2.2 Prophet的优缺点

Prophet的优点

Prophet是一个由Facebook开发的开源工具,用于时间序列预测。这个工具特别适合于具有强季节性影响和多个历史数据季节的业务时间序列数据。Prophet的主要有点包括:

1. 易于使用:Prophet旨在为分析师和开发者提供一个简单、直观的接口,使他们能够快速做出高质量的预测。

2. 适应性强:它可以自动检测时间序列数据的变化趋势和季节性模式,甚至在存在缺失数据或历史数据的情况下也能进行有效的预测。

3. 可定制:用户可以调整模型来适应特定的业务需求,比如通过添加节假日效应或者考虑特定的事件。

4. 鲁棒性:它对异常值和缺失数据具有良好的抵抗力,能够生成准确的预测。

总结:Prophet在许多类型的时间序列数据上都表现出色,特别是在处理日常、周末和年度节假日的影响方面具有独特优势。

Prophet的缺点

尽管如此,Prophet也有其局限性,它可能不适用于处理非常不规则或复杂的时间序列数据。此外,Prophet在进行预测时可能需要大量的历史数据来识别模式。

三、数据集介绍

我们本文用到的数据集是官方的ETTh1.csv ,该数据集是一个用于时间序列预测的电力负荷数据集,它是 ETTh 数据集系列中的一个。ETTh 数据集系列通常用于测试和评估时间序列预测模型。以下是 ETTh1.csv 数据集的一些内容:

数据内容:该数据集通常包含有关电力系统的多种变量,如电力负荷、价格、天气情况等。这些变量可以用于预测未来的电力需求或价格。

时间范围和分辨率:数据通常按小时或天记录,涵盖了数月或数年的时间跨度。具体的时间范围和分辨率可能会根据数据集的版本而异。 

以下是该数据集的部分截图->

四、参数讲解

Prophet模型提供了多个参数,大家可以根据具体的数据集和业务需求调整模型。以下是这些参数及其接受的类型:

参数名称参数类型参数介绍
1growth字符串指定增长模型,通常是'linear'或'logistic'大家需要注意的是如果输入logistic则需要再输入数据中多加一个cap列表明你的数据可能的最大值,否则会报错。
2changepointsPython列表

python列表,指明数据什么时候会变化,这个一般不用输入,类似于某个特殊时间点。

3n_changepoints整数自动选择的潜在趋势变化点的数量,这两参数比较重要大家需要反复尝试
4changepoint_range浮点数用于选择变化点的数据历史比例,这两参数比较重要大家需要反复尝试
5yearly_seasonality布尔值或整数年度季节性组件,是否开启True自动计算按照一年来,否则可以输入整数2、3年等。
6weekly_seasonality布尔值或整数周季节性组件,和上面同理
7daily_seasonality布尔值或整数日季节性组件,和上面同理
8holidaysDataFrame包含假期信息的数据框
9seasonality_prior_scale浮点数季节性组件的平滑度,这个参数其实需要用一些交叉验证或者网格搜索进行求最优化。
10holiday_prior_scale浮点数假期组件的平滑度,这个参数其实需要用一些交叉验证或者网格搜索进行求最优化。
11changepoint_prior_scale浮点数趋势变化点的灵敏度,这个参数其实需要用一些交叉验证或者网格搜索进行求最优化。
12mcmc_samples整数MCMC采样的数量
13interval_width浮点数预测区间的宽度
14uncertainty_samples整数不确定性估计的模拟抽样数量

五、模型实战

5.1 模型完整代码块

下面的代码大家复制粘贴即可运行,本文的模型Prophet用法十分简单只需要调用官方的接口既可以。 

import pandas as pd
from matplotlib import pyplot as plt
from prophet import Prophet
from sklearn.metrics import mean_absolute_error, mean_squared_error

pre_length = 24  # 预测未来数据的长度,我的数据是一小时一间隔24等于一天

df = pd.read_csv('ETTh1.csv')[['date', 'OT']]  # 因为我的数据有多列,在这里我给这两列进行的单独提取出来


# 从数据的末尾提出来一部分数据用于后面的对比
train_df = df[:len(df) - pre_length]
test_df = df[-pre_length:]

# 这里需要将你的时间列和数据列进行重命名因为Prophet需要的两列名字固定是ds 和 y
train_df.rename(columns={'date': 'ds', 'OT': 'y'}, inplace=True)
test_df.rename(columns={'date': 'ds', 'OT': 'y'}, inplace=True)
test_df.reset_index(drop=True, inplace=True)

# 初始化Prophet模型
model = Prophet(
    yearly_seasonality=True,          # 启用年度季节性
    weekly_seasonality=True,          # 启用周季节性
    daily_seasonality=True,           # 启用日季节性
    changepoint_prior_scale=0.5,     # 调整趋势变化点的灵敏度
    seasonality_prior_scale=5.0,     # 调整季节性组件的灵敏度
)

# 拟合模型
model.fit(train_df)

# 创建未来日期的数据框,这里假设我们预测未来1天
future = model.make_future_dataframe(periods=pre_length)

# 进行预测
forecast = model.predict(future).tail(pre_length)

forecast.reset_index(inplace=True, drop=True)  # 将索引重新排序

# 展示预测结果
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']])

mae = mean_absolute_error(test_df['y'], forecast['yhat'])
mse = mean_squared_error(test_df['y'], forecast['yhat'])

print("预测值和真实值的MAE:", mae)
print("预测值和真实值的MSE:", mse)

# 设置主题
plt.style.use('ggplot')

# 创建图表
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制真实值
ax.plot(test_df['y'], label='Actual', color='blue')

# 绘制预测值
ax.plot(forecast['yhat'], label='Forecast', color='cyan')

# 绘制预测的不确定性范围(上下界)
ax.fill_between(range(pre_length), forecast['yhat_lower'], forecast['yhat_upper'], color='grey', alpha=0.5)

# 设置标题和标签
ax.set_title('Prophet Forecast with Confidence Interval', fontsize=16)
ax.set_xlabel('Date', fontsize=12)
ax.set_ylabel('Value', fontsize=12)

# 添加图例
ax.legend()

# 显示图表
plt.show()

5.2 模型训练和输出结果 

当我们将上面的代码复制到一个py文件之后输入你的文件路径和要预测的数据周期之后,我们可以进行训练,控制台的输出如下图所示,其中的前两行为模型拟合过程,下面的结果为模型的预测输出结果,其中yhat就是模型的预测值。

六、结果展示和分析

下面的结果就是预测值和真实值的对比图,我这里的数据是按照小时为间隔,可以看到我这里预测了未来的24个时间点的数据也就是一天的数据,效果还可以吧只能说这个模型主要就是用法简单官方以只提供接口省去了很多训练的麻烦。

同时我们可以看到下面的MAE和MSE的结果在控制台输出如下->

六、全文总结 

到此本文已经全部讲解完成了,希望能够帮助到大家,在这里也给大家推荐一些我其它的博客的时间序列实战案例讲解,其中有数据分析的讲解就是我前面提到的如何设置参数的分析博客,最后希望大家订阅我的专栏,本专栏均分文章均分98,并且免费阅读。

概念理解 

15种时间序列预测方法总结(包含多种方法代码实现)

数据分析

时间序列预测中的数据分析->周期性、相关性、滞后性、趋势性、离群值等特性的分析方法

机器学习——难度等级(⭐⭐)

时间序列预测实战(四)(Xgboost)(Python)(机器学习)图解机制原理实现时间序列预测和分类(附一键运行代码资源下载和代码讲解)

深度学习——难度等级(⭐⭐⭐⭐)

时间序列预测实战(五)基于Bi-LSTM横向搭配LSTM进行回归问题解决

时间序列预测实战(七)(TPA-LSTM)结合TPA注意力机制的LSTM实现多元预测

时间序列预测实战(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

时间序列预测实战(十一)用SCINet实现滚动预测功能(附代码+数据集+原理介绍)

时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果

时间序列预测实战(十六)PyTorch实现GRU-FCN模型长期预测并可视化结果

Transformer——难度等级(⭐⭐⭐⭐)

时间序列预测模型实战案例(八)(Informer)个人数据集、详细参数、代码实战讲解

时间序列预测模型实战案例(一)深度学习华为MTS-Mixers模型

时间序列预测实战(十三)定制化数据集FNet模型实现滚动长期预测并可视化结果

时间序列预测实战(十四)Transformer模型实现长期预测并可视化结果(附代码+数据集+原理介绍)

个人创新模型——难度等级(⭐⭐⭐⭐⭐)

时间序列预测实战(十)(CNN-GRU-LSTM)通过堆叠CNN、GRU、LSTM实现多元预测和单元预测

传统的时间序列预测模型(⭐⭐)

时间序列预测实战(二)(Holt-Winter)(Python)结合K-折交叉验证进行时间序列预测实现企业级预测精度(包括运行代码以及代码讲解)

时间序列预测实战(六)深入理解ARIMA包括差分和相关性分析

融合模型——难度等级(⭐⭐⭐)

时间序列预测实战(九)PyTorch实现融合移动平均和LSTM-ARIMA进行长期预测

​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CICD 持续集成与持续交付——jenkins

部署 软件下载:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/ [rootcicd2 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm[rootcicd2 ~]# yum install -y fontconfig[rootcicd2 ~]# rpm -ivh jenkins-2.432-1.1.noarch.rpm启动服务 [rootcicd2 ~]# systemctl…

【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)

文章目录 第三章 识别CAN中的隐藏带宽信道3.1 隐蔽带宽vs.隐藏带宽3.1.1 隐蔽通道3.1.2 隐藏带宽通道 3.2 通道属性3.3 CAN隐藏带宽信道3.3.1 CAN帧ID字段3.3.2 CAN帧数据字段3.3.3 帧错误检测领域3.3.4 时间通道3.3.5 混合通道 3.4 构建信道带宽公式3.5通道矩阵3.6 结论 第四章…

Python 自动化(十八)admin后台管理

admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口,可供开发过程中调用和测试使用 django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…

深入理解注意力机制(上)-起源

一、介绍 近几年自然语言处理有很大的进展,从 2018 年 Google 推出的 BERT,到后来的 GPT、ChatGPT 等,这些模型当时能取得这样的成果,除了庞大的数据量及损害资源外,最重要的是的就是背后的Transformer模型&#xff0c…

C语言——操作符详解

前言:这篇文章主要讲解一下C语言中常见的操作符的使用,做一下整理,便于日后回顾,同时也希望能帮助到大家。 🎬个人简介:努力学习ing 📝CSDN主页 愚润求学 🌄每日鸡汤:念…

黑马程序员 计算机网络(笔记)

参考文章:【黑马程序员】计算机网络概述~ 程序员必须掌握的入门基础知识! 参考文章:黑马程序员Linux运维工作场景解决方案零基础到就业 参考文章:网络安全运维进阶教程,运维工程师深度学习教程 文章目录 linux入门到…

2023.11.17使用flask将多个图片文件上传至服务器

2023.11.17使用flask将多个图片文件上传至服务器 实现功能: 1、同时上传多个图片文件 2、验证文件扩展名 3、显示上传文件的文件名 4、显示文件上传结果 程序结构 main.py from flask import Flask, request, jsonify, render_template import osapp Flask(__n…

Android 10.0 系统修改usb连接电脑mtp和PTP的显示名称

1.前言 在10.0的产品定制化开发中,在usb模块otg连接电脑,调整为mtp文件传输模式的时候,这时可以在电脑看到手机的内部存储 显示在电脑的盘符中,会有一个mtp名称做盘符,所以为了统一这个名称,就需要修改这个名称,接下来分析下处理的 方法来解决这个问题 2.系统修改usb连…

[AutoSar]工程中的cpuload陷阱(三)测试

目录 关键词平台说明背景一、 测试结果对比1.1 不带cache1.2 带cache 二、小结 关键词 嵌入式、C语言、autosar 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (GCC) 背景 接着工程中的cpuload陷阱(二)中的描述…

装饰模式 rust和java的实现

装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。 装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。 这种模式创建了一个装饰类,用来包装原有的类&am…

(数据库管理系统)DBMS与(数据库系统)DBS的区别

数据库管理系统(DBMS,Database Management System)和数据库系统(DBS,Database System)是两个相关但不同的概念。 DBS是一个更广泛的概念,指的是计算机系统引入数据库后的系统,包括数…

翻译软件Mate Translate mac中文版介绍说明

Mate Translate mac可以帮你翻译超过100种语言的单词和短语,使用文本到语音转换,并浏览历史上已经完成的翻译。你还可以使用Control S在弹出窗口中快速交换语言。 Mate Translate Mac版软件介绍 Mate Translate 可以在你的所有设备之间轻松同步&#x…

微机原理练习题_13

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。) 1、十六进制数5BF.C8转换成二进制数是() A. 11011100111111101B B. 010111011011.01101B C. 010110111111.11001B D. 010111011011.11001B 2,最适合…

Ps:变换

可以向选区、整个图层、多个图层或图层蒙版应用变换 Transform,还可以向路径、矢量形状、矢量蒙版、选区边界或 Alpha 通道应用变换。 若要变换栅格(像素)图像,建议先将其转换为智能对象,以便进行非破坏性的变换。 Ps菜…

Python编程技巧 – 使用字符串(Strings)

Python编程技巧 – 使用字符串(Strings) Python Programming Essentials – Using Strings 本文简要介绍如何使用字符串,来进行Python编程。字符串有很多用途,包括输出结果、反馈状态、数据处理以及切片和文本筛选等 1. 字符串 字符串(St…

NSS [鹤城杯 2021]Middle magic

NSS [鹤城杯 2021]Middle magic 源码直接给了。 粗略一看&#xff0c;一共三个关卡 先看第一关&#xff1a; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)level(.*)$/, ${1}<!-- filtered -->${2}, $_GET[aaa]);if(preg_m…

nodejs微信小程序-实验室上机管理系统的设计与实现-安卓-python-PHP-计算机毕业设计

用户&#xff1a;管理员、教师、学生 基础功能&#xff1a;管理课表、管理机房情况、预约机房预约&#xff1b;权限不同&#xff0c;预约类型不同&#xff0c;教师可选课堂预约和个人&#xff1b;课堂预约。 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 …

深入理解注意力机制(下)——缩放点积注意力及示例

一、介绍 在这篇文章中&#xff0c;我们将重点介绍 Transformer 背后的 Scaled Dot-Product Attention&#xff0c;并详细解释其计算逻辑和设计原理。 在文章的最后&#xff0c;我们还会提供一个Attention的使用示例&#xff0c;希望读者看完后能够对Attention有更全面的了解。…

ICASSP2023年SPGC多语言AD检测的论文总结

文章目录 引言正文AbstractRelated ArticleNo.1: CONSEN: COMPLEMENTARY AND SIMULTANEOUS ENSEMBLE FOR ALZHEIMERSDISEASE DETECTION AND MMSE SCORE PREDICTION特征相关模型结构数据处理结果分析 No.2: CROSS-LINGUAL TRANSFER LEARNING FOR ALZHEIMERS DETECTION FROM SPON…

【Flink】窗口(Window)

窗口理解 窗口&#xff08;Window&#xff09;是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中&#xff0c;再对每个“桶”加以处理。 本文的重心将放在 Flink 如何进行窗口操作以及开发者如何尽可能地利用 Flink 所提供的功能。 对窗口的正确理解&#xff…