基于深度学习技术的电表大数据检测系统
来源:《 人工智能与机器人研究》 ,作者方向
摘要: 随着我国电厂不断发展,我国智能电表装机量不断扩大,日臻成熟,对智能电表的监测越来越重要。本文通过对电表数据的采集、清洗,完成数据格式化。运用皮尔森相关系数分析以及K折交叉验证等方法,进行数据分析。通过采用深度学习时序模型进行预测研究,最终达到检测电表运行状态的目的。通过利用智能电表大数据对电表运行状态的分析,可以判断电表运行是否正常,如果异常是属于故障还是有偷漏电发生,判断相关位置,以便进一步采取行动。该检测系统的研究与应用,可以避免智能电表的物理检测,可以达到延长正常电表的使用寿命,节省大量的资源的目的。
1. 引言
智能电网的基础是高速双向智能通信网络。通过传感测量、控制技术等实现高效、安全的电网运行,保证电网的智能化建设 [1]。智能电表作为智能电网的重要部分,主要涉及以下部分:测量、通信、数据处理单元等 [2],是一种智能化仪表,能够有效地测量电力参数、计量双向电能 [3],能够实现实时数据交互,对电能的质量进行监测,实施远程监控。
智能电表中使用了诸多新的科学技术,突破了电子式表的发展,以智能芯片作为核心,集成数据库、读表器以及操作系统等,通过计算机通信平台,实现自动化的电力计量和计费,更加快捷便利 [4]。智能电表是智能电网的智能终端和数据入口,为了适应智能电网,智能电表具有双向多种费率计量、用户端实时控制、多种数据传输模式、智能交互等多种应用功能。智能电网建设为全球智能电表及用电信息采集、处理系统产品带来了广阔的市场需求 [5] [6]。预计到2020年全球将安装近20亿台智能电表,智能电网将覆盖全世界80%的人口,智能电表渗透率达到60% [7]。
目前国家规定的智能电表使用年限一般为8年,但实际上在智能电表使用8年后,大部分可以正常使用,而以前采用的物理检测方式使拆下的电表基本全部更换了。如果可以只对异常电表进行更换,则可以为国家和个人节省巨大的每年高达百亿以上的经济成本。本次研究的目的是根据采集的用电小区的用电数据,对其进行数据分析,以期在不对电表进行物理处置的情况下通过挖掘出用户电表的异常信息,发现存在异常的电表 [8],为不拆电表进行物理检测提供相关依据与方法。
2. 数据分析与处理
2.1. 数据整理与分析
2.1.1. 解决问题的思路
本文研究的主要目的是根据电表的数据预测分析电表是否异常,异常的情况包括故障或者偷漏电等。
目前国内也有一些相关方面的研究已经或正在进行。其中有通过分析不同用户的电力消费类型,得出不同时间类型下的用户消费模型差异。利用支持向量机理论,来检测用电异常。这种方法所需训练时间较少,无需对人工异常数据进行分类,能有效降低方案的应用成本 [9]。
还有基于受攻击的智能电表CPU利用率和网络通信流量异常上升,提出AMI中基于大数据的检测方法。由各智能电表记录其CPU负荷率及网络通信流量,将此数据与电量功率数据一起上传到用电管理中心数据服务器,再由异常甄别系统对相同型号智能电表的CPU负荷率及网络通信流量进行对比,即可利用大量表计数据的统计特性,识别出CPU负荷率和通信流量明显偏高的异常电表 [10]。
国外针对智能电表端的研究进行得较为深入,目前主要在窃电、恶意软件检测等方面。
Babu V,Nicol D M等针对恶意代码在AMI网络中的传播问题,提出了在网络层和应用层部署新的协议,通过对报文语义和语法的检查,使得恶意代码的检测精度达到了99.72%至99.96% [11]。
Depuru S S R等通过对电力数据分类,利用SVM方法训练样本,使得对该样本的检测精度达到了98.4%。
智能电网的信息采集和量测主要是在量测设备上进行采集和汇总,主要包括电网状态量测系统和个人用户量测系统两类。如图1所示 [12]。
Figure 1. Smart grid testing system classification
图1. 智能电网量测系统分类
针对本项目小区电表的研究,在数据方面的处理应遵循:1) 通过特征工程各种方法,尽可能提取影响电表误差的特征;2) 通过特征和误差的关系建立回归模型,预测测试集中一个点/一段时间的误差,结论为误差是否在电表正常范围内,不在正常范围则判断小区电表是否有异常存在;3) 如存在异常电表,则根据单电表的用电特性行为模型,找出异常电表的存在。
2.1.2. 数据格式设置
针对获取的小区电表数据,设定相关参数如下:
每15分钟的小区总表电压U_super_15;
每15分钟的小区总表电流I_super_15;
每60分钟的用户表电压U_sub_60;
每60分钟的用户表电流I_sub_60;
每24小时用户表电量W_sub;
每24小时小区总表电量W_super;
总表与用户表总和之差为E。
UI与电量表比较得到误差E,时间粒度为一天。
2.1.3. 数据清洗
通过误差(总表–分表和)曲线图2发现,数据中存在两类错误值:重复值和非法值。
观察数据,发现分表与总表的分时电流电压精度不同,分表出现大量缺失值。采取的解决办法为用整点电流电压代替缺失值。最终,通过删除错误值,填补缺失值完成数据清洗。
Figure 2. Huayuan community error curve
图2. 花园小区误差曲线
2.1.4. 数据特性分析
通过绘制电量曲线如图3所示,选取较为理想的数据。经过分析,认定花园小区2016年数据及东辉花园全部数据较为理想。
Figure 3. Electric quantity of Huayuan community
图3. 花园小区电量曲线
为了分析误差与电量的关系,绘制了总表与分表和散点图如图4所示、绝对误差曲线图如图5所示以及相对误差曲线图如图6所示。
随后对误差的分布进行分析。下图分别为花园小区2016.1.1~3.1误差分布如图7所示、2016.3.1~5.1误差分布如图8所示、2016.5.1~7.1误差分布如图9所示以及2016.1.1~2016.7.1误差分布如图10所示。
Figure 4. Sub total & super of Huayuan community
图4. 花园小区总表与分表和
图10. 2016.1.1~7.1误差分布
经过分析发现,误差基本呈正态分布,但是分布并不固定,无法通过观察分布来确定异常点。
2.2. 数据进一步处理
2.2.1. 数据格式化
为便于进行机器学习分析,数据的每个日期增加了以下特征如表1所示。
特征 |
解释 |
总表数据(super) |
总表的电流值 |
误差(error) |
总表–分表和 |
相对日期(com_date) |
以某日为基准0,与基准日相差的天数 |
周(week) |
归一化为7维向量 |
月(month) |
归一化为12维向量 |
年(year) |
归一化为3维向量 |
对数值(log) |
总表以2为底的对数值 |
户数(numbers) |
当日的总户数 |
平均电流(A_mean) |
当日平均电流 |
平均电压(V_mean) |
当日平均电压 |
Table 1. Add data characteristics
表1. 增加数据特征
2.2.2. 皮尔森相关系数分析
为了给予机器学习更多方向性建议,对每个维度之间进行了相关系数分析 [13]。
2.2.3. K折交叉验证
对数据采取5折交叉验证方式,即将五分之一的数据用于测试,其余数据用于训练,可以得到五组不同的训练集与测试集 [14]。
3. 特征工程与拟合
3.1. 数据可靠性分析
得到的数据后需要对其可靠性进行分析。首先挑选花园小区中不同用户分析在同一时间段内同一时间的电压情况。经过分析发现在同一时刻,不同户数的电压情况是大致一致的,而且根据不同的日期,电压的变化趋势也及其相似。
接着再分析电流变化的情况。随机选取一个用户的电表,绘制其于不同时刻电流的折线图如图11所示。蓝线代表着凌晨3点,橙线代表清晨6点,而绿线代表下午6点。可以看出,3点是电流数值于三者中最低,而上午6点时有所升高,在下午6点时达到最高。可以理解是因为凌晨3点时用电量极低,大多数人都在睡眠,而下午6点用电逐渐增多。
Figure 11. Electricity consumption of same user
图11. 同一用户的用电情况
而这三条线在八月份时候整体变高,而且差距变小,则说明可能是因为八月份是夏天最热的时候,气温温度上升,用户开始频繁使用空调导致用电增加,而在夜间也保持空调处于打开状态。从而可以解释在八月份三个时间点的电流情况相差不多的原因。
随后以0.2 A作为标准,超过0.2 A即认为该用户处于用电状态。绘制0点到24点用电户数的图表如图12所示。由图可知,6点和18点的确用电人数较多,而凌晨3点较少,说明先前假设正确。
Figure 12. Number of users in different time at same day
图12. 同一天内不同时间用电户数
3.2. 异常点分析
数据中的异常值需要额外关注。如果不剔除异常值进行计算分析,往往会对结果带来不利影响。可以利用箱体图来识别数据批中的异常值,用python绘制用户关于电压的箱体图 [15]。全部用户5个月内的电压的箱体图如图13所示。可以发现0点到6点之间异常点极少,而之后由于可能存在重叠问题,所以是否属于异常点过多的情况较难判断。
Figure 13. Voltage box diagram
图13. 电压箱体图
电流的箱体图如图14所示,但是发现异常点都处于箱体的上方。因为大多数时间很多电器处于关闭状态,所以导致均值较低,更容易在上方产生异常点。正是利用图14确定了用0.2 A作为判断用户是否用电的标准。
Figure 14. Current box diagram
图14. 电流箱体图
3.3. 多项式拟合
利用公式 W=U∗I∗tW=U∗I∗t 然后求和,可以得到有分户计算出来的电量值。再用总表测得的电量值与之相减,便可得到电量测定的误差值。利用poly0fit对先前求得的误差值进行拟合,并绘制曲线 [16] [17]。数据选取时间间隔为连续7个月209天。通过改变多项式最高项次数可以做出不同的拟合图,下面两幅图是最高次幂分别为4和8的拟合图,如图15、图16所示。由4到8拟合程度提高明显,而实验证实最高次幂由8提高到10的效果不太明显。
Figure 16. Fitting with the highest power of 8
图16. 最高次幂为8的拟合
4. 深度学习时序模型
基于前面的分析,为发现总表测量和分表和的误差的时序性,使用了一些模型来体现数据中年份和四季带来的波动。模型主要依靠的信息源有两类:局部特征和全局特征。长短时记忆(LSTM)循环神经网络作为RNN的一个重要变体,几乎可以无缝建模具备多个输入变量的问题,这为时间序列预测带来极大益处,因为经典线性方法难以适应多变量或多输入预测问题。可以在Tensorflow和Keras深度学习库中搭建用于多变量时间序列预测的LSTM模型。
最近研究发现,LSTM模型在处理时序问题时有一定优势:因为其基于过去值和过去值的预测值来预测未来值而不是仅仅使用季节等离散不相关特征,使用过去值的预测值能使模型更加稳定。训练过程中每一步的错误都会累积,当某一步出现了极端错误,可能就会毁坏其后面所有时步的预测质量 [18] [19]。
深度学习时序模型的工作包括:1) 将原始数据集转换成适用于时间序列预测的数据集;2) 处理数据并使其适应用于多变量时间序列预测问题的LSTM模型;3) 做出预测并分析结果。
4.1. 时序数据预处理
经过之前的特征工程和数据处理,已经提取了数据中许多与误差相关的变量,这是因为RNN本身在特征提取上已足够强大。本模型使用的特征和数据类型如表2所示。
特征 |
解释 |
“sub”: “float” |
单元用户分表和电量 |
“super”: “float” |
总表电量测量值,实际x只取super和sub其一以保证模型的泛化能力 |
“error”: “float” |
总表与分表和相减得到电表的电量测量误差,本模型用做y值,其他特征为x值 |
“com_date”: “int” |
相对天数,原始数据的第一天设为0,之后每天递增 |
“week”: “list” |
时间特征向量,7维one-hot编码; |
“month”: “list” |
时间特征向量,12维one-hot编码; |
“year”: “list” |
时间特征向量,3维one-hot编码; |
“numbers”: “int” |
用电户数,因为3年里户数有变化(新搬入用户和搬出等) |
Table 2. Deep learning time model characteristics and data type
表2. 深度学习时序模型特征与数据类型
所有特征(包括one-hot编码的特征,包括x和y)都正则化成均值为零、单位方差的数据,每一个特征序列都是对本列单独正则化的。常用的正则化方法有标准化和最大值正则化。标准化Standardization是指将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值为0,方差为1。标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。最大值正则化MaxAbsScaler使得特征分布是在一个给定最小值和最大值的范围内的。一般情况下是在[0, 1]之间。最大值正则化是专门为稀疏数据的规模化所设计的。之后的实验中也验证了标准化,不做正则化和最值正则化的情况。实验发现标准化Standardization有时会产生负数,在训练和数据分析时需要额外注意 [20] [21]。
模型从原始时间序列上随机抽取固定长度的样本进行训练。例如,如果原始时间序列的长度为600天,那么把训练样本的时间步长设为200天,就可以有400种不同的起始点。这种采样方法相当于一种有效的数据增强机制。在每一步训练中,训练程序都会随机选择时序的开始点,相当于生成了无限长的、几乎不重复的训练数据。时间步长是本模型中重要的超参数,在学习序列预测问题时,LSTM通过时间步进行反向传播。之后可以为LSTM模型准备专用的时序数据集,这会涉及将数据集用作监督学习问题。监督学习问题可以设定为:1) 根据上一个时间段的总表和其他输入,预测当前时刻(t)的电表误差;2) 根据过去一天的电表情况以及下一个小时的预测情况,预测再下一个小时的电表误差情况。
在所有5年数据中,仅使用第1年的数据来拟合模型,然后用其余4年的数据进行评估。1) 将数据集分成训练集和测试集;2) 将训练集和测试集分别分成输入和输出变量;3) 将输入(X)重构为LSTM预期的3D格式,即[样本量,时间步,特征]。
4.2. 时序问题数据训练
时序问题中,划分训练集和验证集的方法有两种如图17所示。
Figure 17. Classification of training set and verifying set
图17. 训练集和验证集的划分方法
4.2.1. Walk-Forward Split方法
Walk-forward split方法事实上不是真的在划分数据。它的数据集的全集同时作为训练集和验证集,但验证集用了不同的时间表。相比训练集的时间表,验证集的时间表被调前了一个预测间隔期。
4.2.2. Side-by-Side Split方法
Side-by-side split方法是一种主流的划分方式,将数据集切分为独立的不同子集,一部分完全用于训练,另一部分完全用于验证。
Walk-forward split方法的结果更可观,比较符合研究的最终目标:用历史值预测未来值。但这种切分方法有其弊端,因为它需要在时间序列末端使用完全只用作预测的数据点,这样在时间序列上训练的数据点和预测的数据点间隔较长,想要准确预测未来的数据就会变得困难。假如有300天的历史数据,想要预测接下来的100天。如果选择Walk-forward split划分方法,则会使用第前100天作为训练数据,接下来100天作为训练过程中的预测数据,接下来100天的数据用作验证集。所以也就是实际上用了1/3的数据点在训练,在最后一次训练数据点和第一次预测数据点之间有200天的间隔。这个间隔较长,所以一旦离开训练的场景,预测质量会显著下降。如果只有100天的间隔,预测质量会有显著提升。Side-by-side split方法在末端序列上不会单独耗用数据点作为预测的数据集,但模型在验证集上的性能就会和训练集的性能有很强的关联性,却与未来要预测的真实数据没有任何相关性,所以,这样划分数据没有实质性作用,只是重复了在训练集上观察到的模型损失。
本模型中使用walk-forward split方法划分的验证集只是用来调优参数,最后的预测模型必然是在与训练集和验证集完全无相关的数据下运行的。
实际研究是将在第一个隐藏层中定义具有40个神经元的LSTM,在输出层中定义1个用于预测误差的神经元。输入数据维度将是1个具有22个特征的时间步长为40天的样本。
实际研究中使用了均方根误差(RMSE)损失函数和高效的随机梯度下降的Adam版本。该模型将适用于1000个epoch,大小为128的训练。选择epoch的数目时,因为不清楚模型训练到哪一步是最适合用于预测未来值的(因为基于当前数据的验证集和未来数据的关联性很弱),所以不能过早停止训练。经过实验最终选用1000作为epoch的数目。
模型拟合后,可以预测整个测试数据集。将预测与测试数据集相结合,并调整测试数据集的规模。还使用了预期的误差来调整测试数据集的规模。通过初始预测值和实际值,可以计算模型的误差分数。在这种情况下,可以计算出与变量相同的单元误差的均方根误差(RMSE)。RMSE是常用的回归问题的损失函数,不同于交叉熵损失适用于分类问题,在本问题中它可以快速得到损失并且得到的结果每一处都很平滑。
4.3. 结果分析与异常检测
实验测试了双层LSTM和单层LSTM的预测结果,隐层单元数量分别为20和40。结果如图18和图19所示。
Figure 18. Predicted value and real value of LSTM model
图18. LSTM模型预测值与真实值
Figure 19. Scatter diagram of LSTM model
图19. LSTM模型散点图
时间维度上的预测值和真实值比较,可以看到最初几步的预测较为准确,同时可以发现预测值有一定的滞后。散点图中,越靠近y = x直线表示模型预测越准确。
用滑窗进行异常检测,设置一个宽度为l的滑窗,假设阈值为t。
对于每一次滑动:如果窗口内每一个预测值与实际值之差都超过阈值,则认为从这一天开始出现误差。当窗口宽度为4,阈值为0.5时,结果如图20所示。即第65天开始,数据出现可以检测的异常,通过对宽度与阈值的调整,可以得到更高精度的结果。
当数据没有异常时,结果如图21所示。
Figure 20. Abnormal date of calculation
图20. 计算出的异常相对日期
Figure 21. Predicated value within range
图21. 预测值在范围之内
5. 结论
本文所介绍的基于深度学习模型的对预测检测电表是否异常的方法是行之有效的。随着我国智能电表的普及与应用,在更多大数据的支持下,对智能电表的预测检测会更加准确,也可以在未来使我国智能电表在使用周期寿命到达后可以不拆表进行相关检测,保证无故障电表继续正常使用,从而使电表的实际使用寿命有所增加,从而节省大量的资源。
审核编辑:符乾江
评论
查看更多