楊永嬌,肖建毅,趙創(chuàng)業(yè),周開東
(廣東電網(wǎng)有限責(zé)任公司信息中心,廣東 廣州 510080)
智能電網(wǎng)的信息化系統(tǒng)建設(shè)規(guī)模與日俱增,導(dǎo)致電網(wǎng)時(shí)間序列數(shù)據(jù)不僅數(shù)量大,而且種類繁多,容易形成海量的時(shí)間序列數(shù)據(jù)。采用傳統(tǒng)的時(shí)間序列數(shù)據(jù)異常檢測方法會導(dǎo)致告警不準(zhǔn)確、故障自動(dòng)發(fā)現(xiàn)率低、漏告警和誤告警數(shù)量多等問題,而且需要人員不斷更新告警配置。如果不能及時(shí)、準(zhǔn)確地分析數(shù)據(jù),對電網(wǎng)的穩(wěn)定、實(shí)時(shí)和安全運(yùn)行將產(chǎn)生嚴(yán)重的威脅[1-3]。因此準(zhǔn)確快速地分析電網(wǎng)時(shí)間序列數(shù)據(jù)是保障智能電網(wǎng)穩(wěn)定運(yùn)行的基礎(chǔ)。
由于智能電網(wǎng)時(shí)間序列數(shù)據(jù)量大和數(shù)據(jù)種類多,造成了數(shù)據(jù)分析更為復(fù)雜,有關(guān)學(xué)者在近幾年對時(shí)間序列數(shù)據(jù)異常檢測進(jìn)行了相關(guān)研究。文獻(xiàn)[4]設(shè)計(jì)了一種基于統(tǒng)計(jì)的異常點(diǎn)檢測與修正方法,該方法可以有效地檢測時(shí)間序列數(shù)據(jù)異常點(diǎn)的位置,并對異常數(shù)據(jù)進(jìn)行修正,但預(yù)測精準(zhǔn)度不高,難以預(yù)測未來發(fā)生的異常點(diǎn)。文獻(xiàn)[5]提出了基于頻繁模式的時(shí)間序列數(shù)據(jù)異常檢測方法,該方法從序列整體和局部特征的角度分析,能比較準(zhǔn)確地找到時(shí)間序列中的異常片段,可以提高預(yù)測精度。但該方法也有缺點(diǎn),不僅需要設(shè)置的參數(shù)太多,而且調(diào)整參數(shù)比較復(fù)雜。文獻(xiàn)[6]提出的SA-iForest算法在數(shù)據(jù)異常檢測中執(zhí)行效率和精確度方面比Isolation Forest算法有了顯著提高,適用于連續(xù)數(shù)據(jù)的異常檢測,但是對于非連續(xù)數(shù)據(jù)的異常檢測,其準(zhǔn)確性和穩(wěn)定性較差。
針對以上研究中存在的相關(guān)問題,本文提出基于Isolation Forest和Random Forest相結(jié)合的智能電網(wǎng)時(shí)間序列數(shù)據(jù)異常檢測算法。該方法首先通過Isolation Forest算法對時(shí)間序列數(shù)據(jù)過濾大量正樣本,輸出疑似異常,并利用人工經(jīng)驗(yàn)進(jìn)行標(biāo)注,通過特征工程提取特征值,最后利用Random Forest算法輸出異常數(shù)據(jù),提高了時(shí)間序列數(shù)據(jù)異常分析的準(zhǔn)確度和效率。
孤立森林[7-8](Isolation Forest)是一種高效的異常檢測算法[9-11],由周志華教授于2008年在第八屆IEEE數(shù)據(jù)挖掘國際會議上提出,屬于無監(jiān)督算法,集成了學(xué)習(xí)的思想,適用于連續(xù)數(shù)據(jù)的異常檢測,在包含數(shù)值類型的訓(xùn)練集中,對數(shù)據(jù)進(jìn)行遞歸劃分,直至iTree將每個(gè)數(shù)據(jù)與其他數(shù)據(jù)區(qū)別開來。異常數(shù)據(jù)接近于二叉樹的根節(jié)點(diǎn),而正常數(shù)據(jù)離二叉樹根節(jié)點(diǎn)較遠(yuǎn),用少量的特征條件就可以檢測出異常數(shù)據(jù)。
iTree是一種隨機(jī)二叉樹,每個(gè)節(jié)點(diǎn)有2個(gè)子節(jié)點(diǎn),也可能沒有節(jié)點(diǎn)(葉子節(jié)點(diǎn)),給定數(shù)據(jù)集D,這里的D所有屬性都是連續(xù)性變量,iTree二叉樹構(gòu)造如下:
1)隨機(jī)選取屬性A。
2)隨機(jī)選取A屬性的一個(gè)value值。
3)根據(jù)A對每條記錄進(jìn)行分類,小于value的記錄歸類,存放在左子樹上,把大于或等于value的記錄歸類,存放在右子樹上。
4)遞歸構(gòu)造左子樹和右子樹,直到滿足2個(gè)條件:傳入的數(shù)據(jù)集只有1條記錄或者是多條同樣的記錄。
在iTree中,異常值一般表現(xiàn)為葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑h(x)很短。因此,可以用h(x)判斷一條記錄是否屬于異常值。用歸一化公式來計(jì)算異常指數(shù)S(x,n):
(1)
(2)
H(k)=ln(k)+£
(3)
其中,n為樣本的大小,h(x)為記錄x在iTree上的高度,S(x,n)的取值范圍為[0,1],£為歐拉常數(shù)。如果S(x,n)值接近1,表示異常點(diǎn)的可能性就越高,如果S(x,n)值接近0,表示正常點(diǎn)的可能性越高,如果大多數(shù)訓(xùn)練樣本的S(x,n)都接近0.5,說明這個(gè)數(shù)據(jù)集無明顯的異常數(shù)據(jù)。iForest構(gòu)建好之后,異常指數(shù)公式S(x,n)如下:
(4)
其中,S(x,n)表示記錄x在由n個(gè)樣本的訓(xùn)練數(shù)據(jù)構(gòu)成的iForest的異常得分,E(h(x))表示記錄x在每棵樹的高度均值。
我國的教學(xué)方式是對理論部分與實(shí)踐部分采用不同的教學(xué)方法,較之于韓國更重視對學(xué)生的討論匯報(bào)內(nèi)容與任務(wù)作品的評價(jià)部分,這樣有助于小組之間取長補(bǔ)短以及學(xué)生們進(jìn)行自我反思,從而有更大的提高。
綜上所述,孤立森林本質(zhì)上是一種非監(jiān)督機(jī)器學(xué)習(xí)算法,不需要先驗(yàn)的類標(biāo)簽,在處理連續(xù)的時(shí)間序列數(shù)據(jù)時(shí),根據(jù)特定情境選擇一些有價(jià)值的屬性,然后再進(jìn)行iForest的構(gòu)造,算法效果會更好。
隨機(jī)森林(Random Forest)是由Breiman[12]提出的一種通過構(gòu)造多棵決策樹提高整體性能的算法。該算法的核心是共同決策,包含了決策樹和集成學(xué)習(xí)方法。
決策樹[13]分類過程的構(gòu)建是根據(jù)既定數(shù)據(jù)集的屬性信息,生成一棵與數(shù)據(jù)集總體上類似的樹模型,是指訓(xùn)練集和測試集誤差能達(dá)到較優(yōu)平衡,既很好地?cái)M合訓(xùn)練數(shù)據(jù),又達(dá)到對測試集的準(zhǔn)確預(yù)測。
集成學(xué)習(xí)[14](Ensemble Learning)是一種多元組合模型,集成學(xué)習(xí)整體的思想在于用多個(gè)弱學(xué)習(xí)器來形成一個(gè)強(qiáng)學(xué)習(xí)器,通過綜合多個(gè)決策者的建議,達(dá)到性能優(yōu)化和提升的目的。集成學(xué)習(xí)算法有Bagging算法和Boosting算法。Bagging算法采用Bootstrap抽樣法,即有放回地反復(fù)抽取,并得到與訓(xùn)練集規(guī)模相同的實(shí)例集來訓(xùn)練。
隨機(jī)森林[15-18]是一個(gè)在多個(gè)決策樹分類器構(gòu)建Bagging集成的條件下,組成的大型集成分類器。構(gòu)建Random Forest算法的基本思路[19-20]如下:
Step1假設(shè)現(xiàn)有訓(xùn)練實(shí)例集規(guī)模為K,通過Bootstrap抽樣法從該訓(xùn)練實(shí)例集生成T個(gè)同樣規(guī)模的K個(gè)實(shí)例集。
Step2每個(gè)實(shí)例集都用于構(gòu)建一棵決策樹,T個(gè)實(shí)例集可以生成T棵決策樹。假設(shè)實(shí)例共由M個(gè)屬性來描述,從該屬性集中隨機(jī)抽取N個(gè)屬性成為樹節(jié)點(diǎn)的備選屬性集,其中N Step3完成T個(gè)樹模型的構(gòu)建后,對于一個(gè)新實(shí)例的類別判定,依據(jù)該T棵樹對其進(jìn)行預(yù)測得到的結(jié)果來綜合考慮,選擇概率最高的類別賦給新實(shí)例。 Isolation Forest算法適用于連續(xù)數(shù)據(jù)的異常檢測,通過多顆iTree形成森林來判斷異常數(shù)據(jù),與基于距離和密度進(jìn)行檢測的方法相比較,提高了執(zhí)行效率。如果數(shù)據(jù)源存在大量非連續(xù)時(shí)間序列異常數(shù)據(jù),Isolation Forest算法存在預(yù)測不準(zhǔn)確的情況,為了提高時(shí)間序列數(shù)據(jù)異常檢測的精確度,本文引入Random Forest算法,隨機(jī)森林在泛化能力和分類效果方面十分明顯,可以彌補(bǔ)Isolation Forest算法對于非連續(xù)數(shù)據(jù)異常檢查的缺陷。 該算法流程圖如圖1所示,圖中第1行為離線模塊,第2行為在線模塊。離線模塊為在線模塊提供訓(xùn)練模型,在線模塊實(shí)時(shí)輸出異常數(shù)據(jù),并輸入樣本庫,為離線模塊提供特征值。 圖1 異常檢測算法流程圖 離線模塊的流程是從歷史存儲的海量時(shí)間序列數(shù)據(jù)中,利用Isolation Forest算法過濾大量正樣本并輸出疑似異常,然后把輸出的疑似異常給人工進(jìn)行審核,加入正負(fù)樣本庫。通過特征工程提取特征值,對特征進(jìn)行有效性分析以及對特征進(jìn)行選擇、組合與轉(zhuǎn)換,加入有監(jiān)督算法進(jìn)行離線訓(xùn)練并且為在線模塊輸出訓(xùn)練模型。 在線模塊的流程是加載某電網(wǎng)需要分析的時(shí)序數(shù)據(jù),使用Isolation Forest算法輸出疑似異常,加載離線訓(xùn)練好的模型,通過特征工程進(jìn)行離線計(jì)算,利用Random Forest輸出異常,并把異常數(shù)據(jù)加入樣本庫。對樣本庫進(jìn)行人工標(biāo)注和對樣本進(jìn)行離線訓(xùn)練,并不斷更新和迭代訓(xùn)練模型,為下一次更加準(zhǔn)確預(yù)測分析做準(zhǔn)備。 本文采用的數(shù)據(jù)集來自某電網(wǎng)公司某服務(wù)器的時(shí)序數(shù)據(jù),驗(yàn)證使用的平臺配置為:CentOS Linux release 7.4.1708 (Core),8核CPU和32 GB內(nèi)存,JDK1.8。數(shù)據(jù)源類型包括單指標(biāo)數(shù)據(jù)和多指標(biāo)數(shù)據(jù)。數(shù)據(jù)源種類包含CPU使用率、進(jìn)程數(shù)、內(nèi)存使用率、磁盤使用率、磁盤讀流量、磁盤寫流量、線程總數(shù)、非堆內(nèi)存使用量和堆內(nèi)存使用量(如表1)。 表1 某電網(wǎng)公司數(shù)據(jù)源名稱表 數(shù)據(jù)源序號數(shù)據(jù)源名稱1CPU使用率2進(jìn)程數(shù)3內(nèi)存使用率4磁盤使用率5磁盤讀流量6磁盤寫流量7線程總數(shù)8非堆內(nèi)存使用量9堆內(nèi)存使用量 為了驗(yàn)證時(shí)間序列數(shù)據(jù)異常檢測算法性能,以秒為計(jì)量單位,本文選取某電網(wǎng)2019年2月份CPU使用率、進(jìn)程數(shù)、內(nèi)存使用率、磁盤使用率、磁盤讀流量、磁盤寫流量、線程總數(shù)、非堆內(nèi)存使用量和堆內(nèi)存使用量9個(gè)數(shù)據(jù)集進(jìn)行對比。CPU使用率數(shù)據(jù)集樣本個(gè)數(shù)是10000,進(jìn)程數(shù)數(shù)據(jù)集樣本個(gè)數(shù)是8779,內(nèi)存使用率數(shù)據(jù)集樣本個(gè)數(shù)是7862,磁盤使用率數(shù)據(jù)集樣本個(gè)數(shù)是9265,磁盤讀流量數(shù)據(jù)集樣本個(gè)數(shù)是8730,磁盤寫流量數(shù)據(jù)集樣本個(gè)數(shù)是9124,線程總數(shù)數(shù)據(jù)集樣本個(gè)數(shù)是9309,非堆內(nèi)存使用量數(shù)據(jù)集樣本個(gè)數(shù)是9872,堆內(nèi)存使用量數(shù)據(jù)集樣本個(gè)數(shù)是8029。文獻(xiàn)[4]的異常檢查方法用Statistics算法表示,文獻(xiàn)[5]的異常檢測方法用Frequency算法表示,文獻(xiàn)[6]的異常檢測方法用SA-iForest算法表示,本文的算法用IForest and RForest算法表示。通過表2可以看出Statistics算法執(zhí)行時(shí)間較短,F(xiàn)requency算法執(zhí)行時(shí)間較長,IForest and RForest算法執(zhí)行效率略低于SA-iForest算法。 表2 4種方法在不同數(shù)據(jù)集上的執(zhí)行時(shí)間/s 數(shù)據(jù)集名稱StatisticsFrequencySA-iForestIForest and RForestCPU使用率1.3520.114.216.20進(jìn)程數(shù)1.2121.134.937.19內(nèi)存使用率1.1922.913.985.98磁盤使用率1.2923.094.026.18磁盤讀流量1.2119.104.256.35磁盤寫流量1.2820.194.296.56線程總數(shù)1.3021.574.116.22非堆內(nèi)存使用量1.3323.184.927.12堆內(nèi)存使用量1.2021.323.926.07 為了驗(yàn)證本文提出的異常檢測方法的可行性,與另外3種傳統(tǒng)的方法做詳細(xì)對比,選取CPU訓(xùn)練集100000個(gè)、樣本集13298個(gè),采用檢測成功概率[22](Detection Success Rate, DSR)、誤報(bào)概率(False Positive Rate,F(xiàn)PR)和漏報(bào)率概率[23](False Negative Rate, FNR)作為算法檢測性能的度量指標(biāo)。檢測成功率是指檢查出來的異常行為與實(shí)際異常行為的比例。把正常行為誤認(rèn)為異常行為,此情況稱為誤報(bào),這種錯(cuò)誤所占正常行為的比例,稱為誤報(bào)率。有異常行為不能被識別,最終無法被識別,這種情況被稱為漏報(bào),把漏報(bào)的異常行為所占全部異常行為的比例,稱為漏報(bào)率。M代表數(shù)據(jù)集,Y代表M中的異常數(shù)據(jù)集,X代表算法檢測出的異常數(shù)據(jù)集。 DSR=(Y∩X)/Y (5) FPR=[Y-(Y∩X)]/(M-Y) (6) FNR=[Y-(Y∩X)]/Y (7) 表3 4種方法實(shí)驗(yàn)結(jié)果對比 算法正確率/%誤報(bào)率/%漏報(bào)率/%Statistics81.72.018.3Frequency95.30.54.7SA-iForest88.31.311.7IForest and RForest95.10.54.9 從表2和表3可以明顯看出,Statistics算法雖然運(yùn)行時(shí)間短,但誤報(bào)率和漏報(bào)率高,F(xiàn)requency算法雖然正確率高,但是運(yùn)行時(shí)間較長,SA-iForest算法正確率偏低和漏報(bào)率偏高。由此得出結(jié)論,本文提出的基于Isolation Forest和Random Forest相結(jié)合的智能電網(wǎng)時(shí)間序列數(shù)據(jù)異常檢測算法,雖然實(shí)時(shí)性略低于SA-iForest算法,但準(zhǔn)確性有了明顯的提高。 首先利用Isolation Forest算法,對于一個(gè)樣本數(shù)據(jù)W,令其遍歷每一棵樹,然后計(jì)算W最終落在樹的第幾層(W在樹的高度H),然后計(jì)算W在每棵樹的高度平均值H。根據(jù)這個(gè)高度平均值設(shè)置閾值,低于此閾值的測試數(shù)據(jù)自動(dòng)標(biāo)注為疑似異常。然后加載離線訓(xùn)練好的模型,通過特征工程提取特征值,利用Random Forest算法輸出異常。樣本[1551149611]含有3個(gè)數(shù)據(jù)集,它們的個(gè)數(shù)分別是60、120和120個(gè),圖2展示了某電網(wǎng)CPU時(shí)序數(shù)據(jù)。圖2中折線1代表2019年2月26日15:31-18:31的CPU時(shí)序數(shù)據(jù),折線2代表2019年2月25日15:31-21:31的CPU時(shí)序數(shù)據(jù),折線3代表2019年2月19日15:31-21:31的CPU時(shí)序數(shù)據(jù),縱坐標(biāo)代表CPU使用率(%),橫坐標(biāo)代表時(shí)刻。從圖2可以得知2019年2月26日18:31對應(yīng)的數(shù)據(jù)是異常數(shù)據(jù)。 圖2 測試樣本異常分析 本文針對智能電網(wǎng)時(shí)間序列數(shù)據(jù)存在異常的現(xiàn)狀以及傳統(tǒng)異常檢測算法存在的弊端,提出了基于Isolation Forest和Random Forest相結(jié)合的時(shí)間序列數(shù)據(jù)異常檢測算法,在預(yù)先不設(shè)置閾值的情況下,人工標(biāo)注少量特征值,實(shí)現(xiàn)了智能電網(wǎng)時(shí)間序列數(shù)據(jù)異常檢測,同時(shí)兼顧了準(zhǔn)確性和實(shí)時(shí)性,且有機(jī)器自動(dòng)標(biāo)注和學(xué)習(xí)閾值的功能,從而較準(zhǔn)確和快速地實(shí)現(xiàn)智能電網(wǎng)時(shí)間序列數(shù)據(jù)的異常檢測。2 異常檢測算法流程實(shí)現(xiàn)
3 實(shí)驗(yàn)結(jié)果及分析
3.1 時(shí)間序列數(shù)據(jù)算法性能分析
3.2 時(shí)間序列數(shù)據(jù)算法有效性驗(yàn)證
3.3 時(shí)間序列數(shù)據(jù)算法分析
4 結(jié)束語