異常值檢測

爲什麼

在數據集中,異常值(Outlier or Anomaly)作爲不尋常的表徵點,無利於後面算法對於數據集中模式的挖掘,甚至會極大地影響性能,或者直接用於一些異常檢測的場景,如欺詐檢測、安全檢測等.異常值檢測是數據清洗裏非常重要的一步.

定義

一般可以利用聚類的思想,定義爲分佈稀疏且離密度高的羣體較遠的點

通常異常值出現的原因有以下幾種:

  • 數據收集過程出現問題,錄入錯誤

  • 數據測量誤差(人爲、測量儀器)

  • 數據隨機誤差(數據自身)

如何檢測

基於統計

1. 基於高斯分佈的異常點檢測

根據已有的數據集,建立高斯分佈的模型,通過新數據與已知分佈的差異判斷是否屬於異常值

p(x)=12πσ2exp(xμ22σ2)

可以擴展到多維或者多元分佈

3σ 原則也是屬於高斯分佈判斷方法的一種,在這裏異常值被定義爲,其值與平均值的偏差超過三倍標準差的值,即

P(|xμ|>3σ)0.003

2. 四分位數

Q1 :上四分位數
Q2 :下四分位數
IQR=Q1Q2 :上下四位分數之差,包含了全部觀測值的一半

四分位數的思想就是,通過估計數據集中可能的最小和最大值,以此判斷異常值,估計可能的最小和最大值爲

min=Q2kIORmax=Q1+kIOR

k 的取值取決於你對異常值的忍耐程度,一般取k=1.5 .

箱線圖

3. 各類統計量

更多的還有基於各類統計量來檢測多元離羣點,例如χ2 檢驗、t 檢驗等.

4. 基於主成分分析的矩陣分解方法

這種方法經過主成分分析分解,再進行重構,通過異常值在主成分分量上的偏差更大來判斷是否異常.

https://mp.weixin.qq.com/s?__biz=MzIzODExMDE5MA==&mid=2694182465&idx=1&sn=c644809b757bb1c3f0439eae4bb2f78c#rd

Seasonal Hybrid ESD算法

Twitter的異常檢測算法(Seasonal Hybrid ESD)
先用STL把序列分解,考察殘差項。假定這一項符合正態分佈,然後就可以用Generalized ESD提取離羣點
待續…….
https://anomaly.io/blog/

基於距離

利用聚類的思想,對數據進行聚類.,排除距離中心最遠的N 個點,一般的方法有,kmeans、knn、DBSCAN

局部異常因子LOF(Local Outlier Factor)算法

首先定義以下概念,

  1. k 鄰近距離(k-distance)
    定義爲,在距離數據點p 最近的幾個點中第k 個最近的點與點p 之間的距離,記爲dk(p)

  2. 可達距離
    定義爲,給定鄰近距離參數k 時,點p 與另一點o 的可達距離爲,點ok 鄰近距離與distance(p,o) 兩個距離比較的最大值,

    rechdistk(p,o)=max{dk(o),distance(p,o)}
  3. 局部可達密度(local rechability density)
    基於可達距離,首先與點p 距離小於dk(p) 的數據稱爲它的k 近鄰,記爲Nk(p) ,點p 的局部可達密度則定義爲,點pk 近鄰數據點的平均可達距離的倒數

    lrdk(p)=1/(oNk(p)reachdistk(p,o)|Nk(p)|)

    局部可達密度的意義就是,一個數據點跟其他點比較疏遠的話,那麼顯然它的局部可達密度就小,即密度越低的話,就越有可能是離羣點.
  4. 局部異常因子(local outlier factor)
    LOF算法爲允許數據分佈不均勻、密度不同的情況,採取了與周圍近鄰點相對密度來定義局部異常因子
    p 的局部相對密度(局部異常因子)爲點pk 的平均局部可達密度跟數據點p的局部可達密度的比值

LOFk(p)=oNk(p)lrdk(o)lrdk(p)|Nk(p)|=oNk(p)lrdk(o)|Nk(p)|/lrdk(p)

如果數據點p 的LOF得分小於1,表明數據點處在一個相對密集的區域,不大可能是一個異常點;如果數據點p 的LOF得分遠大於1,表明數據點跟其他點比較疏遠,很有可能是一個異常點.
別人的實現
https://github.com/damjankuznar/pylof
https://github.com/wangyibo360/pylof

注意點
LOF算法中關於局部可達密度的定義其實暗含了一個假設,即:不存在大於等於k 個重複的點。當這樣的重複點存在的時候,這些點的平均可達距離爲零,局部可達密度就變爲無窮大,會給計算帶來一些麻煩。在實際應用時,爲了避免這樣的情況出現,可以不考慮重複的情況。或者,還可以考慮給可達距離都加一個很小的值,避免可達距離等於零。
LOF 算法需要計算數據點兩兩之間的距離,造成整個算法時間複雜度爲 O(n2) 。爲了提高算法效率,FastLOF (Goldstein,2012)先將整個數據隨機的分成多個子集,然後在每個子集裏計算 LOF 值。對於那些 LOF異常得分小於等於1的,從數據集裏剔除,剩下的在下一輪尋找更合適的近鄰,並更新LOF值。

孤立森林iForest(Isolation Forest)

孤立森林基於異常值是孤立的離羣點,正常值則聚集在密度較高的區域.iForst的重點就在於,如何快速有效地判斷該點是在離羣較遠的地方還是聚集在某一塊區域.其操作就是,通過隨機切分超平面,不斷二分數據空間,直到所有的數據都被單獨地劃分到某一子空間,直覺上來說,離羣點會很快被單獨劃分到一個子空間裏,而數據聚集的區域往往需要劃分更多次,這一行爲就體現在數據點在二叉樹的高度的高低上.iForest就是基於ensemble的方法,切分多個獨立的孤立樹,最後給一個總的判斷.其優點是具有線性時間複雜度,但是不適合維度過高
更具體的可以參考機器學習-異常檢測算法(一):Isolation Forest,以及iForest (Isolation Forest)孤立森林 異常檢測 入門篇,同時這個算法在sklearn(sklearn.ensemble.IsolationForest)裏面已經有相應的實現.

itree

如何解決

  • 異常值可能是被正確記錄的,本身就反應了數據集的某種模式,需要保留下來

  • 異常值被記錄錯誤,可以刪除

  • 異常值被錯誤記錄,也可以修正

以下是一些討論和偏學術的文章資料

1.Anomaly Detection : A Survey
2.Outlier Analysis
3.KDD016-topics-outlier-and-anomaly-detection

知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 3.0 中國大陸許可協議進行許可。

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