AIOps指標異常檢測之無監督算法

隨着系統規模的變大、複雜度的提高、監控覆蓋的完善,監控數據量越來越大,運維人員無法從海量監控數據中發現質量問題。智能化的異常檢測就是要通過AI算法,自動、實時、準確地從監控數據中發現異常,爲後續的診斷、自愈提供基礎。

異常檢測算法分類

大量應用場景對快速有效檢測異常的需求以及異常檢測場景相較於其他場景的特殊性,使得異常檢測問題的研究具有極大的應用和研究價值,促使很多異常檢測算法被提出和實踐.智能化的異常檢測算法主要分爲三大類,基於統計的異常檢測算法、無監督異常檢測算法和有監督異常檢測算法.下面對三種檢測算法作簡要介紹和對比分析。

一、基於統計的異常檢測算法

基於統計的異常檢測算法, 利用統計學思想, 通過對歷史數據計算統計特徵, 然後判斷待檢測的數據是否符合歷史數據的統計特徵, 如果是則認爲是正常, 如果不是則認爲是異常。

常用的基於統計的異常檢測算法有3-sigma, 四分位數, 同比, 環比等等。

基於統計的異常檢測算法的特點是簡單易用, 可解釋性強, 但無法處理複雜的場景。

二、無監督異常檢測算法

無監督異常檢測算法,通過對數據進行計算分析, 識別出那些相對孤立的點, 把這些孤立點就看作爲異常點。由於無監督異常檢測算法的應用場景往往只需要得到異常的排名,認爲最爲異常的一部分數據是異常數據,所以其輸出結果大多是樣本點對應的異常分數,異常分數對應到樣本點的異常程度。在所有無監督異常檢測方法中,基於樣本點之間的距離或者樣本點所在的密度來判別樣本是否爲異常,是無監督異常檢測常用的經典方法。

常用的無監督異常檢測算法有孤立森林, LOF, One-Class-SVM等等。

無監督異常檢測算法的特點是無需打標數據, 在特徵選取合理情況下準確性高, 能處理大規模複雜場景等, 但也存在特徵選取難, 可解釋性差等問題。

三、有監督異常檢測算法

對於有監督異常檢測,首先需要一大批帶有標籤的數據作爲訓練數據, 將訓練數據作爲有監督算法的輸入, 對算法模型進行訓練後得到模型, 然後將待檢測的數據作爲模型的輸入, 最終模型給出待檢測是正常還是異常類別。

常用的有監督異常檢測算法有SVM, ANN, 決策樹, CNN, RNN等等。

通過有監督學習方法,在實驗數據中可以得到比較好的異常分類效果。但是在實際異常檢測過程中,異常數據往往是少量的,多變的,並且之前可能沒有出現過,所以要獲得足量準確、適用於有監督算法的數據是很困難的。因此,有監督異常檢測不適用於大規模指標異常檢測的落地。

下表是三種類別算法從幾個維度對比結果:
在這裏插入圖片描述

通過上面對三種異常檢測的對比分析,可以看出無監督檢測算法在能保證較高準確性的同時,在易用性和落地難度上有較大優勢。因此在工程實踐中,無監督異常檢測算法運用的比較多。下面就重點介紹一下運維領域無監督算法在異常檢測中的應用情況。

無監督異常檢測算法

在各類異常檢測應用場景中,由於本身數據量巨大,同時數據量隨時間快速增長,因此往往無法給新增數據打上足量且準確的異常或者正常標籤, 所以有監督異常檢測算法難以勝任。而基於統計的異常檢測算法準確率有限, 無法滿足一些複雜的場景, 因此在大規模異常檢測中表現也不盡人意. 綜合起來, 無監督異常檢測算法無疑是最適合大規模異常檢測的落地和實踐。

無監督異常檢測的數據量往往是較大的。無監督異常檢測算法不要求訓練數據具有類別標籤,這意味着與有標籤數據相比,同樣數量的無標籤數據所提供的信息更少,因此無監督算法需加入更多的訓練數據進行訓練。同時由於大數據場景下,數據量的快速增長給訓練算法提供了足夠大的數據量,使得依靠數據量保證模型準確性的無監督異常檢測算法能夠順利運行。

無監督異常檢測算法另外一個難點就是如何提取和選取數據特徵, 因爲無監督算法往往處理的是多維數據, 通過對數據多個維度的特徵進行綜合判斷, 最終確定數據的異常與否.。

常用的無監督異常檢測算法有孤立森林, LOF, One-Class-SVM等等。

實驗

1. 實驗數據

因爲需要最終通過統計誤報率和漏報率等指標來衡量算法的優劣,所以必須要用打標數據,因此本次實驗選用清華打標數據,數據包括29個指標,每個指標3個月的數據.數據介紹見下表:
在這裏插入圖片描述

2. 數據特徵選擇

