机器学习-使用 XGBoost 时间序列预测能源消耗

news2024/11/18 21:24:39

简而言之,时间序列预测是根据以前的历史数据预测未来值的过程。目前使用时间序列预测的最热门领域之一是加密货币市场,人们希望预测比特币或以太坊等流行加密货币的价格在未来几天甚至更长时间内将如何波动。另一个现实世界的案例是能源消耗预测。尤其是在能源成为主要讨论焦点之一的当今世界,能够准确预测能源消耗需求对于任何电力公司来说都是至关重要的工具。在本文中,

问题

我们将重点关注能源消耗问题,给定一个城市中不同家庭日常能源消耗的足够大的数据集,我们的任务是尽可能准确地预测未来的能源需求。出于本教程的目的,我选择了伦敦能源数据集,其中包含英国伦敦市 5,567 个随机选择的家庭在 2011 年 11 月至 2014 年 2 月期间的能源消耗。为了改进我们的预测,我们将此数据集与伦敦天气数据集结合起来,以便在此过程中添加天气相关数据。

这是这个迷你系列的第一部分。阅读完本文后,请务必检查下一部分,该部分通过合并滞后特征显着改善了结果。

预处理

在每个项目中我们要做的第一件事就是充分了解数据并在需要时对其进行预处理。要使用 pandas 查看数据,我们可以执行以下操作:

“LCLid”是标识每个家庭的唯一字符串,“Date”是不言自明的,“KWH”是该日期消耗的千瓦时总数,并且根本没有缺失值。由于我们想要以一般方式而不是每个家庭来预测消耗量,因此我们需要按日期对结果进行分组并平均千瓦时。

在这一点上,如果我们能够了解这些年来消费的变化方式,那就太好了。线图可以揭示这一点:

整个数据集的能耗图

季节性特征十分明显。在冬季,我们观察到能源需求较高,而在整个夏季,能源消耗处于最低水平。这种行为在数据集中每年都会重复,具有不同的高值和低值。为了可视化一年内的波动,我们可以这样做:

年能源消耗

为了训练像 XGBoost 和 LightGB 这样的模型,我们需要自己创建特征。目前,我们只有一项功能:完整日期。我们可以根据完整日期提取不同的特征,例如星期几、一年中的某一天、月份等。为了实现这一目标,我们可以这样做:

因此,“日期”功能目前是多余的。在删除它之前,我们将使用它将数据集拆分为训练集和测试集。与传统的训练相反,在时间序列中,我们不能只是以随机的方式分割集合,因为数据的顺序非常重要,而且我们只能合并以前的数据。否则,我们可能会被提示预测一个值,同时也考虑到未来的值!该数据集包含近 2.5 年的数据,因此对于测试集,我们将仅使用最近 6 个月的数据。如果训练集更大,我们会使用去年全年作为测试集。

为了再次可视化训练集和测试集之间的分割和区分,我们可以绘制:

可视化训练-测试分离

现在我们可以删除“日期”功能并创建训练和测试集:

训练模型

超参数优化将通过网格搜索来完成。网格搜索采用参数和一些值作为配置,并尝试每种可能的组合。达到最佳结果的参数配置将是形成最佳估计器的参数配置。网格搜索也利用交叉验证,因此提供适当的分割机制至关重要。同样,由于问题的性质,我们不能只使用简单的 k 折交叉验证。Scikit learn 提供了TimeSeriesSplit方法,该方法以尊重连续性的方式增量地分割数据。

对于 LightGB 模型,我们可以通过提供不同的参数来完成相同的操作:

评估

为了评估测试集上的最佳估计器,我们将计算一些指标。它们是平均绝对误差 (MAE)、均方误差 (MSE) 和平均绝对百分比误差 (MAPE)。其中每一个都提供了对训练模型的实际性能的不同视角。此外,我们将绘制线图以更好地可视化模型的性能。

最后,为了评估上述任何模型,我们必须运行以下命令:

XGBoost 结果

LightGBM 结果

尽管 XGBoost 可以更准确地预测冬季的能耗,但为了严格量化和比较性能,我们需要计算误差指标。通过查看下表,很明显 XGBoost 在所有情况下都优于 LightGBM。

预处理天气数据

该模型表现相对较好,但是有没有办法进一步改进呢?答案是肯定的。有许多不同的提示和技巧可以用来获得更好的结果。其中之一是使用与能耗直接或间接相关的辅助功能。例如,天气数据在预测能源需求时可以发挥决定性作用

