第七章、異常值檢測(離群點挖掘)
概述:
一般來說,異常值出現有各種原因,比如數據集因為數據來自不同的類、數據測量系統誤差而收到損害。根據異常值的檢測,異常值與原始數據集中的常規數據顯著不同。開發了多種解決方案來檢測他們,其中包括基於模型的方法(Model-based method)【也叫基於統計分布Distribution的】、基於相似度的方法(proximity-based method)【基於偏差Deviation的】、基於距離的(Distance-based method)以及基於密度的方法等(density-based method)。
當考慮數據間的空間關系時,常用的檢測方法有兩種:基於圖的異常檢測(Graph-based outlier detection)、基於多維空間的異常檢測(Multi-dimensional space-based outlier detection)
異常值檢測方法的分類:
異常值檢測系統的輸出可分為兩類:一類是標記結果(labeled result),另一類是計分結果(scored result)【或者有序列表(an ordered list)】
1.統計方法和信用卡欺詐檢測
1.1 基於似然的異常值檢測算法(基於統計方法或已有模型進行檢測)
異常值定義為不屬於表示原始數據集的模型的對象,即該模型不會生成異常值。
對於特定的數據集,在可采用的精確模型之間,有很多種可用的選擇,比如高斯和泊松。如果使用錯誤的模型來檢測異常值,那么正常的數據點可能會被錯誤地識別為異常值。除了應用單一的分布模型外,分布模型的混用也很實用。
算法的核心思想:(參考風雪夜歸子:https://blog.csdn.net/u013719780/article/details/48901183)
統計學方法是基於模型的方法,即為數據創建一個模型,並且根據對象擬合模型的情況來評估它們。大部分用於離群點檢測的統計學方法都是構建一個概率分布模型,並考慮對象有多大可能符合該模型。離群點的概率定義:離群點是一個對象,關於數據的概率分布模型,它具有低概率。這種情況的前提是必須知道數據集服從什么分布,如果估計錯誤就造成了重尾分布。異常檢測的混合模型方法:對於異常檢測,數據用兩個分布的混合模型建模,一個分布為普通數據,而另一個為離群點。
聚類和異常檢測目標都是估計分布的參數,以最大化數據的總似然(概率)。聚類時,使用EM算法估計每個概率分布的參數。然而,這里提供的異常檢測技術使用一種更簡單的方法。初始時將所有對象放入普通對象集,而異常對象集為空。然后,用一個迭代過程將對象從普通集轉移到異常集,只要該轉移能提高數據的總似然(其實等價於把在正常對象的分布下具有低概率的對象分類為離群點)。(假設異常對象屬於均勻分布)。異常對象由這樣一些對象組成,這些對象在均勻分布下比在正常分布下具有顯著較高的概率。
優缺點:(1)有堅實的統計學理論基礎,當存在充分的數據和所用的檢驗類型的知識時,這些檢驗可能非常有效;(2)對於多元數據,可用的選擇少一些,並且對於高維數據,這些檢測可能性很差。
1.2 信用卡欺詐檢測
對於信用卡欺詐檢測,主要包括兩個應用,信用卡欺詐性申請和信用卡欺詐性使用。欺詐表示信用卡特定使用者的平均使用量行為異常,即用戶的交易記錄異常。
這種異常值在統計上表示信用卡被盜用,在這種情形下,異常值的一些例子包括購買率高和非常高的付款額等。
付款的地點、用戶以及背景都是數據集中的可能屬性。聚類算法是可能的解決方案。
2.基於鄰近度的方法和活動監控——涉及手機的欺詐檢測
兩種主要的基於鄰近度的方法是基於距離的和基於密度的異常值檢測算法。
基於鄰近度的方法:如果它遠離大部分點,那么這一個對象是異常的。這種方法比統計學方法更一般、更容易使用,因為確定數據集的有意義的鄰近性度量比確定它的統計分布更容易。一個對象的離群點得分由到它的k-最近鄰的距離給定。離群點得分對k的取值高度敏感。如果k太小(例如1),則少量的鄰近離群點可能導致較低的離群點得分;如果K太大,則點數少於k的簇中所有的對象可能都成了離群點。為了使該方案對於k的選取更具有魯棒性,可以使用k個最近鄰的平均距離。
優缺點:(1)簡單;(2)缺點:基於鄰近度的方法需要O(m2)時間,大數據集不適用;(3)該方法對參數的選擇也是敏感的;(4)不能處理具有不同密度區域的數據集,因為它使用全局閾值,不能考慮這種密度的變化。
基於距離算法詳細解析(2.1-2.3): https://max.book118.com/html/2018/0708/6000102233001204.shtm
2.1 NL算法
嵌套-循環(Neted-Loop,NL)算法
主要思想:假設N是數據集中的對象數,緩沖區的大小為數據集大小的B%,算法將整個緩沖區分成兩個陣列,分別稱為第一陣列和第二陣列。將數據集中的數據划分成塊,每塊大小為0.5B%。對象以塊為單位讀入陣列中,然后直接計算數據對象間的距離。第一陣列中的每個對象都有一個計時器,用於記錄對象dmin鄰域內的對象數目。某個計數器的值一旦大於一個異常的dmin鄰域內最多對象數目M=N(1-pct),該計數器停止計數。
NL算法具體步驟(摘自上面網址,因為要找,所以直接貼出來):
基於單元的算法分為兩個:FindAllOutsM算法和FindAllOutsD算法
2.2 FindAllOutsM算法
此算法適用於檢測存儲於主存的數據集中的異常。
FM算法使用了性質1~性質4(具體4個性質看上文鏈接)來檢測異常和非異常,這種檢測是以單元-單元為基礎的,而不是以對象-對象為基礎的,這樣的目的將大量不可能是異常的對象排除,只有不滿足性質4(的小性質)的單元才會進行對象-對象之間的處理。
2.3 FindAllOutsD算法
此算法適用於處理大型、磁盤數據集。
FD算法的方法是挑選對象子集保存在主存中,將磁盤上的數據頁分類。各類數據頁按一定順序讀入,從而使讀頁次數最小化。被挑選的子集由映射到白色單元中的對象構成。這些對象稱為白色對象,他們需要進行對象-對象的計算。白色單元中的對象數目被限定在M(判斷是否異常的標准)以內。
2.4 基於距離的算法(主要是上面的兩種:NL算法+基於單元的算法)
2.5 Dolphin算法(基於距離的算法)
(網絡上資料很少,暫不記錄)
2.6 活動監控和手機欺詐檢測
異常值檢測的目的就是找到源數據集中不符合標准行為的模式。這里的數據集包含呼叫記錄以及在於呼叫記錄中的模式。
對於每一個特定的領域,開發了許多特殊的算法。手機濫用稱為手機詐騙。研究的主題就是呼叫活動或者呼叫記錄。相關的屬性包括但不限於,呼叫持續時間、呼叫城市、呼叫日以及各種呼叫服務的比率。
3.基於密度的方法和入侵檢測
異常值檢測和表示(LOF、LRD等概念和應用在鏈接內有很清晰的表述): https://www.cnblogs.com/bigmonkey/p/11052019.html
這里使基於LOF(Local Reachability Density,LRD 局部可達密度)、LRD(Local Outlier Factor,LOF 局部異常因子)等概念的異常值形式化的正式定義。一般來說,異常值是指一個數據點偏離其他數據點太多以致它似乎不是來自相同的分布函數,而其他數據點都是來自相同的分布函數。
3.1 OPTICS-OF算法
該算法利用了 squeezer 算法對矩陣進行分析
相關資料沒有,論文也沒有找到將此算法的,但是找到了一個《基於OPTICS和IncLOF的異常數據挖掘算法》的論文。
有興趣可以直接百度。
3.2 高對比度子空間算法(High Contrast Subspace,HiCS)
具體參看江蘇大學的一篇碩士學位論文(講的很多,很全面):《基於高對比性子空間的離群點挖掘算法研究》
3.3 入侵檢測
4.基於聚類的方法和入侵檢測
基於聚類算法的異常值檢測技術的策略專注於數據對象和類之間的關系。
4.1 層次聚類檢測異常值
使用層次聚類算法的異常值檢測基於k最近鄰圖。
(具體參看前面的第四章的kNN算法)
4.2 基於k均值的算法
使用k均值算法的異常值檢測的具體過程:
階段一、數據准備
①應該調整目標觀測值和屬性以便提高k均值聚類算法的結果和性能的准確性。
②如果原始數據集有缺失數據,那么必須對它們處理。將EM算法估計的最大似然數據作為輸入來填補缺失數據。
階段二、異常值檢測程序
①應該確定k值以便運行k均值聚類算法。確定合適的k值要參考立方聚類准則(Cubic Clustering Criterion)的值。
②k均值聚類算法根據所確定的k值運行。完成后,專家檢查聚類結果中的外部和內部異常值。如果其他組的異常值的消除更有意義,那么他就停止該程序。如果其他組需要重新計算,那么他就再次運行k均值聚類算法,但不包括已檢測的異常值。
階段三、審查和驗證
上一階段的結果只是這個階段的一個候選結果。通過考慮領域知識,可以找到真正的異常值。
4.3 ODIN算法
使用入度數的ODIN算法(indegree number)的異常值檢測基於k最近鄰圖。
算法基本過程:設置T為入度閾值
對S進行計算生成KNN圖,對於圖內的節點i,如果節點i的入度小於閾值T,則標記此節點為離群點。
5.基於分類的方法和監控網絡服務器的性能
分類算法可以用來檢測異常值。普通的策略僅針對訓練數據集中的正常數據點訓練一類模型,沒有被該模型接受的任何數據點都表及為異常值。
5.1 OCSVM算法
一類支持向量機(One Class SVM,OCSVM)算法將輸入數據投影到高維特征空間。隨着該過程的進行,它反復發現最大間隔超平面。超平面(hyperplane)定義在高斯再生核Hilbert空間(Gaussian reproducing kernel Hilbert space)中,它最好地將訓練數據從原始數據中分離出來。
詳細算法解析(引自知乎習翔宇): https://zhuanlan.zhihu.com/p/32784067
5.2 一類最近鄰算法
該算法基於k最近鄰算法。
5.3 監控網絡服務器的性能
網絡服務器性能測試對於業務和操作系統管理是非常重要的。這些測試的形式可以是CPU使用率、網絡帶寬和存儲等。
數據集成來自各種渠道,比如基准數據、日志等。在網絡服務器監控期間出現的異常值類型有點異常值(point outlier)、下文異常值(contextual outlier)和集體異常值(collective outlier)。
6.文本的新奇性檢測、話題檢測與上下文異常值挖掘
6.1 條件異常值檢測算法(Conditional Anomaly Detection,CAD)
6.2 文本的新奇性檢測與話題檢測
異常值檢測的一個應用就是從來自報紙的文檔或者文章中找出新奇的話題。主要檢測包括觀點檢測,這主要是從很多觀點中找出一個不尋常的觀點。
7.空間中的集體異常值
給定一個數據集,如果相關數據實例的集合相對整個數據集是異常的,那么就將他們定義為集體異常值。
7.1 路徑異常值檢測算法(Route Outlier Detection,ROD)
網絡上幾乎沒有提到的
7.2 集體異常值的特征
集體異常值表示與輸入數據集相對比不正常的數據集合,作為主要特征,只有同時出現的數據集合才將是集體異常值,但該集合中的具體數據本身不會與絕對不是異常值的數據集合中的其他數據一起出現。集體異常值的另一個特征是它可以是上下文異常值。集體異常值可能是序列數據、空間數據等。
8.高維數據中的異常值檢測
高維數據中的異常值檢測有一些特征,使得它與其他異常值檢測問題不同。
8.1 Brute-Force算法(蠻力算法)
匹配效果較好,但是速度慢
參考解析: https://www.cnblogs.com/coder2012/p/3279916.html
8.2 HilOut算法
這個網上資料甚少。
在這里推薦一篇碩士論文:《高維數據空間中離群點檢測算法的研究》——吳曉燕(知網上有,可以去搜索學習一下)
這篇文章對離群點的挖掘給出了比較詳細的介紹,尤其是對高維空間的離群點挖掘作了大量介紹,也給出了一些算法,感興趣可以學習。