康鑫碩,崔 策
(1.廣研檢測(廣州)有限公司,廣東廣州 510700;2.廣州機械科學研究院有限公司,廣東廣州 510700)
油液監測的異常值是指樣本中某個特征與其余樣本有明顯差異的少數值。在油液監測過程中,對異常數據的甄別是一項重要工作,一方面,異常值的存在會對指標閾值的制定產生影響,多數情況下會導致報警值過于寬松,這樣就容易造成漏診,因此在制定閾值前通常要先將離群值從數據集中剔除;另一方面,異常值本身也表征這設備狀態的異常,將這些離群點找出來并針對性地分析原因,也可以累積診斷經驗,為企業的潤滑管理的提升提供依據[1]。
通過異常值的檢驗,一方面提升了樣本的凈度,另一方面也是數據探索過程的重要一環,目前學術界有多種方法可以實現異常值的檢驗。例如,對于一維數據,其特征可以是樣本的均值、方差等參數,采用統計圖表等方式直接觀察發現異常點;對于多維數據,可通過非監督算法如Kmeans、PCA 主成分等算法計算相應特征,并找出數據的特征中與多數數據存在明顯差異的異常值[2]。本文分別介紹HBOS(Histogram-based Outlier Score,直方圖)法、LOF(Local Outlier Factor,局部離群因子)算法、KNN(K-Nearest Neighbor,K-近鄰)算法、ABOD(Angle-Ba sed Outlier Detection,角度離群算法)、Kmeans 算法等、Isolation Forest(孤立森林法)的檢驗原理,最后通過python 開發異常檢驗模塊界面。
直方圖法是一種基于統計的無監督方法,利用直方圖去判斷異常值。其核心思想是將多維樣本的每個維度先進行直方圖統計,計算出各維度的頻數和頻率等特征,然后進行合并計算,將多維樣本分成多個方形區間,樣本數少的區間是異常值的概率大,反之則為非異常樣本,異常值的判別通過概率密度進行計算。圖1 為一個通過直方圖檢驗油液黏度—酸值二維數據異常值的示例,圖中虛線外深色區間的數據為異常值[3]。

圖1 HBOS 異常值統計示例
從數據密度的角度來看,正常樣本往往處于高密度區域,異常值往往是處于低密度區域中?;诿芏鹊漠惓V禉z驗方法的原理是:對于數據集D,其中多數正常樣本xc周圍的密度與其相鄰樣本的周圍密度是相似的,而少數離群樣本xo周圍的密度會明顯不同,通過對比各樣本周圍的密度和其相鄰數據周圍的密度,就可以獲取離群值的相關信息[4]。
LOF 算法就是一種基于密度的異常值檢驗方法,可通過點的一定范圍內數量來計算得出密度,某個樣本周圍的樣本越少密度越低,數量越多密度越高。CBLOF(Cluster-Based Local Outlier Factor,基于聚類的本地異常因子)在LOF 的基礎上增加了聚類的操作,降低了異常值檢驗的復雜度。圖2 是通過CBLOF檢驗的同一組實驗樣本黏度和酸值之間的異常值檢測結果。
如果一個數據樣品遠離大部分點,那么就可以認為這個樣本就是異常的。因此對于樣本數據集D,可以通過統計計算出距離的閾值r 來劃分樣本數據的合理鄰域。對于每個樣本xi,可以考察xi與其他樣本的距離特點。通過遍歷計算出樣本點xi和其余樣本的距離,當某個點總是遠離其余樣本,即不在xi的r 鄰域內,則xi視為異常值,這就是基于距離的異常值檢驗方法的基本思路[5]。
臨近算法(KNN)就是最常見的基于距離的異常值檢驗方法,圖3 是其檢驗的結果示例,其中距離函數選擇歐式距離。

