基于FP-Growth的电力系统故障预测方法
2020-12-01潘磊
潘磊
摘 要:为了提高电力系统中故障预测效率及便捷性,提出一种基于FP-Growth算法的电力系统故障预测方法,无需先验知识及人工标注,便可从海量历史日志数据中快速提取出故障信息模式,并基于实时日志数据对未来可能发送的系统故障进行预测。该方法首先根据电力系统不同类型的日志特征对原始数据进行预处理,然后基于FP-Growth算法挖掘日志中与故障事件相关的关联规则,并使用关联规则进行故障匹配,从而达到预测效果。算法经过真实电力系统日志数据集测试,结果表明该故障预测方法平均准确率为89.5%,平均召回率为79.8%,且执行效率较高,节省了业务人员50%以上的时间。
关键词:FP-Growth;电力系统日志;关联规则;故障预测;日志挖掘
DOI:10. 11907/rjdk. 201852
中图分类号:TP301文献标识码:A 文章编号:1672-7800(2020)010-0152-04
Abstract:In order to improve the efficiency and convenience of fault prediction in the power system, a power system fault prediction method based on the FP-Growth algorithm is proposed by this paper. The method can extract fault prediction rules quickly from the massive power system history logs without any prior knowledge and manual annotation, and then predict future system failures based on the real-time logs. Firstly, the original logs are preprocessed according to the characteristics of the power system logs. Then the association rules related to the failure event in the log are mined based on the FP-Growth algorithm, and the association rules are used to match the failure. The algorithm has been tested on real power system log data sets. The results show that the average accuracy of the fault prediction method in this paper is 89.5%, the average recall rate is 79.8%, and the execution efficiency is high, saving more than 50% of the time of business staff.
Key Words:FP-Growth; power system log; association rule;fault prediction; log mining
0 引言
电力工业是我国国民经济发展中的支柱型产业,电力系统为电力工业稳定运行提供了保障。隨着电力系统规模的扩大和复杂性的增加,系统故障发生已经成为一种常态[1]。严重的系统故障可能导致重要信息丢失甚至系统瘫痪,造成难以预料的后果。精确高效的故障预测能够降低严重故障所带来的风险,提高电力系统可靠性[2]。
故障预测最常用模型主要有两类:故障历史数据分析模型和实时状态监控预测模型[3-4]。许多学者对其进行了研究,冯士龙等[5]通过滑动窗口方式将日志划分为日志序列并将其向量化,从而进行日志异常检测;文献[6]分别使用数据挖掘的分类预测思想和基于概率统计的方法,分析系统日志并建立故障预测模型;文献[7]通过提取日志模板建立故障分类器模型,可动态判断当前新增日志是否与故障有关;王卫华等[8]提出一种基于频繁日志事件序列的聚类算法,挖掘与故障事件相关的事件序列,从而实现故障预测;年夫顺[9] 对各领域设备故障预测关键技术进行综述,包括故障模型、状态监控和故障预测等。
系统故障往往不是独立产生的,而是与其它事件相关联[10]。因此,可以通过机器学习算法挖掘包含故障事件的频繁日志序列,根据日志事件的相关性进行故障预测[11-14]。在一般的机器学习问题中,FP-Growth方法通常被用来做关联分析,而本文将其应用于无监督学习问题中,提出一种基于FP-Growth算法的电力系统故障预测方法,该方法在不需要先验知识和专家干预的前提下,分析电力系统历史日志数据,以及与故障事件相关的频繁日志序列并抽取出关联规则,再根据关联规则对系统故障进行预测。该方法在真实数据集上进行测试与评估,且在实际应用中取得一定效果。
1 电力系统日志分析
1.1 日志结构
通常情况下,电力系统日志记录与电力系统设备、软件相关的操作和状态,如设备连接和断开、操作成功和失败等。由于不同电力系统的日志格式不统一,日志文本多为非结构化文本,因此其语法和语义也不尽相同。本文以甘肃省电力投资集团有限责任公司电力系统2018年1月到6月的日志数据为例,该电力系统日志示例如图1所示。
由图1可知,日志数据通常包括两种类型的信息:一种是文本格式固定的日志语义信息;另一种是变量或参数,例如IP地址、时间、设备名称等,用于表示信息的重要属性。由于原始日志数据存在较多与语义无关的参数,或者是重复的日志数据,因此需要对电力系统日志进行预处理。
1.2 日志预处理
参数类型的多样性导致日志数据的数量非常多,海量的日志数据代表的事件数量却有限,为了消除变量和参数对故障预测的影响,本文使用“X”替换日志数据中的IP地址、时间和设备名称等变量,使得提取日志数据中所代表的事件更容易,同时方便后续的关联规则挖掘。
系统集群出现故障时,往往会重复故障操作,例如重复要求连接等,此时相似或者相同的事件将被频繁记录到日志中,导致存在冗余日志。当发现相同的日志数据重复出现时,本文只保留第一条记录,删除其它后续记录,消除冗余日志对关联规则挖掘的负面影响。
2 关联规则挖掘
2.1 基本概念
关联规则挖掘属于数据挖掘的一种研究方法,用以发现事务及关联项之间的关系[15]。设[I={a1,a2,...,an}],其中a为n个不同的项,I称为总项集,记N是事务处理S的集合,每个事务处理S是项的集合,则[S?I]。设X、Y是I的两个不同非空子集,如果有[X→Y],则称其是一条关联规则。关联规则的衡量标准用支持度support和置信度confident描述。式(1)和式(2)为support和confident的定义。
其中,support表示X与Y同时在事务集中出现的次数与事务总数N的比率,confident表示X与Y同时出现的次数与X单独出现次数的比率。关联规则的支持度和置信度越高,说明规则的关联性越强。
关联规则挖掘的本质就是给定事务集N,找出其中所有支持度不小于最小支持度min_support且置信度不小于最小置信度min_confident的关联规则。关联规则挖掘一般由两步组成:①找出所有不小于最小支持度的项集,该项集称为频繁项集;②基于频繁项集再生成不小于最小置信度的规则,该规则称为强规则。
关联规则挖掘经典算法Apriori,是由候选频繁项集产生规则的算法代表,但Apriori在进行候选消除时,会产生大量的候选集,同时每次消除也可能重复扫描事务集,面对海量日志数据集时算法效率较低。FP-Growth是一种关联规则挖掘算法,它通过两次扫描事务集构造频繁项树实现频繁项集挖掘,整个挖掘过程不必产生候选频繁项集合[15]。FP-Growth算法处理海量数据时效率很高,适合运用在海量数据的关联规则挖掘中,因此本文采用它挖掘历史日志数据并生成故障事件关联规则。
2.2 FP-Growth算法概述
FP-Growth算法基于Apriori原理,通过将事务集存储到FP-tree(Frequent Pattern tree,频繁项树),进而挖掘频繁项和关联规则。FP-Growth算法挖掘关联规则流程如图2所示。
具体过程描述如下:
(1)扫描事务集N,找出所有频繁模式下的频繁项F1,将F1按支持度降序排序,生成频繁项头表。
(2)再次扫描事务集N,建立频繁模式树FP-tree并填写头表指针。FP-tree是一棵前缀树,根节点是标记为“NULL”的root,不表示任何项,其余节点包含频繁项和该项在本条路径上的支持度。一条路径上的节点集合都是事务集中满足最小支持度的频繁项集合,其中节点按照项的支持度排列,支持度越高的项离根节点越近,从而使更多的项可共享前缀。建立树之后,填写频繁项头表的指针,指向树中该项的节点。同时相同的频繁项之间使用指针相连。
(3)从底部遍历频繁项头表。当遍历未结束时,挖掘该项的频繁项集和关联规则。当遍历完整个表之后,结束FP-Growth算法。
(4)提取频繁项条件模式基。设此时遍历的频繁项为a,存在从root节点到节点a的路径L,L上不包含a的部分所组成的路径称为a的前缀路径Lp,a为Lp的后缀项。树中可能存在多个a节点,则会得到多个前缀路径,所有前缀路径组成频繁项a的条件模式基。
(5)判断频繁项a是否存在条件模式基,若其存在则继续算法,否则返回到遍历频繁项头表。
(6)得到频繁项a的条件模式基后,将其作为新事务集建立一棵新的FP-tree,称为a的条件模式树。
(7)挖掘频繁项集,生成关联规则。首先在a的条件模式树上挖掘频繁项集,可得到与a相关的频繁项集。若该频繁项集中的任一项仍存在条件模式基,即递归重复地提取频繁项集,直至所有频繁项都没有条件模式基,此时得到所有的频繁项集。使用频繁项集生成关联规则,满足最小置信度的规则即为有效规则。
3 故障预测
3.1 故障预测规则提取
电力系统日志数据经过预处理后,对于每一类故障事件f,通过截取发生在f之前相同时间内的日志序列,生成故障事件相关的日志序列,所有f的相关日志序列组成日志序列集合N。
对f的日志序列集N进行分析,统计不同日志数据项生成总项集[I={a1,a2,...,an,f}],a表示与事件f相关的日志数据。从总项集I中截取若干連续子序列[{am+1,am+2,...,] [am+j}],生成故障预测规则[r={am+1,am+2,...,am+j}→f]。此时的项集[{am+1,am+2,...,am+j,f}]即为频繁项集,预测规则即为满足置信度要求的关联规则,故可使用FP-Growth算法提取预测规则。
经过询问电力系统运维专家和实验验证,本文使用的最小支持度min_support为0.6,最小置信度min_confident为0.8,提取的所有故障预测规则r组成预测规则集R。
3.2 预测步骤
得到预测规则集R后,可根据实时的最新日志数据对系统故障进行预测。故障预测与时间紧密相关,假设T1表示预测模型预测故障f的时间,T2表示故障f实际发生时间,T3表示本次预测失效时间。若[T1 (1)生成待定规则集。对于故障预测规则[r={am+1,am+2,...,am+j}→f],用[am+j]匹配当前产生的日志数据,当日志[am+j]产生时,选取以[am+j]结束的规则作为待定规则,所有待定规则组成待定规则集。 (2)生成验证规则集。截取日志[am+j]之前n行(这里n为参数)的日志数据序列段S,判断S是否包含[{am+1,am+2,...,am+j-1}]规则集,若包含则匹配成功,将该待定规则加入验证规则集,并记录预测时间T1。 (3)故障预测。对于验证规则集中的规则[r→f],预测故障事件f应在T3时间点之前发生。若f在时间点T3之前发生,则此次预测成功,否则预测失败。 4 实验评估 本文获取甘肃省电力投资集团有限责任公司某电力系统中的50万余条日志,日志时间范围从2018年1月—2018年6月。在该日志数据集中,日志数据包含ERROR、FAIL、WRONG和FATAL等关键字,表示系统出现故障。本文将包含这4种关键词的日志记录标识为故障事件,其它日志则标识为正常事件。 本文使用了准确率accuracy、召回率recall对模型的预测效果进行评估。其中,准确率的计算方法如式(3)所示,召回率如式(4)所示。 [accuracy=正确预测的次数总预测次数] (3) [recall=正确预测的故障事件数量总故障事件数量] (4) 在评估预测效果时,本文限制预测的有效时间为T1后的30min内,若被预测事件发生的时间T2满足[T1 本文以2018年1-2月的日志作为训练集,利用FP-Growth算法挖掘这两个月的日志,并产生故障事件预测规则集R。以3-6月的日志数据作为测试集进行效果评估。算法评估结果如图3所示,测试集中4个月的故障预测平均准确率为89.5%,平均召回率为79.8%。在这4个月日志数据上进行的预测结果相差不大,预测准确率和召回率都较高,但是召回率低于准确率。召回率较低的原因可能是,基于关联规则挖掘提取的故障预测规则,只能预测与其它日志密切关联的故障,同时该故障在训练集中出现过,不能预测与其它日志关联性很低或者训练集中未出现的故障。3-6月的日志中可能出现关联性很低的故障,或者电力系统在这段时间进行升级或改进,产生了训练集中没有的故障,故而预测结果的召回率略低。 如图4所示,算法整体运行复杂度较低,与传统的正则表达式匹配故障模式相比较,执行效率较高。综上,该算法在电力系统的故障预测中取得了一定效果。 5 结语 本文在不需要电力系统领域先验知识的前提下,提出一种基于FP-Growth算法的电力系统故障预测模型,挖掘系统历史日志中的关联规则并进行故障预测。首先,分析电力系统日志特征,根据故障预测需要,对原始日志进行替换和冗余过滤预处理;然后,介绍关联规则挖掘和FP-Growth算法;再使用FP-Growth算法挖掘故障事件的预测规则,并生成待定规则集和验证规则集,实现故障预测;最后,在电力系统日志数据集上进行实验评估,由预测模型的平均正确率及平均召回率可以看出该方法有效。 虽然该方法取得了一定效果,但目前仍存在一定缺陷,如预测的平均召回率较低、不能预测日志中未曾发生过的故障等。故障预测规则自学习可能是解决该问题的一种方法,也是未來基于历史日志挖掘故障预测规则的研究方向。 参考文献: [1] 贾统,李影,吴中海. 基于日志数据的分布式软件系统故障诊断综述. 软件学报,2020,31(7):1997-2018. [2] 李刚,陈怡潇,黄沛烁. 基于日志分析的信息通信网络安全预警研究[J]. 电力信息与通信技术,2018,16(12):1-8. [3] 廖湘科,李姗姗,董威,等. 大规模软件系统日志研究综述[J]. 软件学报,2016,27(8):1934-1947. [4] SALFNER F, LENK M, MALEK M. A survey of online failure prediction methods[J]. ACM Computing Surveys, 2010, 42(3): 1-42. [5] 冯士龙,台宪青,马治杰. 改进的基于日志聚类的异常检测方法[J]. 计算机工程与设计,2020,41(4):1087-1092. [6] 王振华. 基于日志分析的网络设备故障预测研究[D]. 重庆:重庆大学,2015. [7] 崔元. 面向大规模网络日志的主动故障检测方法的研究[D]. 长春:东北师范大学,2017. [8] 王卫华,应时,贾向阳,等. 一种基于日志聚类的多类型故障预测方法[J]. 计算机工程, 2018,44(7):67-73. [9] 年夫顺. 关于故障预测与健康管理技术的几点认识[J]. 仪器仪表学报,2018,39(8):1-14. [10] 樊建昌,余粟. 基于决策树的日志分析方法[J]. 软件导刊,2020,19(1):99-102. [11] DU M, LI F,ZHENG G,et al. DeepLog: anomaly detection and diagnosis from system logs through deep learning[C]. ACM Sigsac Conference on Computer & Communications Security, 2017. [12] LIN Q,ZHANG H,LOU JG,et al. Log clustering based problem identification for online service systems[C]. IEEE/ACM International Conference on Software Engineering Companion. IEEE,2016:102-111. [13] TYAGI K, THAKUR S. Predictive classification of ECG parameters using association rule mining[J]. Advances in Computer and Computational Sciences ,2017:619-627. [14] MENG W B, LIU Y, et al. LogAnomaly: unsupervised detection of sequential and quantitative anomalies in unstructured logs[C]. The Internationl Joint Conference on Artificial Intelligence,2019. [15] 晏杰,亓文娟. 基于Aprior&FP-growth算法的研究[J]. 计算机系统应用,2013,22(5):122-125. (责任编辑:孙 娟)