無監督算法一般是對多維數據進行處理, 因此需要對原來單維的數據進行特徵提取, 使其成爲多維數據。

  • 特徵提取方案一
    參考騰訊異常檢測框架Metis中選用的數據特徵, 最大值, 最小值, 值域, 均值, 中位數, 方差, 偏度, 峯度, 同比, 環比, 週期性 自相關係數, 變異係數, 移動平均算法, 帶權重的移動平均算法, 指數移動平均算法, 二次指數移動平均算法, 三次指數移動平均算法, 奇異值分解算法, 自迴歸算法, 深度學習算法, 熵特徵, 值分佈特徵這些特徵作爲數據的特徵, 其在無監督的孤立森林算法的表現爲:在這裏插入圖片描述從誤報率和漏報率可以看出,效果並不好,查找資源發現,孤立森林, LOF等無監督算法不適合處理太多緯度的數據, 該特徵集特徵太多,最終導致算法效果不理想。

  • 特徵提取方案二
    論文《雲環境中時序數據的預測和異常檢測算法的研究_王超》中提到過,在對時序數據進行預測時, 也採用了無監督算法, 其選用的特徵爲:當前值, 前一個值, 前兩個值, 前五個值的均值, 前一天同時刻前後5個值均值,前5天同時刻均值, 故該方案參考上面的特徵提取方法, 在無監督的孤立森林算法的表現爲:
    在這裏插入圖片描述
    從誤報率和漏報率可以看出,效果也不是很理想, 分析原因是大部分無監督算法都建立在計算數據點之間的距離之上, 如果直接使用上述的特徵, 數據與數據直接的距離並沒有實際的意義, 因此該數據特徵集也不是很合適。

  • 特徵提取方案三
    論文《雲環境中時序數據的預測和異常檢測算法的研究_王超》中提到的數據特徵集的個數和意義其實比較合適, 只是數據點之間的距離沒有實際意義, 因此對特徵集進行重定義:當前值, 前一個值與當前值的差值, 前兩個值與當前值的差值, 前五個值的均值與當前值的差值, 前一天同時刻前後5個值均值與當前值的差值,前5天同時刻均值與當前值的差值, 在無監督的孤立森林算法的表現爲:
    在這裏插入圖片描述
    特徵提取方案三最終的效果能滿足要求,因此本次實驗最終選用特徵提取方案三中的特徵作爲最終的數據特徵。

3. 算法實驗

本次實驗分別對孤立森林算法, LOF算法, One-Class-SVM算法三種算法進行了實驗. 將數據分爲兩部分, 前15天的數據作爲訓練數據, 後15天的數據作爲測試數據, 並對測試數據的檢測結果進行統計分析, 得出漏報率和誤報率等指標。

  • 孤立森林算法
    孤立森林是在訓練數據集上訓練出一定數據的決策樹,這些決策樹是能將特定數據集分割成一個個數據點,對待檢測的點,如果能在較短的路徑下找到類別,就認爲該點是異常點,算法介紹可參考https://www.jianshu.com/p/d9fb673301a3。Sklearn中對孤立森林進行了實現和封裝,但是在模型構建時,必須指定異常數據的比例,檢測結果異常的比例就和模型構建時提供的比例相同,這在實際使用過程中不太合理,因此對Sklearn中對孤立森林進行了改進和重新實現將異常數據的比例參數去掉,最終將算法運行在特徵數據集上。孤立森林的效果如下:
    在這裏插入圖片描述

  • LOF算法
    LOF算法是典型的基於密度的無監督異常檢測算法, 其認爲待檢測點在一點範圍內數據點密度太小就爲是異常,介紹可參考:https://blog.csdn.net/wangyibo0201/article/details/51705966。Sklearn中對LOF也進行了實現和封裝, 因此本次實驗直接調用sklearn的包(sklearn.neighbors.LocalOutlierFactor)運行LOF算法。LOF算法效果如下:
    在這裏插入圖片描述

  • One-Class-SVM算法
    One-Class-SVM算法是利用訓練數據, 得出超平面, 該超平面能將數據集分爲異常面和正常面, 然後判斷待檢測數據處於那個面上, 算法介紹可參考:https://blog.csdn.net/a1154761720/article/details/50708398。Sklearn中對One-Class-SVM也進行了實現和封裝, 因此本次實驗直接調用sklearn的包(sklearn.svm.OneClassSVM)運行One-Class-SVM算法。One-Class-SVM算法效果如下:
    在這裏插入圖片描述

4. 無監督算法優化

從以上三個實驗結果可以看出, 三個算法的效果都表現一般, 是因爲每種算法擅長處理的場景和特徵都不同, 如果能將這些算法柔和起來, 可能效果會跟好, 因此本次實驗對無監督算法進行了改進。
改進辦法是分別用三種算法對同一個待檢測點進行檢測, 然後通過投票的方式最終確定待檢測點是正常還是異常。其投票方式是兩個以上判斷爲異常就爲異常, 兩個以上判斷爲正常就爲正常。
算法效果如下:
在這裏插入圖片描述

5.基於統計異常檢測與無監督異常檢測結果對比

因爲有監督異常檢測無法大規模落地和實踐, 本次實驗就不進行對比分析了. 因此重點對無監督異常檢測確實和基於統計異常檢測進行對比分析。
在這裏插入圖片描述
總的來說,無監督異常檢測算法在漏報和誤報上都比基於統計異常檢測表現優秀, 尤其是誤報率有大幅的領先. 證明無監督異常檢測確實比基於統計異常檢測更加準確有效。


點擊查看原文
或掃描下方的微信公衆號二維碼查詢
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章