資料預先處理-異常值識別

來源:互聯網
上載者:User

標籤:tab   聚類   r語言   全域   資料處理   rnn   alt   通過   replica   

資料預先處理-異常值識別 from:http://shataowei.com/2017/08/09/%E6%95%B0%E6%8D%AE%E9%A2%84%E5%A4%84%E7%90%86-%E5%BC%82%E5%B8%B8%E5%80%BC%E8%AF%86%E5%88%AB/

系統總結了常用的異常值識別思路,整理如下:

空間識別分位元識別

代表的執行方法為箱式圖

上四分位元Q3,又叫做升序數列的75%位點
下四分位元Q1,又叫做升序數列的25%位點
箱式圖檢驗就是摘除大於Q3+3/2*(Q3-Q1),小於Q1-3/2*(Q3-Q1)外的資料,並認定其為異常值;針對全量樣本已知的問題比較好,缺點在於資料量龐大的時候的排序消耗
R語言中的quantile函數,python中的percentile函數可以直接實現。

距離識別

最常用的就是歐式距離
比如:兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的歐氏距離:

可以直觀感受的到,圖中,距離藍色B點距離為基準衡量的話,紅色A1,紅色A2,紅色A3為距離較近點,A4為距離較遠的異常點。


但是這樣看問題會有一個隱患,我們犯了“就點論點”的錯誤沒有考慮到全域的問題,讓我在看下面這張圖:


還是剛才那張圖,橙色背景為未經處理資料集分布,這樣看來A4的位置反而比A1、A3相對更靠近基準點B,所以在存在綱量不一致且資料分布異常的情況下,可以使用馬氏距離代替歐式距離判斷資料是否離群。


其中,μ為feature的均值,X為觀察值,Σ為feature的共變數矩陣
馬氏距離除了用來判斷點是否異常,也可以用來判斷兩個資料集相識度,在Image Recognition,反欺詐識別中應用的也是非常普遍;問題在於太過於依賴Σ,不同的base case對應的Σ都是不一致的,不是很穩定

密度識別

密度識別的方式方法比較多,這邊就提供其中比較經典的,首先我們可以通過密度聚類中大名鼎鼎的dbscan入手,這邊只講思路,詳細的演算法過程另行介紹。
簡單的來講,下面這張圖可以協助理解

我們可以通過隨機播放聯通點,人為設定聯通點附近最小半徑a,半徑內最小容忍點個數b,再考慮密度可達,形成藍色方框內的正常資料區域,剩下的黃色地區內的點即為異常點。

除此之外,密度識別裡面還有一種方式,是參考單點附近的點密度判斷,虛擬碼如下:

1
2
3
4
5
6
7
1.從特徵集合中任選曆史上沒有被選擇過的兩維
2.將原始點集映射到該兩維平面上,刻畫點集中心a
3.以點集中心a,x為半徑畫圓,不斷擴大x的值,直到被覆蓋的點集數/原始點集數的最低閾值
4.沒有被覆蓋到的點集打上outlier_label
5.repeat 1-4
6.統計點對應的outlier_label個數
7.排序高則優先為異常點

 

這邊參考了Clique的映射+Denclue的密度分布函數的思路,注意問題就是計算量大,所以對小樣本的適用程度更高一些,針對大樣本多特徵的資料可以考慮對樣本進行子集抽樣,再根據子集進行1-5,匯總後整體進行6-7步驟,實際檢驗效果仍然可以達到不抽樣的85%以上

拉依達準則

這個方法更加偏統計一些,設計到一些距離的計算,勉強放在空間識別裡面

這種判別處理原理及方法僅局限於對正態或近似常態分佈的樣本資料處理,它是以資料充分大為前提的,當資料較少的情況下,最好不要選用該準則。

常態分佈(高斯分布)是最常用的一種機率分布,通常常態分佈有兩個參數μ和σ為標準差。N(0,1)即為標準常態分佈。


從上面這張圖可以看出,當資料對象值偏離均值3倍標準差的時候,該資料合理的出現可能性小於3‰,所以可以直接認定,資料偏離均值±3倍標準差時,為異常點。但是最後再次強調一遍:它是以資料充分大為前提的,當資料較少的情況下,最好不要選用該準則。

