【Mo 人工智能技术博客】家庭用户的用电预测

栏目:未来教育  时间:2023-08-04
手机版

  用电量可以反映一个国家经济发展的水平,对用电量进行全面的理解有助于减少家庭的电费支出。

  对企业而言,对用电量全面的理解有助于提高经营的效率。对于政府而言,全面的了解用电量可以减少政府对发电,供电等需要的基建投资,为政府对当地经济发展制定更好更全面的规划。

  鉴于智能电表的兴起以及太阳能电池板等发电技术的广泛采用,有大量的用电数据可供选择。该数据代表了功率的相关变量,这些变量又可用于建模甚至预测未来的电力消耗。像长期短期记忆网络(LSTM)这样的神经网络能够处理多个输入变量的问题。这在时间序列预测中具有很大的益处,而传统的线性方法难以适应多变量或多输入预测问题。

  在本教程中,您将了解如何在 Keras 深度学习库中开发多变量时间序列预测的 LSTM 模型。

  完成本教程后,您将知道:

  如何将原始数据集转换为可用于时间序列预测的类型如何搭建解决多变量时间序列预测问题的 LSTM 模型如何做出预测并将结果重新调整到原始单位特征介绍

  date: 日期格式为 dd/mm/yytime: 时间格式为 hh:mm:ssGlobal_active_power: 家庭消耗的总有功功率(千瓦),在交流电路中,电源在一个周期内发出瞬时功率的平均值(或负载电阻所消耗的功率),称为"有功功率"Global_reactive_power: 家庭消耗的总无功功率(千瓦),在具有电感或电容的电路中,在每半个周期内,把电源能量变成磁场(或电场)能量贮存起来,然后,再释放,又把贮存的磁场(或电场)能量再返回给电源,只是进行这种能量的交换,并没有真正消耗能量,我们把这个交换的功率值,称为" 无功功率"voltage: 平均电压(伏特)Global_intensity: 平均电流强度(安培)sub_metering_1: 厨房的有功功率sub_metering_2: 用于洗衣机等电器的有功功率sub_metering_3: 空调热水器等电器的有功功率这里我们使用的是时间序列预测模型,利用历史数据来预测之后的 Global_active_power。

  上面代码执行了以下操作:

  1)将 'Date' 和 'Time' 两列合并为 'dt'

  2)将上面的数据转换为时间序列类型,将时间作为索引。

  

  我们可以看出 Global_active_power 大于 Global_reactive_power, voltage 基本稳定在 233 伏特。

  

  我们可以通过上表了解数据的分布特征,比如均值和方差,还有最小值等等。

  在原始计量数据,特别是用户电量抽取过程中,发现存在缺失现象。若将这些值抛弃掉,会严重影响用电预测的结果。为了达到较好的建模效果,需要对缺失值进行处理。

  大部分真实的数据集都难以观察,因为它们有很多列变量,以及很多行数据。理解信息这方面大量都依赖于视觉。查看数据基本等价于了解数据。然而,基本上我们只能理解视觉上的二维或者三维数据,最好是二维。所以数据可视化能够帮助我们提高对数据的理解。

  对数据集中呈现的结构和相关性进行观察,会让它们易于理解。一个准确的机器学习模型给出的预测,应当能够反映出数据集中所体现的结构和相关性。要明确一个模型给出的预测是否可信,对这些结构和相关性进行理解是首当其冲的。

  我们可以使用 resample 函数使特征按不同单位进行聚合。例如:使用参数 'H' 调用此函数使时间索引的数据按小时聚合。

  下面我们对 Global_active_power 按天进行聚合,并比较它的总和和平均值。 可以看出,重采样数据集的平均值和总和具有相似的结构。

  

  

  

  

  我们可以看出每个月电压平均值变化幅度非常小,基本保持稳定。

  

  

  可以看出家庭消耗的总有功功率主要集中在 0-2kw 范围内

  

  

  从上面的两个图中可以看出 'Global_intensity' 和 'Global_active_power' 是线性相关的。 但 'Voltage' 和 'Global_active_power' 的相关性较低, 这是机器学习所要观察的。

  

  

  从上面可以看出,采用重采样技术可以改变特征之间的相关性, 这对于特征工程非常重要。

  在可以使用深度学习之前,必须将时间序列预测问题调整为监督学习问题,形成输入和输出序列对,利用前一时间的 Global_active_power 和其他特征预测当前时间的 Global_active_power。

  因为这里我们预测 ‘Global_active_power' 不仅用到过去时间的 ‘Global_active_power' 还会用到其他的特征,比如:'Voltage‘,这时候我们把此类问题叫做多变量时间序列预测。下面我们展示将时间序列问题转换为监督学习问题的过程。

  我们将数据以小时进行聚合,这样也可以减少计算时间,可以快速获得测试模型的结果。 我们以小时进行聚合(原始数据以分钟为单位)。这将把数据大小从 2075259 减少到 34589,但依然保持数据的整体结构。

  数据归一化处理是数据挖掘的一项基础工作。不同指标往往具有不同的量纲,数值间的差别可能很大,不进行处理可能会影响数据分析的结果。为了消除指标间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入特定的区域,以便于进行综合分析。

  同样我们必须对用户电量的各指标进行处理,这里我们用到最小最大规范化。

  这里,我们将前三年的数据作为训练集,后一年的样本作为测试集,并将数据改为 3 维格式。

  模型架构

  1)LSTM 在第一个可见层中有 100 个神经元

  2)丢弃 20%,防止过拟合

  3)输出层中 1 个神经元,用于预测 Global_active_power

  4)使用平均绝对误差(MAE)损失函数和随机梯度下降的 Adam 优化器

  5)该模型 epoch 为 20,批次大小为 70

  

  我们可以看出模型的收敛速度很快。

  预测模型对训练集进行预测而得到的准确率并不能很好地反映预测模型对未来的性能,为了有效判断一

  个预测模型的性能表现,需要一组没有参加预测模型建立的数据集,并在该模型上评价预测模型的准确率,这组独立的数据集叫做测试集。在测试集进行预测并且评估,我们怎样对模型进行性能衡量?

  回归问题的评价指标:通常用相对/绝对误差,平均绝对误差,均方误差,均方根误差等指标来衡量,分类问题的评价指标:准确率,精确率,召回率,ROC曲线,混淆矩阵。

  我们将预测与测试数据集相结合,并反演缩放。

  以预测值和实际值为原始尺度,我们可以计算模型的误差分数。 在这种情况下,我们计算出与变量本身相同的单位产生误差的均方根误差(RMSE)。

  

  能不能进一步的改进模型呢?下面提出了一些可能的改进模型的方案,有兴趣的话可以试一试哦。

  1.在缺失值处理中利用其他的插值方法

  2.使用复杂的模型

  3.调整 epoch 和 batch_size

  今天我们一起制作了一个家庭用户用电预测的应用,大家可以在项目源码地址 fork 这个项目

  http://www.momodel.cn:8899/explore/5cde0ed11afd94371e5697ff?type=app

  我们首先对数据进行预处理,处理缺失值;接着进行数据可视化,了解数据的结构和相关性;然后搭建 LSTM 模型,其中关键的是将问题转化为监督学习问题;最后我们对模型进行评估,并提出了优化模型的建议。

  使用我们的模型同样也可以预测温湿度和股价等等,只需要略加修改就行,来做出自己的应用吧。

  参考资料:

  https://wenku.baidu.com/view/3973baa6951ea76e58fafab069dc5022aaea46b9.html

  https://blog.csdn.net/sinat_22510827/article/details/80996937

  https://blog.csdn.net/weixin_40651515/article/details/83895707

  https://www.jianshu.com/p/bebf8ca6a946

  Mo(网址:momodel.cn)是一个支持 Python 的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。

  Mo 人工智能俱乐部 是由网站的研发与产品设计团队发起、致力于降低人工智能开发与使用门槛的俱乐部。团队具备大数据处理分析、可视化与数据建模经验,已承担多领域智能项目,具备从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析与人工智能技术,并以此来促进数据驱动的科学研究。

  近期Mo也在持续进行机器学习相关的入门课程和论文分享活动,欢迎大家关注我们的公众号:MomodelAI获取新资讯!

上一篇:广东省考公务员需要什么条件_国考报考的条件
下一篇:新校区来了?落户广州!西安这所211高校为何迈出这一步?

最近更新未来教育