大數(shù)據(jù)文摘授權(quán)轉(zhuǎn)載自數(shù)據(jù)派THU
無論是通過識別錯誤還是主動預(yù)防,檢測異常值對任何業(yè)務(wù)都是重要的。本文將討論五種檢測異常值的方法。
在統(tǒng)計學中,異常值是指不屬于某一特定群體的數(shù)據(jù)點。它是一個與其他數(shù)值大不相同的異常觀測值,與良好構(gòu)成的數(shù)據(jù)組相背離。例如,你可以清楚地看到這個列表里的異常值:[20, 24, 22, 19, 29, 18, 4300, 30, 18].當觀測值僅僅是一堆數(shù)字并且是一維時,很容易識別出異常值。但是,當你有成千上萬的觀測值或者是多維度時,你將需要更多巧妙的辦法來檢測出那些異常值。這就是本文要討論的內(nèi)容。
檢測異常值是數(shù)據(jù)挖掘中的核心問題之一。數(shù)據(jù)的不斷擴增和持續(xù)增長,以及物聯(lián)網(wǎng)設(shè)備的普及,讓我們重新思考處理異常值的方法和觀測異常值構(gòu)建出的用例。
現(xiàn)在,我們擁有可以檢測我們每分鐘心跳的智能手表和腕帶。檢測心跳數(shù)據(jù)的異常值有助于預(yù)防與心臟有關(guān)的疾病。交通模式中的異常值有助于預(yù)防交通事故。異常值檢測還可以用來識別服務(wù)器之間的網(wǎng)絡(luò)基礎(chǔ)設(shè)施和通信的障礙。因此,建立在檢測異常值之上的用例和解決方案是無窮無盡的。另一個我們需要檢測異常值的理由是,當為機器學習模型準備數(shù)據(jù)集時,檢測出所有的異常值,并且要么移除它們、要么分析它們來了解它們最初存在的原因是非常重要的。現(xiàn)在,讓我們從最簡單的方法開始探索5種常用的檢測異常值的方法。方法1——標準差:
在統(tǒng)計學中,如果一個數(shù)據(jù)分布式近似正態(tài)分布,那么大約68%的數(shù)據(jù)值在平均值的前后一個標準差范圍內(nèi),大約95%的數(shù)據(jù)值在平均值的前后兩個標準差范圍內(nèi),大約99.7%的數(shù)據(jù)值在前后三個標準差的范圍內(nèi)。因此,如果你有任何出現(xiàn)在三個標準差范圍外的數(shù)據(jù)點,那么那些點就極有可能是異常值。這段代碼的輸出結(jié)果是一個大于80或小于-40的數(shù)據(jù)列表。請注意,我傳入的數(shù)據(jù)集是一個一維數(shù)據(jù)集?,F(xiàn)在,讓我們探索對于多維數(shù)據(jù)集的更高級的方法。方法2——箱線圖:
箱線圖是指通過分位數(shù)對數(shù)值型數(shù)據(jù)的圖形化描述。這是一種非常簡單但有效的異常值可視化方法。把上下須觸線看作數(shù)據(jù)分布的上下邊界。任何出現(xiàn)在下須觸線下面或上須觸線上面的數(shù)據(jù)點可以被看作異常值。下面是繪制箱線圖的代碼:上面的代碼輸出如下的箱線圖。如你所見,它把大于75或小于-35的值看作異常值。這個結(jié)果非常接近上述的方法1得到的結(jié)果。四分位差的概念是被用來繪制詳細圖的。四分位差是統(tǒng)計學中通過將數(shù)據(jù)集劃分為四分位數(shù)來衡量統(tǒng)計離散度和數(shù)據(jù)可變性的概念。簡而言之,任何數(shù)據(jù)集或任何觀察值的集合被劃分為四個基于數(shù)據(jù)值和它們與整個數(shù)據(jù)集比較后而定義的區(qū)間。四分位數(shù)是指將數(shù)據(jù)分為三個點和四個區(qū)間的數(shù)據(jù)點。四分位差是重要的,因為它用于定義異常值。它是第三個四分位數(shù)和第一個四分位數(shù)的差(IQR=Q3-Q1). 這種情況下的異常值被定義為低于(Q1-1.5IQR)或低于箱線圖下須觸線或高于(Q3+1.5IQR)或高于箱線圖上須觸線的觀測值。方法3——DBScan集群:
DBScan是一種用于將數(shù)據(jù)分組的集群算法。它也是一種被用于基于密度的對于一維或多維數(shù)據(jù)的異常檢測方法。其他的像k-均值和層次聚類的集群算法也可以用于檢測異常值。在本例中,我將向您展示一個使用DBScan的案例。但是在開始前,我們先介紹一些重要概念。DBScan有三個重要概念:Source:https://stackoverflow.com/questions/34394641/dbscan-clustering-what-happens-when-border-point-of-one-cluster-is-considered上述代碼的輸出值是94。這是噪聲點的總數(shù)。SKLearn將噪聲點標記為(-1)。這種方法的缺陷就是維數(shù)越高,精度越低。你還需要做出一些假設(shè),比如估計eps的正確值,而這可能是有挑戰(zhàn)性的。方法4——孤立森林
孤立森林是一種無監(jiān)督學習的算法,屬于集成決策樹族。這種方法與前面的方法都不同。所有前面的方法是試圖找到數(shù)據(jù)的正常區(qū)域,然后將所定義區(qū)域外的任何值視為異常值。這種方法的工作原理不同。它是明確的孤立異常值,而不是通過給每個點分配一個分數(shù)來構(gòu)造正常的點和區(qū)域。它充分利用了這樣一個事實:異常值只占數(shù)據(jù)的小部分,并且它們有與正常值大不相同的屬性。該算法適用于高維數(shù)據(jù)集,并且被證實是一種非常有效的檢測異常值的方法。由于本文關(guān)注的是實現(xiàn)而不是專門知識,我將不深入探討算法的工作原理。但是,這篇文章中涵蓋了它的所有工作原理細節(jié)。https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf該代碼將輸出數(shù)組中每個數(shù)據(jù)點的預(yù)測值。如果結(jié)果是-1,那意味著這個特定的數(shù)據(jù)點是一個異常值。如果結(jié)果是1,那么意味著該數(shù)據(jù)點不是異常值。方法5——Robust Random Cut Forest
Robust Random Cut Forest算法是亞馬遜用于檢測異常值的無監(jiān)督算法。它也通過關(guān)聯(lián)異常分數(shù)來工作。低的分數(shù)值表示數(shù)據(jù)點是“正常的”,高的值表示數(shù)據(jù)中存在異常?!暗汀焙汀案摺钡亩x取決于應(yīng)用,但是一般實踐表明,超過平均值三個標準差的分數(shù)被認為是異常的。算法的細節(jié)可以在這篇文章中找到。http://proceedings.mlr.press/v48/guha16.pdf這個算法的最大優(yōu)勢是它可以處理非常高維的數(shù)據(jù)。它還可以處理實時數(shù)據(jù)流(內(nèi)置AWS Kinesis Analytics)和離線數(shù)據(jù)。https://youtu.be/yx1vf3uapX8該算法的論文給出了一些與孤立森林相比較的性能標準。論文結(jié)果表明,RCF比孤立森林更加準確和快速。amazon-sagemaker-examples/introduction_to_amazon_algorithms/random_cut_forest at master · aws/amazon-sagemaker-examples · GitHub我們生活在一個數(shù)據(jù)每分每秒都在劇增的世界里。數(shù)據(jù)如果使用不當便會隨著時間貶值。于在線數(shù)據(jù)流或離線數(shù)據(jù)集中發(fā)現(xiàn)異常值,對于識別商業(yè)中的問題或主動構(gòu)建解決方案以在問題發(fā)生之前發(fā)現(xiàn)潛在的問題,或者甚至在探索性數(shù)據(jù)分析(EDA)階段為ML準備數(shù)據(jù)集都是至關(guān)重要的。我期待你能認為本文有用,在下面的評論區(qū)讓我知道你的想法。5 Ways to Detect Outliers/Anomalies That Every Data Scientist Should Know (Python Code) https://towardsdatascience.com/5-ways-to-detect-outliers-that-every-data-scientist-should-know-python-code-70a54335a623