轉載請標明出處:http://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html
本文主要針對IBM SPSS Modeler 18.0中離群點檢測算法的原理以及“異常”節點(見圖1)使用方法進行說明。SPSS Modeler中的離群點檢測算法思想主要基於聚類分析。如圖2所示,可先將圖中樣本點聚成三類,$A$、$B$和$C$三個樣本點應分別屬於距離他們最近的類,但與相對類內的其他樣本點,這三個點又分別遠離各自的類,所以可以基於此判定是離群點。
圖1:“異常”節點
圖2:離群點檢測示意圖
1. 離群點檢測算法思想
根據上述分析,你群點檢測算法主要分為三個階段:第一階段,聚類,即將樣本點聚成若干類;第二階段,計算,即在第一階段聚類的基礎上,依據距離計算所有樣本點的異常性測度指標;第三階段,診斷,即在第二階段異常性測度指標的基礎上,確定最終的離群點,並分析導致樣本點異常的原因,也就是分析離群點在哪個變量方向上呈現異常。以下就這三個階段分別討論:
1.1. 第一階段:聚類
該階段主要借助兩步聚類算法實現對所有樣本點的聚類(可參考兩步聚類算法的相關內容)。兩步聚類算法主要分為兩個步驟:第一步是通過構造聚類特征(CF)樹將大量零散的數據樣本濃縮成可管理數量的子簇;第二步是從CF樹葉節點的子簇開始利用凝聚法(agglomerative hierarchical clustering method),逐個地合並子簇,直到期望的簇數量。
兩步聚類算法可以進行離群點處理,首先在CF樹瘦身(rebuilding)之前篩選出潛在離群點,並CF樹瘦身步驟后重新插入誤識離群點到中。
- 潛在離群點的篩選。在CF樹實施瘦身之前,從當前CF樹中的所有葉元項(leaf entry)中找出包含最多數據樣本的元項,記錄該元項包含的數據樣本數目($N_{\max} $),根據事先確定的比例參數$\alpha$;如果某葉元項包含的數據樣本數目小於$\alpha N_{\max} $,則該葉元項置為潛在離群點,從當前CF 樹中移除。
- 誤識離群點的插入。在CF樹瘦身完畢后,逐個處理潛在離群點,如果能夠在不增加當前CF樹體積的條件下吸收到CF樹中,則認為該潛在離群點為誤識離群點,將插入至當前CF樹上。在完成數據集$\mathfrak D $中所有數據點到CF樹上的插入后,仍為潛在離群點的元項,視為最終離群點。
在完成數據集中所有數據樣本到CF樹上的插入后,仍為潛在離群點的元項,視為最終離群點。這些離群點將會分配到第二步凝聚法的聚類結果中。
“異常”節點中與此階段相關的,是其“專家”選項的相關參數設計(見圖3):
- 調整系數。指定一個大於0的數,用於調整連續型變量和分類型變量在計算距離時的權重,該值越大,連續型變量的權重越大。
- 自動計算對等組數。表示自動判斷樣本點應聚成幾個類,聚類數目允許的最小值和最大值須分別指定。
- 指定對等組數。選中此選項,可直接指定聚類數目。
- 噪聲水平。其對應了上文中的$\alpha$,噪聲水平的取值在0到0.5之間。
- 插補缺失值。如果選中該選項,對於連續型變量將用變量均值代替缺失值,對於分類型變量,缺失值將作為一個有效的新類別;如果,該選項沒有選中,任何帶有缺失值的樣本都將從分析中剔除。
圖3:“異常”節點的“專家”選項
1.2. 第二階段:計算
第二階段的任務是在第一階段聚類的基礎上,計算樣本的異常性測度指標,異常性測度指標的計算是基於對數似然距離(可參考對數似然距離的相關內容)。對於樣本點$s$,離群點檢測算法計算了以下指標。
(1)找到樣本點$s$所屬的簇$C_j$。通過計算$\{s\}$與$C_j \setminus \{s\}$的對數似然距離得到樣本點$s$的組差異指標GDI(Group Deviation Index):
\begin{equation}\label{Eq.1}
GDI_s = d(\{s\}, C_j \setminus \{s\}) = \zeta_{C_j \setminus \{s\}} + \zeta_{\{s\}} - \zeta_{C_j}
\end{equation}
其中
\begin{equation*}
\zeta_{C_j} = -N_j \left ( \frac12 \sum_{k=1}^{D_1} \ln (\hat \sigma^2_{jk} + \hat \sigma^2_k) + \sum_{k=1}^{D_2} \hat E_{jk} \right )
\end{equation*}
\begin{equation*}
\hat E_{jk} = -\sum_{l=1}^{\epsilon_k} N_{jkl}/N_j \ln (N_{jkl}/N_j)
\end{equation*}
公式中符號的具體含義見“對數似然距離”。GDI反映的是,樣本點$s$加入簇$C_j$后所引起的簇$C_j$內部差異/散布的增大量,因此GDI越大,樣本點越有可能是離群點。
(2)根據$\zeta_{C_j}$的定義,$\zeta_{C_j}$可以划分成各變量上值得線性組合:
\begin{equation*}
\zeta_{C_j} = \sum_k^D \zeta_{C_j}^{(k)}
\end{equation*}
其中
\begin{equation*}
\zeta_{C_j}^{(k)} =
\begin{cases}
- \frac{N_j}2 \ln (\hat \sigma^2_{jk} + \hat \sigma^2_k), & \text{變量}k\text{是連續型的} \\
-\sum_{l=1}^{\epsilon_k} N_{jkl} \ln (N_{jkl}/N_j), & \text{變量}k\text{是分類型的}
\end{cases}
\end{equation*}
進一步定義樣本點$s$在變量$k$上的變量差異指標VDI(Variable Deviation Index):
\begin{equation}\label{Eq.2}
VDI_s^{(k)} = \zeta_{C_j \setminus \{s\}}^{(k)} + \zeta_{\{s\}}^{(k)} - \zeta_{C_j}^{(k)}
\end{equation}
因此有$GDI_s = \sum_k VDI_s^{(k)}$,變量差異指標VDI表示各變量在組差異指標GDI上的“貢獻”大小。
(3)計算異常指標AI(Anomaly Index)。
對於樣本點$s$,其AI定義為:
\begin{equation}\label{Eq.3}
AI_s = \frac{GDI_s}{\frac{1}{|C_j|} \sum_{t \in C_j} GDI_t}
\end{equation}
AI是一個相對指標較GDI更直觀,是樣本點$s$所引起的簇內差異與簇$C_j$內其它樣本點所引起差異的平均值的比例,該值越大,認為樣本點$s$是離群點的可能性就越大。
(4)計算變量貢獻指標VCM(Variable Contribution Measures)。
對於樣本點$s$,變量$k$的貢獻指標定義為
\begin{equation}\label{Eq.4}
VCM_s^{(k)} = \frac{VDI_s^{(k)}}{GDI_s}
\end{equation}
VCM是一個相對指標,較VDI更直觀,反映的是各聚類變量對組內差異“貢獻”的比例。該值越大,則相應變量導致樣本點$s$離群原因的可能性越大。
1.3. 第三階段:診斷
第二階段計算得到了所有樣本點的GDI、VDI、AI和VCM,本階段將依據這些指標的排序結果,確定離群點,並分析導致異常的原因。
- 將AI按照降序排序,排在前$m$位的樣本點可能為離群點。同時,$m$位置的AI 值就是離群點的判斷標准。大於該值的為離群點,小於為非離群點。
- 對於離群點,將VDI按照降序排序,排在前$l$位的變量是導致該點可能異常的主要原因。
“異常”節點中與第二、三階段相關的,是其“模型”選項的相關參數設計(見圖4):
- 最小異常指數水平。指定異常指標AI的閾值,對於樣本點$s$,如果根據式(3)計算出的$AI_s$大於該閾值,則該樣本點$s$定義為離群點。
- 訓練數據中最異常的記錄百分比。指定多少百分比的樣本為離群點。
- 訓練數據中最異常的記錄數。指定多少個樣本為離群點。
- 要報告的異常字段數($l$)。對於離群點$s$,對於所有變量$k$,取$l$個$VDI_s^{(k)}$值(由式(2)計算)最大的變量在模型結果中進行報告。
圖4:“異常”節點的“模型”選項
2. 示例流
圖5:異常檢測示例流
參考《SPSS Modeler數據挖掘方法及應用》中的數據和流,構造了圖5中所示的流。打開流中的模型塊(如圖6和7所示)。
圖6中“模型”選項的結果表明,所有樣本數據聚成了兩類(稱之為“對等組”),第1類包含498個樣本,發現5個離群點;第2類包含169個樣本,發現1個離群點。對第1類中5 個離群點分別找出3個VCM值(見式(4))最大的變量,形成了圖6中的上表。所有5個離群點對應的3個VCM值最大的變量中都包含“基本費用”,換句話說,變量“基本費用”對於形成所有5個離群點都有較大貢獻,5個離群點的平均VCM 值為0.165. 另一個需要注意的變量是“免費部分”,雖然該變量只對3個離群點的成因有較大貢獻,但其平均VCM的值達到了0.325,這說明,它對這3個離群點的成因有非常大的貢獻。
圖7中“摘要”選項給出了判斷離群點的AI閾值,即“異常指數分界值:1.52328”。 針對本次找出的6個離群點,通過式(3)計算出的AI值都不小於該值,而其它樣本點的AI值都小於該值。
圖6:“異常”模型塊的“模型”選項
圖7:“異常”模型塊的“摘要”選項
在模型塊的“設置”選項中選中“丟棄記錄”-“非異常”后運行“異常數據”表格,得到如圖8的離群點輸出結果,該表格中一共出現了5類新變量:
表1:新變量說明
新變量名稱 | 說明 |
$O-Anomaly | 是否離群點,T:是,F:否 |
$O-AnomalyIndex | 該樣本的異常指標AI,由式(3)計算 |
$O-PeerGroup | 樣本分配到的對等組(所在簇) |
$O-Field-n | VCM第n大的變量名稱,VCM由式(4)計算 |
$O-FieldImpact-n | VCM第n大的變量對應的VCM值 |
以圖5中的流為例,因為圖4中的“要報告的異常字段數”設定為3,所以$O-Field-n和$O-FieldImpact-n中的$n$最大只能取到3. 再看圖8中的第一行,該樣本的$AI=1.530$,屬於第一個簇,VCM貢獻最大的變量是“收入”,該樣本在變量“收入”下的$VCM=0.200$.
圖8:離群點輸出結果表
參考文獻
[1] 薛薇, 陳歡歌. SPSS Modeler數據挖掘方法及應用[M]. 北京: 電子工業出版社. 2014.