首先我们看一下数据的结构:

需要填写的缺失数据有多种。填充缺失数据并非易事,取决于具体情况。由于我们的天气数据每天都取决于前几天和后几天,因此我们将通过插值来填充这些值。此外,我们将把“date”列转换为“datetime”,然后合并两个数据帧以获得一个增强的数据帧。

请记住,生成增强集后,我们必须重新运行拆分过程并获取新的“training_data”和“testing_data”。不要忘记也包含新功能。

无需更新训练步骤。在新数据集上训练模型后,我们得到以下结果:

XGBoost 根据天气结果进行增强

LightGBM 根据天气结果进行增强

天气数据显着提高了两个模型的性能。特别是,在 XGBoost 场景中,MAE 降低了近 44%,而 MAPE 从 19% 升至 16%。对于 LightGBM,MAE 下降了 42%,MAPE 从 19.8% 下降到 16.7%。

结论和未来的步骤

集成模型是非常强大的机器学习工具,可用于时间序列预测问题。在本文中,我们了解了在能源消耗的情况下这是如何完成的。首先,我们仅使用日期因素来训练模型。后来,我们在训练过程中考虑了与手头任务相关的其他数据,以便显着提高结果。

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

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

相关文章

【C++设计模式】用简单工厂模式实现按汽车重量输出汽车类型

2023年8月24日&#xff0c;周四凌晨 #include<iostream>class CarType{ public:virtual std::string getType()0; };class MiniCar:public CarType{ public:std::string getType() override{return "小型车";}; };class MidSizeCar:public CarType{ public:std…

【高效学习】《How to work more efficiently》一 part one

书名 Comment travailler plus efficacement 直译英语为 How to work more efficiently&#xff0c;意思是如何高效学习。 感觉比较有用&#xff0c;所以发出来 为法国在读 CPGE (大学校预科 Classe Prparatoire aux Grandes Ecoles) 备考 Concours (竞赛选拔考试) 和在大学…

汽车摩托车零部件出口管理ERP解决方案

近年来&#xff0c;随着全球经济的发展&#xff0c;人们对交通工具的需求增加&#xff0c;国内汽车、摩托车市场的不断扩大&#xff0c;以及国内制造技术的不断提高&#xff0c;中国汽车、摩托车零部件出口业务迎来了广阔的发展前景&#xff0c;带动了汽车配件和摩托车配件市场…

什么是响应式设计(Responsive Design)?如何实现一个响应式网页?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式设计&#xff08;Responsive Design&#xff09;⭐ 如何实现一个响应式网页&#xff1f;1. 弹性网格布局2. 媒体查询3. 弹性图像和媒体4. 流式布局5. 优化导航6. 测试和调整7. 图片优化8. 字体优化9. 渐进增强10. 面向移动优先11. …

Vue2Editor 图片上传及不允许粘贴图片

首先封装一下图片上传方法(纯前端)&#xff1a; import * as qiniu from qiniu-jsexport function uploadFile(file,token) {let fileNameLen file.name.length;let startPos file.name.lastIndexOf(".");//文件名const key new Date().getTime() _ file.name.…

postgresql 条件表达式

postgresql 条件表达式 简单CASE表达式搜索CASE表达式缩写函数nullif函数示例 coalesce函数 总结 简单CASE表达式 语法如下 case 表达式when 值1 then 结果1when 值2 then 结果2else 默认值 end;select e.first_name , e.last_name , case e.department_id when 90 then 管…

Ansible 使用 RHEL 系统角色

安装 RHEL 系统角色软件包&#xff0c;并创建符合以下条件的 playbook /home/greg/ansible/timesync.yml 在所有受管节点上运行 使用 timesync 角色 配置该角色&#xff0c;以使用当前有效的 NTP 提供商 配置该角色&#xff0c;以使用时间服务器 172.25.254.254 配置该角色&am…

C++信息学奥赛1123:图像相似度

首先&#xff0c;通过 cin 从用户输入中获取两个整数 n 和 m&#xff0c;分别表示数组的行数和列数。 接下来&#xff0c;定义两个二维数组 arr 和 att&#xff0c;分别用来存储原始数据和对比数据。数组的大小为 n 行 m 列。 使用嵌套的 for 循环&#xff0c;依次读取用户输…