計量識別G-test或者說是likelihood Ratio方法

G-test這類方法運用在醫學方面較多,常用於檢驗觀測變數值是否符合理論期望的比值。現在也用在電商、出行、搜尋領域檢驗一些無監督模型的品質、資料品質。

當我們新上一個模型,部分使用者的反饋特別異常,我們不知道是不是異常資料,在接下來的分析中需不需要剔除,我們可以用統計學方法予以取捨。

其中O為觀測值,E為期望值,假如我們的網站每天24個小時的訂單量分布穩定,分時段計算出一個均值,E1,E2,..E24,新模型產出後,我們問題使用者群對應的24個小時的訂單分布值O1,O2,…..O24,套用上面的公式,我們就可以計算出一個G值出來。

然後在根據G-test的base值,觀察目標使用者可信的最大信賴度,判斷信賴度是否符合我們的最低要求;likelihood Ratio方法類似,相關論文可以直接搜尋。

模型擬合

這類方法屬於簡單有監督識別,常見的包括貝葉斯識別,決策樹識別,線性迴歸識別等等。

需要提前知道兩組資料:正常資料及非正常類資料,再根據它們所對應的特徵,去擬合一條儘可能符合的曲線,後續直接用該條曲線去判斷新增的資料是否正常。
舉個例子:
金融借貸中,我們事先活動一批正常借貸使用者,和逾期不還使用者,我們通過打分卡模型去識別已知使用者的特徵,假設得到芝麻分、手機使用時間長度、是否為男性為關鍵特徵。接下來判斷未知標籤的新增資料是否為正常使用者的話,直接根據之前判斷出來的擬合打分卡曲線去做0-1機率預估就行了。

但是模型擬合的方式使用方式較為局限,絕大多數異常識別問題是無法拿到前置的曆史區分資料,或者已分好的資料不能夠覆蓋全量可能,導致時間判斷誤差較大,顧一般只做emsemble model的其中一種組合模組,不建議做主要依賴標註。

明尼蘇達州大學有過一篇異常論文識別的總結,裡面關於有監督模型、半監督模型、無監督模型等模型擬合講的非常細緻,如果感興趣可以研究一下,附上論文Survey:http://cucis.ece.northwestern.edu/projects/DMS/publications/AnomalyDetection.pdf

變維識別

首先,我們來看一下PCA的虛擬碼

1
2
3
4
5
1.去除平均值,方便後續共變數,方差矩陣的計算
2.計算共變數矩陣及其特徵值和特徵向量
3.將特徵值從大到小排序,特徵值可以反映方差貢獻度,特徵值越大,方差貢獻度越大
4.保留最大的N個特徵值以及它們的所對應的特徵向量
5.將資料對應到上述 N 個特徵向量構造的新空間中

 

pca的核心思路在於儘可能通過feature的組合代替原始feature,使得未經處理資料的方差最大化
通過pca可以得到第一主成分、第二主成分…。
對於正常資料集來說,正常資料量遠遠大於異常資料,所以正常資料所貢獻的方差遠遠大於異常資料;通過pca得到的排名靠前的主成分解釋了未經處理資料較大的方差佔比,所以理論上講,第一主成分反映了正常值的方差,最後一個主成分反映了異常點的方差。通過第一主成分對未經處理資料進行映射後,未經處理資料中的正常樣本和異常樣本的屬性不會隨之改變。

存在一個p個維度資料集orgin_data,X為其共變數矩陣,通過奇異值分解可以得到:


其中,D為對角陣,其每一個值為X所對應的特徵值;P的每一列為X的所對應的特徵向量,並將D中的特徵值從大到小排列,相應的改變P所對應的列向量。
我們選取top(j)個D中的特徵值,及其P所對應的特徵向量構成(p,j) 維的矩陣 pj ,再將目標資料集orgin_data進行映射:new_data = orgin_data*pj;new_data是一個 (N,j) 維的矩陣。如果考慮拉回映射的話(也就是從主成分空間映射到原始空間),重構之後的資料集合是:back_data=transpose(pj*transpose(new_data))=new_data*transpose(pj),是使用 top-j 的主成分進行重構之後形成的資料集,是一個 (N,p) 維的矩陣。

