潘磊
摘 要:為了提高電力系統(tǒng)中故障預測效率及便捷性,提出一種基于FP-Growth算法的電力系統(tǒng)故障預測方法,無需先驗知識及人工標注,便可從海量歷史日志數(shù)據(jù)中快速提取出故障信息模式,并基于實時日志數(shù)據(jù)對未來可能發(fā)送的系統(tǒng)故障進行預測。該方法首先根據(jù)電力系統(tǒng)不同類型的日志特征對原始數(shù)據(jù)進行預處理,然后基于FP-Growth算法挖掘日志中與故障事件相關的關聯(lián)規(guī)則,并使用關聯(lián)規(guī)則進行故障匹配,從而達到預測效果。算法經(jīng)過真實電力系統(tǒng)日志數(shù)據(jù)集測試,結果表明該故障預測方法平均準確率為89.5%,平均召回率為79.8%,且執(zhí)行效率較高,節(jié)省了業(yè)務人員50%以上的時間。
關鍵詞:FP-Growth;電力系統(tǒng)日志;關聯(lián)規(guī)則;故障預測;日志挖掘
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 引言
電力工業(yè)是我國國民經(jīng)濟發(fā)展中的支柱型產(chǎn)業(yè),電力系統(tǒng)為電力工業(yè)穩(wěn)定運行提供了保障。隨著電力系統(tǒng)規(guī)模的擴大和復雜性的增加,系統(tǒng)故障發(fā)生已經(jīng)成為一種常態(tài)[1]。嚴重的系統(tǒng)故障可能導致重要信息丟失甚至系統(tǒng)癱瘓,造成難以預料的后果。精確高效的故障預測能夠降低嚴重故障所帶來的風險,提高電力系統(tǒng)可靠性[2]。
故障預測最常用模型主要有兩類:故障歷史數(shù)據(jù)分析模型和實時狀態(tài)監(jiān)控預測模型[3-4]。許多學者對其進行了研究,馮士龍等[5]通過滑動窗口方式將日志劃分為日志序列并將其向量化,從而進行日志異常檢測;文獻[6]分別使用數(shù)據(jù)挖掘的分類預測思想和基于概率統(tǒng)計的方法,分析系統(tǒng)日志并建立故障預測模型;文獻[7]通過提取日志模板建立故障分類器模型,可動態(tài)判斷當前新增日志是否與故障有關;王衛(wèi)華等[8]提出一種基于頻繁日志事件序列的聚類算法,挖掘與故障事件相關的事件序列,從而實現(xiàn)故障預測;年夫順[9] 對各領域設備故障預測關鍵技術進行綜述,包括故障模型、狀態(tài)監(jiān)控和故障預測等。
系統(tǒng)故障往往不是獨立產(chǎn)生的,而是與其它事件相關聯(lián)[10]。因此,可以通過機器學習算法挖掘包含故障事件的頻繁日志序列,根據(jù)日志事件的相關性進行故障預測[11-14]。在一般的機器學習問題中,F(xiàn)P-Growth方法通常被用來做關聯(lián)分析,而本文將其應用于無監(jiān)督學習問題中,提出一種基于FP-Growth算法的電力系統(tǒng)故障預測方法,該方法在不需要先驗知識和專家干預的前提下,分析電力系統(tǒng)歷史日志數(shù)據(jù),以及與故障事件相關的頻繁日志序列并抽取出關聯(lián)規(guī)則,再根據(jù)關聯(lián)規(guī)則對系統(tǒng)故障進行預測。該方法在真實數(shù)據(jù)集上進行測試與評估,且在實際應用中取得一定效果。
1 電力系統(tǒng)日志分析
1.1 日志結構
通常情況下,電力系統(tǒng)日志記錄與電力系統(tǒng)設備、軟件相關的操作和狀態(tài),如設備連接和斷開、操作成功和失敗等。由于不同電力系統(tǒng)的日志格式不統(tǒng)一,日志文本多為非結構化文本,因此其語法和語義也不盡相同。本文以甘肅省電力投資集團有限責任公司電力系統(tǒng)2018年1月到6月的日志數(shù)據(jù)為例,該電力系統(tǒng)日志示例如圖1所示。
由圖1可知,日志數(shù)據(jù)通常包括兩種類型的信息:一種是文本格式固定的日志語義信息;另一種是變量或參數(shù),例如IP地址、時間、設備名稱等,用于表示信息的重要屬性。由于原始日志數(shù)據(jù)存在較多與語義無關的參數(shù),或者是重復的日志數(shù)據(jù),因此需要對電力系統(tǒng)日志進行預處理。
1.2 日志預處理
參數(shù)類型的多樣性導致日志數(shù)據(jù)的數(shù)量非常多,海量的日志數(shù)據(jù)代表的事件數(shù)量卻有限,為了消除變量和參數(shù)對故障預測的影響,本文使用“X”替換日志數(shù)據(jù)中的IP地址、時間和設備名稱等變量,使得提取日志數(shù)據(jù)中所代表的事件更容易,同時方便后續(xù)的關聯(lián)規(guī)則挖掘。
系統(tǒng)集群出現(xiàn)故障時,往往會重復故障操作,例如重復要求連接等,此時相似或者相同的事件將被頻繁記錄到日志中,導致存在冗余日志。當發(fā)現(xiàn)相同的日志數(shù)據(jù)重復出現(xiàn)時,本文只保留第一條記錄,刪除其它后續(xù)記錄,消除冗余日志對關聯(lián)規(guī)則挖掘的負面影響。
2 關聯(lián)規(guī)則挖掘
2.1 基本概念
關聯(lián)規(guī)則挖掘?qū)儆跀?shù)據(jù)挖掘的一種研究方法,用以發(fā)現(xiàn)事務及關聯(lián)項之間的關系[15]。設[I={a1,a2,...,an}],其中a為n個不同的項,I稱為總項集,記N是事務處理S的集合,每個事務處理S是項的集合,則[S?I]。設X、Y是I的兩個不同非空子集,如果有[X→Y],則稱其是一條關聯(lián)規(guī)則。關聯(lián)規(guī)則的衡量標準用支持度support和置信度confident描述。式(1)和式(2)為support和confident的定義。
其中,support表示X與Y同時在事務集中出現(xiàn)的次數(shù)與事務總數(shù)N的比率,confident表示X與Y同時出現(xiàn)的次數(shù)與X單獨出現(xiàn)次數(shù)的比率。關聯(lián)規(guī)則的支持度和置信度越高,說明規(guī)則的關聯(lián)性越強。
關聯(lián)規(guī)則挖掘的本質(zhì)就是給定事務集N,找出其中所有支持度不小于最小支持度min_support且置信度不小于最小置信度min_confident的關聯(lián)規(guī)則。關聯(lián)規(guī)則挖掘一般由兩步組成:①找出所有不小于最小支持度的項集,該項集稱為頻繁項集;②基于頻繁項集再生成不小于最小置信度的規(guī)則,該規(guī)則稱為強規(guī)則。
關聯(lián)規(guī)則挖掘經(jīng)典算法Apriori,是由候選頻繁項集產(chǎn)生規(guī)則的算法代表,但Apriori在進行候選消除時,會產(chǎn)生大量的候選集,同時每次消除也可能重復掃描事務集,面對海量日志數(shù)據(jù)集時算法效率較低。FP-Growth是一種關聯(lián)規(guī)則挖掘算法,它通過兩次掃描事務集構造頻繁項樹實現(xiàn)頻繁項集挖掘,整個挖掘過程不必產(chǎn)生候選頻繁項集合[15]。FP-Growth算法處理海量數(shù)據(jù)時效率很高,適合運用在海量數(shù)據(jù)的關聯(lián)規(guī)則挖掘中,因此本文采用它挖掘歷史日志數(shù)據(jù)并生成故障事件關聯(lián)規(guī)則。
2.2 FP-Growth算法概述
FP-Growth算法基于Apriori原理,通過將事務集存儲到FP-tree(Frequent Pattern tree,頻繁項樹),進而挖掘頻繁項和關聯(lián)規(guī)則。FP-Growth算法挖掘關聯(lián)規(guī)則流程如圖2所示。
具體過程描述如下:
(1)掃描事務集N,找出所有頻繁模式下的頻繁項F1,將F1按支持度降序排序,生成頻繁項頭表。
(2)再次掃描事務集N,建立頻繁模式樹FP-tree并填寫頭表指針。FP-tree是一棵前綴樹,根節(jié)點是標記為“NULL”的root,不表示任何項,其余節(jié)點包含頻繁項和該項在本條路徑上的支持度。一條路徑上的節(jié)點集合都是事務集中滿足最小支持度的頻繁項集合,其中節(jié)點按照項的支持度排列,支持度越高的項離根節(jié)點越近,從而使更多的項可共享前綴。建立樹之后,填寫頻繁項頭表的指針,指向樹中該項的節(jié)點。同時相同的頻繁項之間使用指針相連。
(3)從底部遍歷頻繁項頭表。當遍歷未結束時,挖掘該項的頻繁項集和關聯(lián)規(guī)則。當遍歷完整個表之后,結束FP-Growth算法。
(4)提取頻繁項條件模式基。設此時遍歷的頻繁項為a,存在從root節(jié)點到節(jié)點a的路徑L,L上不包含a的部分所組成的路徑稱為a的前綴路徑Lp,a為Lp的后綴項。樹中可能存在多個a節(jié)點,則會得到多個前綴路徑,所有前綴路徑組成頻繁項a的條件模式基。
(5)判斷頻繁項a是否存在條件模式基,若其存在則繼續(xù)算法,否則返回到遍歷頻繁項頭表。
(6)得到頻繁項a的條件模式基后,將其作為新事務集建立一棵新的FP-tree,稱為a的條件模式樹。
(7)挖掘頻繁項集,生成關聯(lián)規(guī)則。首先在a的條件模式樹上挖掘頻繁項集,可得到與a相關的頻繁項集。若該頻繁項集中的任一項仍存在條件模式基,即遞歸重復地提取頻繁項集,直至所有頻繁項都沒有條件模式基,此時得到所有的頻繁項集。使用頻繁項集生成關聯(lián)規(guī)則,滿足最小置信度的規(guī)則即為有效規(guī)則。
3 故障預測
3.1 故障預測規(guī)則提取
電力系統(tǒng)日志數(shù)據(jù)經(jīng)過預處理后,對于每一類故障事件f,通過截取發(fā)生在f之前相同時間內(nèi)的日志序列,生成故障事件相關的日志序列,所有f的相關日志序列組成日志序列集合N。
對f的日志序列集N進行分析,統(tǒng)計不同日志數(shù)據(jù)項生成總項集[I={a1,a2,...,an,f}],a表示與事件f相關的日志數(shù)據(jù)。從總項集I中截取若干連續(xù)子序列[{am+1,am+2,...,] [am+j}],生成故障預測規(guī)則[r={am+1,am+2,...,am+j}→f]。此時的項集[{am+1,am+2,...,am+j,f}]即為頻繁項集,預測規(guī)則即為滿足置信度要求的關聯(lián)規(guī)則,故可使用FP-Growth算法提取預測規(guī)則。
經(jīng)過詢問電力系統(tǒng)運維專家和實驗驗證,本文使用的最小支持度min_support為0.6,最小置信度min_confident為0.8,提取的所有故障預測規(guī)則r組成預測規(guī)則集R。
3.2 預測步驟
得到預測規(guī)則集R后,可根據(jù)實時的最新日志數(shù)據(jù)對系統(tǒng)故障進行預測。故障預測與時間緊密相關,假設T1表示預測模型預測故障f的時間,T2表示故障f實際發(fā)生時間,T3表示本次預測失效時間。若[T1 (1)生成待定規(guī)則集。對于故障預測規(guī)則[r={am+1,am+2,...,am+j}→f],用[am+j]匹配當前產(chǎn)生的日志數(shù)據(jù),當日志[am+j]產(chǎn)生時,選取以[am+j]結束的規(guī)則作為待定規(guī)則,所有待定規(guī)則組成待定規(guī)則集。 (2)生成驗證規(guī)則集。截取日志[am+j]之前n行(這里n為參數(shù))的日志數(shù)據(jù)序列段S,判斷S是否包含[{am+1,am+2,...,am+j-1}]規(guī)則集,若包含則匹配成功,將該待定規(guī)則加入驗證規(guī)則集,并記錄預測時間T1。 (3)故障預測。對于驗證規(guī)則集中的規(guī)則[r→f],預測故障事件f應在T3時間點之前發(fā)生。若f在時間點T3之前發(fā)生,則此次預測成功,否則預測失敗。 4 實驗評估 本文獲取甘肅省電力投資集團有限責任公司某電力系統(tǒng)中的50萬余條日志,日志時間范圍從2018年1月—2018年6月。在該日志數(shù)據(jù)集中,日志數(shù)據(jù)包含ERROR、FAIL、WRONG和FATAL等關鍵字,表示系統(tǒng)出現(xiàn)故障。本文將包含這4種關鍵詞的日志記錄標識為故障事件,其它日志則標識為正常事件。 本文使用了準確率accuracy、召回率recall對模型的預測效果進行評估。其中,準確率的計算方法如式(3)所示,召回率如式(4)所示。 [accuracy=正確預測的次數(shù)總預測次數(shù)] (3) [recall=正確預測的故障事件數(shù)量總故障事件數(shù)量] (4) 在評估預測效果時,本文限制預測的有效時間為T1后的30min內(nèi),若被預測事件發(fā)生的時間T2滿足[T1 本文以2018年1-2月的日志作為訓練集,利用FP-Growth算法挖掘這兩個月的日志,并產(chǎn)生故障事件預測規(guī)則集R。以3-6月的日志數(shù)據(jù)作為測試集進行效果評估。算法評估結果如圖3所示,測試集中4個月的故障預測平均準確率為89.5%,平均召回率為79.8%。在這4個月日志數(shù)據(jù)上進行的預測結果相差不大,預測準確率和召回率都較高,但是召回率低于準確率。召回率較低的原因可能是,基于關聯(lián)規(guī)則挖掘提取的故障預測規(guī)則,只能預測與其它日志密切關聯(lián)的故障,同時該故障在訓練集中出現(xiàn)過,不能預測與其它日志關聯(lián)性很低或者訓練集中未出現(xiàn)的故障。3-6月的日志中可能出現(xiàn)關聯(lián)性很低的故障,或者電力系統(tǒng)在這段時間進行升級或改進,產(chǎn)生了訓練集中沒有的故障,故而預測結果的召回率略低。 如圖4所示,算法整體運行復雜度較低,與傳統(tǒng)的正則表達式匹配故障模式相比較,執(zhí)行效率較高。綜上,該算法在電力系統(tǒng)的故障預測中取得了一定效果。 5 結語 本文在不需要電力系統(tǒng)領域先驗知識的前提下,提出一種基于FP-Growth算法的電力系統(tǒng)故障預測模型,挖掘系統(tǒng)歷史日志中的關聯(lián)規(guī)則并進行故障預測。首先,分析電力系統(tǒng)日志特征,根據(jù)故障預測需要,對原始日志進行替換和冗余過濾預處理;然后,介紹關聯(lián)規(guī)則挖掘和FP-Growth算法;再使用FP-Growth算法挖掘故障事件的預測規(guī)則,并生成待定規(guī)則集和驗證規(guī)則集,實現(xiàn)故障預測;最后,在電力系統(tǒng)日志數(shù)據(jù)集上進行實驗評估,由預測模型的平均正確率及平均召回率可以看出該方法有效。 雖然該方法取得了一定效果,但目前仍存在一定缺陷,如預測的平均召回率較低、不能預測日志中未曾發(fā)生過的故障等。故障預測規(guī)則自學習可能是解決該問題的一種方法,也是未來基于歷史日志挖掘故障預測規(guī)則的研究方向。 參考文獻: [1] 賈統(tǒng),李影,吳中海. 基于日志數(shù)據(jù)的分布式軟件系統(tǒng)故障診斷綜述. 軟件學報,2020,31(7):1997-2018. [2] 李剛,陳怡瀟,黃沛爍.? 基于日志分析的信息通信網(wǎng)絡安全預警研究[J]. 電力信息與通信技術,2018,16(12):1-8. [3] 廖湘科,李姍姍,董威,等. 大規(guī)模軟件系統(tǒng)日志研究綜述[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] 王振華. 基于日志分析的網(wǎng)絡設備故障預測研究[D]. 重慶:重慶大學,2015. [7] 崔元. 面向大規(guī)模網(wǎng)絡日志的主動故障檢測方法的研究[D]. 長春:東北師范大學,2017. [8] 王衛(wèi)華,應時,賈向陽,等. 一種基于日志聚類的多類型故障預測方法[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]. 計算機系統(tǒng)應用,2013,22(5):122-125. (責任編輯:孫 娟)