Python“牵手”lazada商品详情API接口运用场景及功能介绍

lazada电商API接口是针对lazada提供的电商服务平台&#xff0c;为开发人员提供了简单、可靠的技术来与lazada电商平台进行数据交互&#xff0c;实现一系列开发、管理和营销等操作。其中包括商品详情API接口&#xff0c;通过这个API接口商家可以获取商品的详细信息&#xff0c;包…

仓库使用综合练习

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 2、安装搭建私有仓库 Harbor 3、编写Dockerfile制作Web应用系统nginx镜像&#xff0c;生成镜像nginx:v1.1&#xff0c;并推送其到私有仓库。 4、Dockerfile快速搭建自己专属的LAMP环境&#xff0c;生…

什么是深拷贝和浅拷贝?

面试回答 在计算机内存中&#xff0c;每个对象都有一个地址&#xff0c;这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时&#xff0c;实际上是将该对象的地址赋值给变量。因此&#xff0c;如果我们将一个对象复制到另一个变量中国&#xff0c;实际上是将对象…

win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问

问题 windows安全中心服务被禁用 winr 输入services.msc 找到windows安全中心服务查看是否被禁用&#xff0c;改为启动&#xff0c;不可以改动看第三条 打开设置&#xff0c;找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gped…

SpringBoot整合Mybatis 简单试用

1. 导入依赖 我使用MySQL&#xff0c;需要导入MySQL的驱动依赖此外要在SpringBoot中使用Mybatis&#xff0c;则需要导入Mybatis启动器 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifact…

wazuh环境配置及案例复现

文章目录 wazuh环境配置及案例复现wazuh环境配置 案例复现 wazuh环境配置及案例复现 wazuh环境配置 进入官网下载ova软件 https://documentation.wazuh.com/current/deployment-options/virtual-machine/virtual-machine.html 打开下载的ova&#xff0c;密码和用户名会显示…

帆软报表系统未授权查看访问内网ip

子禽问于子贡曰&#xff1a;“夫子至于是邦也&#xff0c;必闻其政&#xff0c;求之与&#xff1f;抑与之与&#xff1f;”子贡曰&#xff1a;“夫子温、良、恭、俭、让以得之。夫子之求之也&#xff0c;其诸异乎人之求之与&#xff01;” 漏洞复现 未授权查看访问内网ip 构…

stm32之4.时钟体系

3.时钟体系(给单片机提供一个非常稳定的频率信号) ①可以使用三种不同的时钟源来驱动系统时钟&#xff08;SYSCLK&#xff09;&#xff0c;CPU运行的频率为168MHZ&#xff1b; HSI(RC振荡器时钟&#xff0c;也就是高速内部时钟&#xff0c;一般来说很少用&#xff0c;因为精度…

服务器基础

基础 介绍 可以理解为企业级的电脑&#xff0c;比个人使用的电脑具备更强的配置、性能、可靠性及稳定性。设计工艺和器件全部采用企业级设计&#xff0c;保障7*24小时稳定运行。 演进历史 处理性能 外观 发展方向 分类 按外形分类 按高度分类 按应用分类 按综合能力分类…

29款影音娱乐-视频类应用评测体验报告

为方便开发者更好地衡量APP在同类产品中的表现和竞争力&#xff0c;有针对性地进行产品优化&#xff0c;软件绿色联盟策划了垂类APP评测体验专题&#xff0c;目前已发布了天气类、小说类、教育学习类APP评测体验报告&#xff0c;本期将对影音娱乐类中的视频类APP围绕绿标五大标…

stm32入门

stm32是基于ARM内核框架的&#xff0c;ARM的发展如下所示。 stm32的基本信息。 stm32的命名规则。 有关GPIO。&#xff08;STM32 GPIO 详解_stm32gpio_天地神仙的博客-CSDN博客&#xff09; 实际例子。 led.h #ifndef _led_H #define _led_H#include "system.h"/* …

0103水平分片-jdbc-shardingsphere-中间件

文章目录 1 准备服务器1.1 创建server-order0容器1.2 创建server-order1容器 2、基本水平分片2.1、基本配置2.2、数据源配置2.3、标椎分片表配置2.4、行表达式2.5、分片算法配置2.6、分布式序列算法 3、多表关联3.1、创建关联表3.2、创建实体类3.3、创建Mapper3.4、配置关联表3…