张恒超 ,沈秋英 ,沈 杰 ,李苏芙 ,范 彪 ,王 琨 ,蔡嘉辉 ,吕自贵
(1. 国网江苏省电力有限公司苏州供电分公司,江苏 苏州 215004; 2. 江南大学机械工程学院,江苏 无锡 214122; 3. 江苏集萃智能制造技术研究所有限公司,江苏 南京 210000)
引发线损异常的因素复杂多变,高效迅捷的分析、定位并解决线损异常的技术难度大,不能妥善处理则会降低台区运行的经济性和稳定性[1-2]。现有的用电检查技术主要采用人工辅以部分设备作业的现场检测方式,但往往成本高效率低,准确率难以保证,开发一种高效、精准的窃电侦测技术对提升电网的稳定性与安全性起着重要的促进作用。
台区线损异常处理方法有:系统诊断、人工研判、现场排查、采集排查、窃电及违约用电排查和常态运行监控。众多研究人员对台区线损异常处理进行了研究,施文[3]等人探究了台区线损的形成原因,提出了具体问题的解决方法,然而在对如何进行闭环线损治理上并未提出见解。邢毓卿[4]等人通过专家系统建立台区线损诊断模型,实现了对台区线损的异常原因的分析,但在线损异常诊断模型的准确性上还可以有进一步提升。
其中,窃电作为线损异常的重要因素,给电力行业造成了巨大损失[5]。在美国,每年因电力盗窃造成的损失数以亿计。传统的窃电检测方法成本过高,为解决这个困境,亟须研究一种迅速、精确的窃电检测方法。近年来,深度学习作为实现人工智能的关键技术在多个领域中迅猛发展。本文依托海量的电力数据,提出了基于DenseNet 算法的检测模型。台区线损异常包括关口计量装置故障、窃电、用户计量装置异常、户变关系异常等问题,采用经验知识的方法进行判断[6-7]。
所开发的系统软件包含用电采集失败查询模块、任意或连续日期线损台区查询模块、窃电检测模块、计量系统诊断模块、户变关系错误诊断模块。从数据分析、线损异常诊断、闭环管理方面,实现全方位的线损诊断与管控。
本系统以C#和python 作为主要的开发语言。经了解,电网业务人员和客户端多选用Windows 系统作为操作系统,而WinForm 框架能够为开发者提供多元美观的窗体控件,开发效率高且操作简单,且开发界面可以达到良好的可视化效果。据此,本文的系统开发将在Windows 窗体的基础上,使用框架WinForm,利用C#编程语言完成。以国家电网某供电公司所提供的线损相关历史用电数据为数据来源,按照电力行业的现行标准和规范,实现供电公司要求的功能,设计开发出的线损异常诊断系统的功能结构图如图1 所示,由台区线损异常诊断模块和闭环管理模块两个模块组成。
图1 功能结构图
线损异常台区查询模块由统计线损率考核阈值设置、单日线损异常台区查询以及多日线损异常台区查询3 个部分组成。该模块的实现是基于目前收集到的台区线损与电力历史数据,在设定好并将上述数据经过相应的逻辑算法运算后,搜索并筛选出单日或多日内的台区线损异常信息,将这些台区线损异常信息加以存储。
闭环管理模块的主要功能是将诊断出的线损异常状况通过电脑客户端或者手机App 及时发送给检修人员,以提升电力维修工作的效率。
为了弥补当前常见窃电诊断方式的不足,首先在用户用电数据的基础上分析用户的用电行为,提出一种基于DenseNet-RF 的窃电检测算法,利用供电企业提供的大量电力数据进行模型训练,将训练得到的模型与常见的用户窃电模型作比较,验证提出的窃电检测模型预测是否准确,并对除此之外的导致线损异常的原因与其相对应的线损异常情况进行分析,得到其它不同的线损异常原因,提出相应的线损异常检测方法,最终形成完整的线损异常诊断流程。
在电网业务场景中,很难获得学术上的标准数据集。从国家电网某供电公司收集到用电窃电数据正反样本数量比约为10∶1,以用户每15 min 的采集频率记录用电量情况作为数据来源。数据集包含台区用户每日用电量、合同容量以及作为标签的用户状态。将正类1 作为窃电用户,负类0 作为正常用户。大量的客户用电数据,为本文研究窃电检测提供了可靠的数据保障。
不平衡的数据集会引发过拟合的问题,导致预测结果向样本占比大的类别偏移,使得模型的泛化能力弱化。为解决这个问题,首先采用文献提出的样本生成方法生成更多的窃电数据,同时采用SMOTE 算法平衡数据集当中的正常用电样本数量和疑似窃电样本数量。
此外,为加快网络收敛,对用电数据作归一化处理。
式中:max(e)、min(e)分别为样本最大值和最小值;et为总体样本里某一值。
通过数据预处理得到同等数量的正常样本和窃电样本共10 000 个。每次训练时,随机抽取其中的8 000 个样本数据为训练集,其中的2 000 个样本数据为测试集。
DenseNet 是由黄高博士等设计的一种网络结构,由Dense Block 和Transition Layer 两个单元组成。其中,Dense Block 的各层与之后的各层密集连接,2 个Dense Block 之间通过Transition Layer 连接[8],设Dense Block 中有i层特征图层,第i层的输出记作Xi,第i层的非线性映射记作Hi,Dense Block中包含的密集连接数目为i×(i+1)/2 ,
式中:Xi=H([Xi-1,Xi-2,···,X1,X0]) 为将第0 层至第i层的输出根据通道数作合并级联,H() 得到图层经过批量标准化(batch normalization, BN)、激活函数(rectified linear unit, RELU)、卷积操作(convolution,Conv)等操作以后的输出。通过合并级联可以把卷积操作得到的特征数据合并,在进行训练时提高初始特征,进而提升图层使用率和模型分析的精度。层与层间通过Concatenation 连接,Dense Block 结构如图2 所示。
图2 Dense Block 示意图
窃电检测模型训练基本流程为:首先通过DenseNet 网络,从智能电测指示仪表数据集中获取得到用户的电能特性,接着再利用RF 算法使用所获得的特性参数训练分类器,然后通过网格搜索算法对特性参数进行优选,由此实现了对随机森林分类器的最优预测选择,进而找出疑似窃电行为。模型的输入为实际用户用电数据,而输出则为疑似窃电用户。模型训练流程图如图3 所示,其中带训练网络的配置信息如表1 所示,其中k代表特征图层的增长速率。
表1 DenseNet 及CNN 网络参数配置信息表
图3 模型训练流程图
窃电检测模型训练的具体实现流程如下。
数据预处理:利用SMOTE 算法,保证得到同样数量的正常样本和窃电样本,共计12 096 个。对全部样本数据作了归一化处理,随机抽取其中的10 000 个数据样本为训练集,抽取其中的2 096 个数据样本为测试集。所有用户电力能耗矩阵的维数均为534 × 48。
配置网络模型:分别通过RF、XGBoost(extreme gradient boosting)和梯度提升树(gradient boosting decision tree,GBDT)等机器学习算法来训练用户窃电检测模型,根据表1 中的配置参数训练WDNet、自定义CNN、DenseNet 等用户窃电检测模型。
训练过程:利用矩阵变换,让用户电力能耗矩阵适应于各种算法的特征输入,包括训练机器学习模型时调用scikit-learn 中的算法函数,通过网格搜索算法确定最佳参数,最终输出相应的模型;自定义CNN 的训练过程中首先将矩阵增维至1 × 534 ×48,接着再进行网络构建,最终通过全连接层完成分类,将分类结果通过向量的归一化分析后在Softmax 层输出具体类别。分别构建DenseNet-121、DenseNet-169 和DenseNet-201(k=32)三种网络,为更好地适应DenseNet 网络的输入尺寸,需要先把输入的用户电力能耗矩阵维数变换为1 × 178 × 144,在构建模型前应当先做一次卷积操作以提取图层特征,做一次池化操作对图层尺寸进行压缩,接着按照表1 中的配置参数构造Dense Block 和Transition Layer 两个部分。其中,Dense Block 的作用主要是促进信息的特征重用,在Transition Layer 中,1 × 1卷积层的作用主要是降低矩阵维数,2 × 2 平均池化层的作用主要是压缩图层尺寸,以减少网络参数,经过池化操作以后,在全连接层中对图层信息完成分类,接着再在Softmax 层中做向量归一化,最后输出特定类别。每个算法函数将生成k个特征图,k为输入层通道数。在这一步中,更改不同超参数k,以比较不同DenseNet 模型的优劣。
存储训练结果,选择最优模型:向训练得到的各模型中输入事先准备好的测试集并得到训练结果,比较不同模型生成的分类结果以及测试集标注的真实标签是否对应,以此评判该模型的优劣,选择最优的DenseNet 模型。
融合模型:在上一步模型训练中,得到最优DenseNet 以后,修改优化模型参数,接着利用随机森林算法对图层特征进行二次训练,最终获得DenseNet-RF 模型。
诊断疑似窃电用户:从输出的分类结果中,能够判断用户是否存在窃电嫌疑。其中,窃电检测模型以智能电测指示仪表数据为输入,以疑似窃电用户为输出。
为验证DenseNet 模型的可靠性,使用数据集对窃电检测模型开展了分析。测试设备配置为Windows 10,CPU 为AMD Ryzen 5 1400,显卡为RTX 2070,总内存8 GB;采用tensorflow 深度学习框架和scikitlearn 机器学习框架进行研究。DenseNet 和CNN 模型通过多轮训练获得,其训练过程如图4(a)(b)(c)所示。另外本文还比较了其他常用的机器学习算法,包括支持向量机(SVM),随机森林(Random Forest,RF),梯度增强决策树(GBDT)和逻辑回归(LR),其训练结果能够通过调用scikit-learn 的库函数读出,训练结果表2 所示。
表2 算法的参数配置与测试集准确率
图4 训练过程曲线
根据以上结果,可得结论如下:在时间成本方面,相较于普通CNN 算法,DenseNet-121 网络模型的迭代次数最少,模型收敛也更快,相应的模型训练所需时间更少;在模型准确度方面,DenseNet-121 网络模型相较于普通CNN、RF、GBDT、LR和SVM 等机器学习算法在测试集中分类准确率明显更高,在测试集中准确率达到95.18%,由此可见DenseNet 模型用于检测用户是否存在窃电行为表现出良好的准确性。
将通过tensorflow 训练好的模型以H5 格式保存,利用flask 部署模型,可以在系统软件中调用该模型进行预测。模型部署应用流程图如图5 所示。
图5 模型部署应用流程图
台区线损异常原因包括用电采集失败、计量系统问题、窃电、户变关系错误等,在本系统中采用不同的模块来实现各类功能。
该模块包括近期、长期采集失败查询与任意或连续日期线损异常台区查询。近期、长期采集失败查询是根据线损率、用户参与率以及可参照线损率来进行逻辑判断。如图6 所示为近期、长期采集失败查询的具体判断流程,a表示线损率阈值下限,b表示线损率阈值上限。
图6 GIGWOBP 预测值
任意或连续日期线损台区查询模块包括历史日期内任意两日都存在线损异常台区查询与连续多日的线损的异常台区查询,将查询的日期范围和阈值输入即可实现查询,并可将持续线损的台区以不同的命名方式存入数据库中,并在列表中显示。任意或连续日期线损台区的分析过程如图7 所示。当日的线损异常台区信息表记为allLoss,持续线损数据表记为ChiX,持续负损数据表记为ChiF,持续高损数据表记为ChiG。
图7 任意或连续日期线损台区查询模块流程图
3.2.1 关口计量装置故障诊断模块
根据当日线损异常台区信息表,可以查询到存在线损异常的台区信息,向计量系统问题诊断模块中导入台区主变当日的电流曲线数据,包含日期、点数、相序和每15 min 采集的电流数据等。可通过以下方法实现对计量系统问题进行有效判断,具体过程如下。
根据技术人员提供的经验知识:任意电流相中存在连续时刻电流值为0 时,即可判定为疑似关口连片未合或互感器故障。
台区总表中任意一相电流值高出另外两相的成倍数关系时,即可判定为疑似台区关口表互感器变比错误。
3.2.2 用户计量装置异常诊断模块
在持续高损数据表中,可以查询到系统内上传的所有历史线损持续高损的台区信息。在此模块中导入台区主变的供电损失数据。
根据技术人员提供的经验知识:当连续多日线损率高于预设定阈值同时结合合格标签均为不合格时,即可判定线损异常原因为疑似用户计量装置异常或疑似户变关系异常。
MQTT 是一种采用二进制消息的发送/订阅编程方式的即时通信技术,也是一种基于轻量级的订阅/发送方式的消息发送物联网传输方式[9]。MQTTnet是一种基于MQTT 通信协议的分布式数据库。本软件在MQTT 服务端软件的基础上,开发了一款桌面级的MQTT 客户端,应用一款名为mqtt_client 的安卓软件,通过花生壳内网穿透软件实现用户手机客户端消息的订阅和发布,可实现电脑和手机的线损异常原因的闭环接收与反馈。
本文从江苏省苏州市国家电网抽取了6000 条数据导入到线损异常诊断系统,设定阈值5%,查出189 条单日线损异常数据,65 条多日线损异常数据。其中经系统监测判定23 条数据存在窃电嫌疑。经人员现场查验,该23 户存在窃电行为。
本文通过分析多种线损异常情况,结合某电网公司的线损相关历史数据,提出了一种基于深度学习的线损异常原因诊断系统的研究方案,训练了基于DenseNet 的窃电检测模型,同时比较了现有常用机器学习算法的窃电检测效果并完成了模型的系统部署。实验结果表明,基于DenseNet 的窃电检测模型准确性较高。另外,本文提出了基于经验知识的线损异常诊断方案,配套开发了相应的诊断模块以及基于开源库的线损异常闭环管理模块。本文所研究的方法对多方面的线损异常原因进行诊断,目标降低台区线损异常状况分析的时间成本,提高监测与治理的工作效率,帮助构建智能化的电网环境。