所以,我們有如下的outlier socres的定義:


ev(j) subject to.

解釋一下上面兩個公式,先計算score中orgindata的列減去前j個主成分映射回原空間的newdata下的歐式範數值;再考慮不同主成分所需乘以的權重,這邊,我們認為,第一主成分所代表的資料中正常資料更多,所以權重越小;當j取到最後一維的主成分下,我們認為權重最高,達到1。


對於outlier socres過高的點,即為異常點。

神經網路識別

之前比較火的神經網路分析,同樣可以用來做有監督的異常點識別,這邊介紹一下Replicator Neural Networks (RNNs)。


這邊我們通過映像可以看出:
1.輸入層中,輸入變數個數與輸出層中,輸出變數一致
2.中介層的節點數小於輸入輸出層節點
3.整個訓練過程是一個先壓縮後解壓的過程

常規的,我們通過mse來看模型的誤差

我們來大致瞭解一下RNN的運行邏輯,首先,最左邊的為輸入層即為未經處理資料,最右層的為輸出層即為輸出資料。中間各層的啟用函數不同,入參經過啟用函數所得到的出參的值也不一致,但是在同一層啟用函數都是一致的。
對於我們異常識別而言,第二層和第四層 (k=2,4),啟用函數選擇為

tanh映像如下,可以將未經處理資料壓縮在-1到1之間,使得未經處理資料有界。

對於中介層 (k=3) 而言,啟用函數是一個類階梯 (step-like) 函數。

其中,N為階梯分層數,a3為提升的效率。N的個數越多,層次分的更多。

比如N=5的形式下:

比如N=3的形式下:


這樣做的好處就是,隨著N的增加可以將異常點或者異常點群集中在某一個離散階梯範圍內。
通過對RNN的有監督訓練,構造異常樣本分類器,進行異常值識別。

isolation forest

2010年南大的周志華教授提出了一個基於二叉樹的異常值識別演算法,在工業界來說,效果是非常不錯的,最近我也做了一個流失使用者模型,實測效果優秀。

和random forest一樣,isolation forest是由isolation tree構成,先看一下isolation tree的邏輯:

1
2
3
4
5
6
7
method:
1.從未經處理資料中隨機播放一個屬性feature;
2.從未經處理資料中隨機播放該屬性的下的一個樣本值value;
3.根據feature下的value對每條記錄進行分類,把小於value的記錄放在左子集,把大於等於value的記錄放在右子集;
4.repeat 1-3 until:
    4.1.傳入的資料集只有一條記錄或者多條一樣的記錄;
    4.2.樹的高度達到了限定高度;

 

大致的思路如:

理論上,異常資料一般都是離群資料,非常容易在早期就被劃分到最終子節點。所以,通過計算每個子節點的深度h(x),來判斷資料為異常資料的可能性。論文中,以s(x,n)為判斷資料是否異常的衡量指標。

其中,h(x)為x對應的節點深度,c(n)為樣本可信度,s(x,n)~[0,1],正常資料來講s(x,n)小於0.8,s(x,n)越靠近1,資料異常的可能性越大。

單棵樹的可信性不足,所以我們通過用emsemble model的思路,去構造一個forest的樹群來提高準確性。
但是作為isolation forest的時候,需要對原s(x,n)的公式有所更改,通過E(h(x))來替代h(x),其中E(h(x))為資料x在各棵樹上的h(x)的平均。
同時,
1.因為樹的個數大大增加,所以需要控制計算的開銷,所以每個棵樹我們可以採取資料抽樣的方式,使得抽樣資料集遠遠小於未經處理資料集,且根據周志華老師的論文,採樣大小超過256效果就提升不大了。
2.我們可以控制深度,使得沒棵樹的最大深度limit length=ceiling(log2(樣本大小)),當樹深度大於最大深度時,其產生的子節點絕大多數均為正常資料節點,失去異常檢驗的意義。

資料預先處理-異常值識別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.