圖3 KNN 異常值統計
基于角度的離群點檢測是一種針對多維數據集的檢測方法。該方法類似于LOF 等局部離群點檢測方法,對于數據集中任意的三點形成角度譜相圖,然后通過設定表征離群程度的離群系數,將數據對象排序輸出,最終得出離群點。由于高維數據的角度相比距離更加穩定,因此主要應用于高維數據的異常值檢驗[6]。常見的方法有角度離群算法(ABOD),圖4 是其檢驗的黏度和酸值之間的異常值檢測結果。
孤立森林法(Isolation Forest)是一個基于集成學習的快速異常檢測方法,適用于非線性、多維度的大數據樣本的異常處理。從統計學來看,在多維數據空間里,異常樣本值可定義為那些分布稀疏,且相比高密度群體較遠的點。而往往異常值的稀疏特征可在通過遍歷維度的方式找出,這就是“孤立森林”法的前提假設[7]。
孤立森林的計算原理與隨機森林相似,它是基于多個決策樹集成建立的。其思路如下:對于一組樣本數據,在這個樣本數據某個維度下的選擇一個值,對樣本群體進行二叉劃分,將小于該值的樣本劃分到節點左邊,大于該值的樣本劃到右邊,這樣就得到了一個分裂條件和兩個數據樣本,然后分別在這兩個數據集上重復上面的過程,直到樣本無可再分,這樣就形成了一棵“樹”[8]。每一個節點就可以看作一個分枝,每一個數據就可以看作一片葉子(圖5)。終止條件通常有兩種,一種是數據分身不可再分,即該數據集中只剩下一個樣本,或全部樣本值相同;另一個是數的高度到達一定程度。

圖5 孤立森林法示意
把“樹”建立好之后,通過不同的樹集成形成孤立森林后,就可以對數據進行分類了。其過程就是將樣本數據沿著不同樹的枝干分類,最終達到不同的節點,并記錄這個過程中經過的路徑長度,即從根節點,穿過中間的節點,最后到達葉子基點,所走過的“枝”數量。在這種隨機分割的策略下,異常值通常具有較短的路徑。
孤立森林將異常數據判定為樹平均路徑較短的結果,并通過異常系數來評價一個數據樣本的異常程度,其結果介于在0和1 之間,異常值公式為:
其中,E(h(x))是某樹根節點到葉節點的路徑長度h(x)的平均值,而c(n)是在n 個決策樹h(x)的平均值??梢酝ㄟ^該公式對每個樣本進行異常評分,數據遍歷的樹越多或路徑越長則得分越低,反之得分越高。
圖6 為通過孤立森林算法得出某齒輪油酸值和黏度的異常值結果。

圖6 孤立森林法異常檢驗
在設備的狀態監測過程中,由于缺乏可靠的歷史資料,往往無法確定共有多少故障類別,在僅有監測數據的條件下,通過對數據特征的統計分析,可以將具有相近特征的數據組成的一個類別,而對不同特征的數據劃入不同的類別,即本著同類相近、異類相遠的原則對數據進行區分,首先形成多個不同類別的特征集,而后通過計算特征集合內各點和中心的距離,以此來完成異常值的區分[9]。下面以Kmeans 算法為例,介紹聚類分析算法在異常值檢測中的應用。
Kmeans 算法的核心思想是將所有樣本數據到劃分到不同數據簇當中,使得樣本到聚類中心的距離平方和最小[10]。設樣本模式集為X={Xi,i=1,2,3,…,N},其中Xi為n 維向量,Xi={ Xik,k=1,2,3,…,n},聚類過程就是要找到劃分簇集ω={ω1,ω2,…ωC},使得聚類準則函數J 到最小。
當各類中心明確時,類別的劃分按照最鄰近法則確定。即如果滿足,則說明樣品Xi屬于類j。當獲得多個不同簇后,計算每個點到簇中心的距離值,將距離跟設置的閾值相比較,如果其大于閾值則認為是異常,否則正常。
圖7 是通過Kmeans 算法得出的酸值和水含量含量的聚類分析結果,從聚類結果可以知道數據的大致分類情況,這對于診斷工程師具有一定輔助診斷和數據探索的作用。

圖7 Kmeans 算法異常值檢驗
Tkinter 是基于python 語言開發的窗口視窗設計模塊,具有標準GUI(Graphics User Interface,圖形用戶界面)工具接口。作為python 語言內置的GUI 開發工具,可快速、高效地創建GUI程序。Tkinter 能夠滿足多數小型GUI 程序的需求。其開發的程序在Windows、Linus 等操作系統上均可運行,具有較高的兼容性[11]。其中,數據庫來源于Oracle 油液監測數據庫,分析維度為油液監測數據的各項理化指標,如黏度、水分、溫度等;異常值比例默認為0.3%,分析結果均顯示在右側(圖8)。

圖8 基于Tkinter 開發的界面效果
油液監測數據包含了設備故障狀態的重要特征,作為設備是否檢修與維護等操作的重要依據,如何感知多維、非高斯油液數據的狀態,尤其是異常狀態是挖掘數據和異常檢驗的難點,本文主要介紹直方圖(HBOS)、LOF、KNN、ABOD、Kmeans、Isolation Forest(孤立森林)等多個算法的原理,并采用python Tkinter 開發異常檢驗界面,實現對油液監測數據的自動化探索和異常感知。