2. 国电南瑞科技股份有限公司, 南京 211106;
3. 南京农业大学 信息科学技术学院, 南京 210095
2. NARI Technology Co., Ltd, Nanjing 211106, China;
3. College of Information Science and Technology, Nanjing Agricultural University, Nanjing 210095, China
随着电力企业深化改革和电力系统信息化建设的深入, 电力企业和用户对于电能量数据的质量要求逐渐提高, 使电量采集和监测系统面临诸多挑战.目前国内的电能量计量系统已进入稳定成长阶段, 各级电网及主要城市的供电网均已配备电能量计量系统[1], 采集到的电能量数据规模庞大, 其中也不可避免会出现异常数据.为了实现公平、公正、公开的电力交易原则和电能量数据的有效应用, 应该保证电能量数据的准确性、可靠性以及完整性, 因此对电能量数据的异常检测尤为重要.
电能量采集设备的故障或人为原因导致采集到的电能量数据可能会发生缺失, 或产生异常数据.异常检测研究的是在不符合预期行为的数据中寻找模式的问题.电能量异常数据检测对采集到的大量电能量时序数据进行审查, 发现异常的用电行为、偷电行为以及设备故障情况.
传统电能量异常检测常采用阈值法, 定义一个正常行为的区域并声明不属于该正常区域的异常数据.即根据数据的内容设定一个范围
目前, 国内外许多研究者已经采用了大量的异常数据检测方法实现电能量异常数据的检测[3-7].西班牙和拉丁美洲的电力公司Endesa[7]使用皮尔森系数来检测消耗能量异常下降的客户.王增平等[4]利用图论知识提出一种基于同步测量信息的拓扑错误辨识算法, 可靠性高、容错能力强.王兴志等[5]引入基于贝叶斯数据处理策略的扩展卡尔曼滤波算法进行不良数据动态检测, 具有较高的计算精度.简富俊等[3]使用One-class SVM无监督机器学习架构对电力用户负荷异常进行检测.
在当前的电力信息化时代, 每时每刻都有庞大的电能量新数据产生, 在这样一个大数据时代, 数据维度高、尺寸大成为处理数据的一个难题.上述方法大多基于估计计算, 虽然精确、可靠性高, 但是计算繁琐, 效率不高, 不适用于检测大量高维的电能量数据.文献[3]虽然采用了机器学习的方法, 但更适合小样本、样本分类不均衡的环境, 而且One-class SVM[8]的训练集如果包含异常样本, 很可能在训练时影响边界的选取.除此之外, 现有的异常检测算法常为对正常样本的描述, 这样不会对异常样本的描述做优化, 就有可能造成大量检测错误的情况, 或者只检测到少量的异常.
为解决上述问题, 将数据挖掘技术应用于异常检测的方法逐渐成熟, 使用机器学习的方法提取大量数据的特征, 从而检测到异常数据, 分为有监督[9]和无监督[6]的异常检测算法.目前也有不少学者提出了结合数据挖掘技术的异常检测算法, 将其用于电能量数据的异常检测[10-14].
孤立森林[15](Isolation Forest, iForest)是一种高效的异常检测算法.它利用异常点数量少、异常数据特征值和正常数据差别大这两个特点来孤立异常点.该算法时间效率高, 能有效处理海量数据, 常用于网络安全中的攻击检测[16-17]和流量异常[18-19]分析等.
孤立森林[15]算法的任务是选取子样本
本文基于孤立森林的电能量异常数据检测算法(Abnormal Electric Energy Data Detection Based on Isolation Forest, EDDIF), 用于实现大规模电能量数据的异常检测.本文采用南瑞集团提供的2017-2019年真实电能量数据, 根据该大规模数据集构建孤立森林, 在电能量数据的正向有功总电量PAP和反向有功总电量RAP字段上检测异常数据.
1 异常数据的检测 1.1 时序数据中的异常值异常数据是某个数据集中存在但不合群的数据点, 又称离群数据.某一数据集在两个参数上成一定规律, 而集合中有一数据点明显不符合该规律, 该数据点则为异常数据.
时间序列数据是在不同时间上收集到的序列, 用于所描述现象随时间变化的情况, 时间序列模式挖掘[20]是从大量的交易数据中发现一些有固定的先后关系的时间序列.
当时间序列数据在某一时刻发生突变时, 该数据点则有很大可能是异常值.如图 1是某户2017年6月每日用电量的时间序列数据, 下文图中的数据皆为2017年数据, 图中不再进行标注.在6月13日和6月19日时较前一数据值发生突变, 该日用电量明显上涨, 则这两个数据点很可能为该电能量时序数据中的异常值.
异常检测[2]研究的是在不符合预期行为的数据中寻找模式的问题, 这些不一致的模式被称为异常.
序列数据的异常检测常见方法主要有以下3种:
(1) 基于窗口的异常检测[21], 该方法将序列分为具体的固定长度的窗口, 当窗口无法覆盖异常序列时该方法效果较不理想.
(2) 基于邻近度的异常检测[22]使用计算序列数据之间的距离来判断数据是否异常, 预测效果依靠邻近度度量方法的优劣.
(3) 基于预测的异常检测[23]将预测数据与真实数据相差较大的数据点视为异常, 当预测时间过长时会影响检测的准确度.
本文采用的孤立森林算法属于基于邻近度的异常检测, 根据测试样本与根结点的距离计算异常指数.
1.3 电能量的异常本文检测所采用的数据集为南瑞集团所提供的2017-2019年电能量数据, 主要检测字段正向有功总电量PAP和反向有功总电量RAP是否异常.
电表正向有功是指用户接受系统的电能, 因此正向有功总电量是随时间累加的, 若出现下降趋势则判断为异常值; 若正向有功总电量出现骤增现象, 系统也应判定为异常值, 从而能及时发现仪器的故障.
电表反向有功是指用户发电向系统输送电能, 一般情况下, 是不应该出现反向有功电量的.若出现反向有功现象, 则可能是用户内部有发电设备、电表存在接错线或出现窃电现象.因此, 当出现电表反向有功电量走字时, 应判断为异常值.
2 基于孤立森林的电能量异常检测孤立森林是一种基于随机二叉树, 适用于连续数据的无监督异常检测方法, 它适用于特征连续的电能量时序数据.基于孤立森林的电能量异常检测流程架构如图 2所示.在孤立森林检测方法中, 随机分割大规模的电能量数据集, 直至所有的电能量数据点孤立.在这种随机分割数据集的方法下, 电能量异常点往往有较短的路径, 因此孤立森林用样本点到根节点的距离来判断是否为异常点.
对于大规模电能量数据集
算法1 |
输入: |
输出: |
1: 对电能量数据集 |
2: 设置iTree的最大高度 |
3: for i=1 to t do |
4: |
5: |
6: end for |
7: return iForest |
算法2 |
输入: |
输出: 一棵iTree |
1: if |
2: return ex Node {Size |
3: end if |
4: else |
5: |
6: 随机选择分割点 |
7: |
8: |
9: end else |
10: return |
|
|
|
输入基于电能量数据的iForest中树iTree的数量
(1) 行1对电能量数据集
(2) 行2限制每棵iTree的高度
(3) 行4中的sample函数对数据集
iTree是一种随机二叉树, 合并成为孤立森林, 其构建过程[15]见算法2所示.算法的输入电能量数据子样本集
(1) 从电能量训练数据集
(2) 行4随机选择一个
(3) 行7递归左子树和右子树继续重复(2)的过程分割子树, 返回值inNode为一棵子树, 包含左子树和右子树, 以及划分的属性和划分的属性值.左子树Left为属性值小于划分属性值的样本构成的子树, 右子树Right为属性值大于等于划分属性值的样本构成的子树; SplitAtt为划分属性, SplitValue为划分属性的值.递归分割直至所有样本点成为叶子结点或达到树的限定高度, 最后返回的树则为一棵完整的iTree.整个孤立森林构建算法的复杂度为
对电能量数据集
如图 3所示, 在经过两次随机分割后, 点
基于孤立森林的电能量异常数据检测算法见算法3所示, 其中算法的输入电能量数据集构建的孤立森林为
算法3 |
输入: |
输出: 是否为异常值 |
1: 得到 |
2: for i=1 to |
3: 得到 |
4: 计算 |
5: end for |
6: |
7: |
8: if |
9: return 1 |
10: end if |
11: else if |
12: return-1 |
13: end else if |
14: else |
15: return 0 |
16: end else |
(1) 行1和行3由
(2) 行4计算
(3) 对于电能量训练集
(4) 行6计算得到所有树高度的平均值
$\begin{align} S(x, n)=2^{-\frac{E(h(x))}{c(n)}}; \end{align} $ | (1) |
$\begin{align} c(n)=2H(n-1)-(2(n-1)/n); \end{align} $ | (2) |
$\begin{align} H(k)=\ln (k)+\xi , \quad \xi =0.577\;215\;664\;9. \end{align} $ | (3) |
(5) 行8-16判断样本数据点
公式(1)中得到的
本文实验平台为Windows 10系统, 8 GB内存, Intel(R) Core(TM) i5-6200U, 2.3 GHz.算法采用Python 3.6实现.
3.2 数据集数据集采用南瑞集团提供的2017/06/01
实验相关的参数进行设置如下:检测字段为PAP和RAP; 孤立森林中树iTree的棵数
根据不同的METER ID字段使用孤立森林算法分别在PAP字段和RAP字段上进行检测, 统计结果.
某用户2017年电能量数据, 对字段PAP进行处理, 计算两天之间的差值, 得到每日用电量
将折线图的纵坐标用对数刻度表示(对数的底取2), 图 4可以转化为图 5, 可以看到在6月13日和6月19日每日用电量
某用户的2017年电能量数据, 对字段RAP进行处理, 计算两天之间的差值, 得到每日反向有功电量
本文把One-class SVM[8]算法和基于标准差的统计学算法(Standard Deviation)[24]作为测试基准, 对电能量数据集的PAP字段进行异常检测对比.在测试前人工检验得到2017/06/01
对比实验结果如表 1所示, 可以看到本文方法检测到的异常点个数最接近实际异常点个数, 而One-class SVM和标准差检测到了远大于实际的异常点个数.本文采用的算法保持较高的精确率和召回率, 精确率为One-class SVM的2.96倍, 为标准差算法的5.93倍, 召回率为标准差算法的2.5倍.
分析结果得到, One-class SVM几乎能检测出所有的样本点, 但是效率很低, 有大量负样本被判断为正样本, 标准差算法的检测效果较为不佳, 效率低, 可靠性不高.本文采用的算法具有效率高, 可靠性高的优点, 可以检测出几乎所有的异常样本点, 并且有很少的正样本被判断为负样本.
4 结论本文基于孤立森林实现了电能量异常数据检测, 孤立森林算法具有线性复杂度, 适用于含有海量数据的数据集, 随机分割的取值区间是自适应的, 具有较高的鲁棒性.本文测试将算法应用于处理大规模电能量数据的异常检测, 发现其检测速度快, 正确率高.实验表明本文的方法具有较好的理论和应用价值.
[1] |
罗志仕, 张晋明. 对国内电能量计量系统现状的调查研究[J]. 大科技, 2013(12): 66-67. |
[2] |
CHANDOLA V, BANERJEE A, KUMAR V. Anomaly detection[J]. ACM Computing Surveys, 2009, 41(3): 1-58. |
[3] |
简富俊, 曹敏, 王磊, 等. 基于SVM的AMI环境下用电异常检测研究[J]. 电测与仪表, 2014, 51(6): 64-69. DOI:10.3969/j.issn.1001-1390.2014.06.014 |
[4] |
王增平, 张晋芳, 钱诚. 基于同步测量信息的电网拓扑错误辨识方法[J]. 电力自动化设备, 2012, 32(1): 1-8. DOI:10.3969/j.issn.1006-6047.2012.01.001 |
[5] |
王兴志, 严正, 沈沉, 等. 基于在线核学习的电网不良数据检测与辨识方法[J]. 电力系统保护与控制, 2012(1): 50-55. DOI:10.3969/j.issn.1674-3415.2012.01.009 |
[6] |
ESKIN E, ARNOLD A, PRERAU M, et al. A geometric framework for unsupervised anomaly detection:Detecting intrusions in unlabeled data[M]. Amsterdam: Kluwer Academic Publisher, 2002: 77-101.
|
[7] |
MONEDERO I, BISCARRI F, LEÓN C, et al. Detection of frauds and other non-technical losses in a power utility using Pearson coefficient, Bayesian networks and decision trees[J]. International Journal of Electrical Power & Energy Systems, 2012, 34(1): 90-98. |
[8] |
PLATT J, SCHÖKOPF B, SHAWE-TAYLOR J, et al. Estimating the support of a high-dimensional distribution[J]. Neural computation, 2001, 13(7): 1443-1471. DOI:10.1162/089976601750264965 |
[9] |
STEINWART I, HUSH D, SCOVEL C. A classification framework for anomaly detection[J]. Journal of Machine Learning Research, 2005(6): 211-232. |
[10] |
陈阳, 王勇, 孙伟. 基于YARN规范的智能电网大数据异常检测[J]. 信息网络安全, 2017(7): 11-17. DOI:10.3969/j.issn.1671-1122.2017.07.002 |
[11] |
严英杰, 盛戈皞, 陈玉峰, 等. 基于大数据分析的输变电设备状态数据异常检测方法[J]. 中国电机工程学报, 2015, 35(1): 52-59. |
[12] |
肖坚红, 严小文, 周永真, 等. 基于数据挖掘的计量装置在线监测与智能诊断系统的设计与实现[J]. 电测与仪表, 2014, 51(14): 1-5. DOI:10.3969/j.issn.1001-1390.2014.14.001 |
[13] |
魏瑶, 朱伟义, 龚桃荣, 等. 基于数据挖掘技术的用电异常分析系统设计[J]. 电力信息与通信技术, 2014, 12(5): 70-73. |
[14] |
田野, 张程, 毛昕儒, 等. 运用PCA改进BP神经网络的用电异常行为检测[J]. 重庆理工大学学报(自然科学版), 2017, 31(8): 125-133. DOI:10.3969/j.issn.1674-8425(z).2017.08.021 |
[15] |
LIU F T, TING K M, ZHOU Z H. Isolation forest[C]//2008 Eighth IEEE International Conference on Data Mining. IEEE, 2008: 413-422.
|
[16] |
倪永峰, 闫连山, 崔允贺, 等. 面向软件定义网络的隐蔽通信检测机制[J]. 计算机系统应用, 2018, 27(9): 143-150. |
[17] |
朱佳俊, 陈功, 施勇, 等. 基于用户画像的异常行为检测[J]. 通信技术, 2017, 50(10): 2310-2315. DOI:10.3969/j.issn.1002-0802.2017.10.032 |
[18] |
李新鹏, 高欣, 阎博, 等. 基于孤立森林算法的电力调度流数据异常检测方法[J]. 电网技术, 2019, 43(4): 1447-1456. |
[19] |
朱炜玉, 史斌, 姜继平, 等. 基于水质时间序列异常检测的动态预警方法[J]. 环境科学与技术, 2018, 41(12): 131-137. |
[20] |
韩明涛. 时间序列模式挖掘的算法研究[J]. 山东大学学报(工学版), 2004, 34(3): 88-91. DOI:10.3969/j.issn.1672-3961.2004.03.021 |
[21] |
余宇峰, 朱跃龙, 万定生, 等. 基于滑动窗口预测的水文时间序列异常检测[J]. 计算机应用, 2014, 34(8): 2217-2220. |
[22] |
孙梅玉. 基于距离和密度的时间序列异常检测方法研究[J]. 计算机工程与应用, 2012(20): 11-17. DOI:10.3778/j.issn.1002-8331.2012.20.003 |
[23] |
曹旭, 曹瑞彤. 基于大数据分析的网络异常检测方法[J]. 电信科学, 2014, 30(6): 152-156. DOI:10.3969/j.issn.1000-0801.2014.06.025 |
[24] |
LEYS C, LEY C, KLEIN O, et al. Detecting outliers:Do not use standard deviation around the mean, use absolute deviation around the median[J]. Journal of Experimental Social Psychology, 2013, 49(4): 764-766. DOI:10.1016/j.jesp.2013.03.013 |