
本文介紹了數(shù)據(jù)科學(xué)家必備的五種檢測(cè)異常值的方法。
無(wú)論是通過(guò)識(shí)別錯(cuò)誤還是主動(dòng)預(yù)防,檢測(cè)異常值對(duì)任何業(yè)務(wù)都是重要的。本文將討論五種檢測(cè)異常值的方法。

圖來(lái)源于Will Myers在Unsplash上的拍攝
什么是異常值?

在統(tǒng)計(jì)學(xué)中,異常值是指不屬于某一特定群體的數(shù)據(jù)點(diǎn)。它是一個(gè)與其他數(shù)值大不相同的異常觀(guān)測(cè)值,與良好構(gòu)成的數(shù)據(jù)組相背離。例如,你可以清楚地看到這個(gè)列表里的異常值:[20, 24, 22, 19, 29, 18, 4300, 30, 18].當(dāng)觀(guān)測(cè)值僅僅是一堆數(shù)字并且是一維時(shí),很容易識(shí)別出異常值。但是,當(dāng)你有成千上萬(wàn)的觀(guān)測(cè)值或者是多維度時(shí),你將需要更多巧妙的辦法來(lái)檢測(cè)出那些異常值。這就是本文要討論的內(nèi)容。為什么我們要關(guān)注異常值?
檢測(cè)異常值是數(shù)據(jù)挖掘中的核心問(wèn)題之一。數(shù)據(jù)的不斷擴(kuò)增和持續(xù)增長(zhǎng),以及物聯(lián)網(wǎng)設(shè)備的普及,讓我們重新思考處理異常值的方法和觀(guān)測(cè)異常值構(gòu)建出的用例。現(xiàn)在,我們擁有可以檢測(cè)我們每分鐘心跳的智能手表和腕帶。檢測(cè)心跳數(shù)據(jù)的異常值有助于預(yù)防與心臟有關(guān)的疾病。交通模式中的異常值有助于預(yù)防交通事故。異常值檢測(cè)還可以用來(lái)識(shí)別服務(wù)器之間的網(wǎng)絡(luò)基礎(chǔ)設(shè)施和通信的障礙。因此,建立在檢測(cè)異常值之上的用例和解決方案是無(wú)窮無(wú)盡的。另一個(gè)我們需要檢測(cè)異常值的理由是,當(dāng)為機(jī)器學(xué)習(xí)模型準(zhǔn)備數(shù)據(jù)集時(shí),檢測(cè)出所有的異常值,并且要么移除它們、要么分析它們來(lái)了解它們最初存在的原因是非常重要的。現(xiàn)在,讓我們從最簡(jiǎn)單的方法開(kāi)始探索5種常用的檢測(cè)異常值的方法。方法1——標(biāo)準(zhǔn)差:
在統(tǒng)計(jì)學(xué)中,如果一個(gè)數(shù)據(jù)分布式近似正態(tài)分布,那么大約68%的數(shù)據(jù)值在平均值的前后一個(gè)標(biāo)準(zhǔn)差范圍內(nèi),大約95%的數(shù)據(jù)值在平均值的前后兩個(gè)標(biāo)準(zhǔn)差范圍內(nèi),大約99.7%的數(shù)據(jù)值在前后三個(gè)標(biāo)準(zhǔn)差的范圍內(nèi)。
因此,如果你有任何出現(xiàn)在三個(gè)標(biāo)準(zhǔn)差范圍外的數(shù)據(jù)點(diǎn),那么那些點(diǎn)就極有可能是異常值。
讓我們看看代碼。


這段代碼的輸出結(jié)果是一個(gè)大于80或小于-40的數(shù)據(jù)列表。請(qǐng)注意,我傳入的數(shù)據(jù)集是一個(gè)一維數(shù)據(jù)集?,F(xiàn)在,讓我們探索對(duì)于多維數(shù)據(jù)集的更高級(jí)的方法。方法2——箱線(xiàn)圖:

箱線(xiàn)圖是指通過(guò)分位數(shù)對(duì)數(shù)值型數(shù)據(jù)的圖形化描述。這是一種非常簡(jiǎn)單但有效的異常值可視化方法。把上下須觸線(xiàn)看作數(shù)據(jù)分布的上下邊界。任何出現(xiàn)在下須觸線(xiàn)下面或上須觸線(xiàn)上面的數(shù)據(jù)點(diǎn)可以被看作異常值。下面是繪制箱線(xiàn)圖的代碼:
上面的代碼輸出如下的箱線(xiàn)圖。如你所見(jiàn),它把大于75或小于-35的值看作異常值。這個(gè)結(jié)果非常接近上述的方法1得到的結(jié)果。

四分位差的概念是被用來(lái)繪制詳細(xì)圖的。四分位差是統(tǒng)計(jì)學(xué)中通過(guò)將數(shù)據(jù)集劃分為四分位數(shù)來(lái)衡量統(tǒng)計(jì)離散度和數(shù)據(jù)可變性的概念。簡(jiǎn)而言之,任何數(shù)據(jù)集或任何觀(guān)察值的集合被劃分為四個(gè)基于數(shù)據(jù)值和它們與整個(gè)數(shù)據(jù)集比較后而定義的區(qū)間。四分位數(shù)是指將數(shù)據(jù)分為三個(gè)點(diǎn)和四個(gè)區(qū)間的數(shù)據(jù)點(diǎn)。
四分位差是重要的,因?yàn)樗糜诙x異常值。它是第三個(gè)四分位數(shù)和第一個(gè)四分位數(shù)的差(IQR=Q3-Q1). 這種情況下的異常值被定義為低于(Q1-1.5IQR)或低于箱線(xiàn)圖下須觸線(xiàn)或高于(Q3+1.5IQR)或高于箱線(xiàn)圖上須觸線(xiàn)的觀(guān)測(cè)值。

方法3——DBScan集群:
DBScan是一種用于將數(shù)據(jù)分組的集群算法。它也是一種被用于基于密度的對(duì)于一維或多維數(shù)據(jù)的異常檢測(cè)方法。其他的像k-均值和層次聚類(lèi)的集群算法也可以用于檢測(cè)異常值。在本例中,我將向您展示一個(gè)使用DBScan的案例。但是在開(kāi)始前,我們先介紹一些重要概念。DBScan有三個(gè)重要概念:核心點(diǎn):為了理解核心點(diǎn),我們需要訪(fǎng)問(wèn)一些用于定義DBScan工作的超參數(shù)。第一個(gè)超參數(shù)是最小值樣本(min_samples)。這只是形成集聚的核心點(diǎn)的最小數(shù)量。第二重要的超參數(shù)eps,它是兩個(gè)被視為在同一個(gè)簇中的樣本之間的最大距離。
邊界點(diǎn):是與核心點(diǎn)在同一集群的點(diǎn),但是要離集群中心遠(yuǎn)得多。

Source:https://stackoverflow.com/questions/34394641/dbscan-clustering-what-happens-when-border-point-of-one-cluster-is-considered

上述代碼的輸出值是94。這是噪聲點(diǎn)的總數(shù)。SKLearn將噪聲點(diǎn)標(biāo)記為(-1)。這種方法的缺陷就是維數(shù)越高,精度越低。你還需要做出一些假設(shè),比如估計(jì)eps的正確值,而這可能是有挑戰(zhàn)性的。方法4——孤立森林
孤立森林是一種無(wú)監(jiān)督學(xué)習(xí)的算法,屬于集成決策樹(shù)族。這種方法與前面的方法都不同。所有前面的方法是試圖找到數(shù)據(jù)的正常區(qū)域,然后將所定義區(qū)域外的任何值視為異常值。這種方法的工作原理不同。它是明確的孤立異常值,而不是通過(guò)給每個(gè)點(diǎn)分配一個(gè)分?jǐn)?shù)來(lái)構(gòu)造正常的點(diǎn)和區(qū)域。它充分利用了這樣一個(gè)事實(shí):異常值只占數(shù)據(jù)的小部分,并且它們有與正常值大不相同的屬性。該算法適用于高維數(shù)據(jù)集,并且被證實(shí)是一種非常有效的檢測(cè)異常值的方法。由于本文關(guān)注的是實(shí)現(xiàn)而不是專(zhuān)門(mén)知識(shí),我將不深入探討算法的工作原理。但是,這篇文章中涵蓋了它的所有工作原理細(xì)節(jié)。https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf
該代碼將輸出數(shù)組中每個(gè)數(shù)據(jù)點(diǎn)的預(yù)測(cè)值。如果結(jié)果是-1,那意味著這個(gè)特定的數(shù)據(jù)點(diǎn)是一個(gè)異常值。如果結(jié)果是1,那么意味著該數(shù)據(jù)點(diǎn)不是異常值。方法5——Robust Random Cut Forest
Robust Random Cut Forest算法是亞馬遜用于檢測(cè)異常值的無(wú)監(jiān)督算法。它也通過(guò)關(guān)聯(lián)異常分?jǐn)?shù)來(lái)工作。低的分?jǐn)?shù)值表示數(shù)據(jù)點(diǎn)是“正常的”,高的值表示數(shù)據(jù)中存在異常?!暗汀焙汀案摺钡亩x取決于應(yīng)用,但是一般實(shí)踐表明,超過(guò)平均值三個(gè)標(biāo)準(zhǔn)差的分?jǐn)?shù)被認(rèn)為是異常的。算法的細(xì)節(jié)可以在這篇文章中找到。http://proceedings.mlr.press/v48/guha16.pdf
這個(gè)算法的最大優(yōu)勢(shì)是它可以處理非常高維的數(shù)據(jù)。它還可以處理實(shí)時(shí)數(shù)據(jù)流(內(nèi)置AWS Kinesis Analytics)和離線(xiàn)數(shù)據(jù)。我可以在如下的視頻里更加詳細(xì)的解釋這個(gè)概念:https://youtu.be/yx1vf3uapX8
該算法的論文給出了一些與孤立森林相比較的性能標(biāo)準(zhǔn)。論文結(jié)果表明,RCF比孤立森林更加準(zhǔn)確和快速。
amazon-sagemaker-examples/introduction_to_amazon_algorithms/random_cut_forest at master · aws/amazon-sagemaker-examples · GitHub
結(jié)論
我們生活在一個(gè)數(shù)據(jù)每分每秒都在劇增的世界里。數(shù)據(jù)如果使用不當(dāng)便會(huì)隨著時(shí)間貶值。于在線(xiàn)數(shù)據(jù)流或離線(xiàn)數(shù)據(jù)集中發(fā)現(xiàn)異常值,對(duì)于識(shí)別商業(yè)中的問(wèn)題或主動(dòng)構(gòu)建解決方案以在問(wèn)題發(fā)生之前發(fā)現(xiàn)潛在的問(wèn)題,或者甚至在探索性數(shù)據(jù)分析(EDA)階段為ML準(zhǔn)備數(shù)據(jù)集都是至關(guān)重要的。我期待你能認(rèn)為本文有用,在下面的評(píng)論區(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顧偉嵩,中國(guó)科學(xué)院大學(xué)網(wǎng)絡(luò)空間安全專(zhuān)業(yè)研究生。對(duì)數(shù)據(jù)科學(xué)領(lǐng)域充滿(mǎn)好奇,渴望探索未知世界。課余時(shí)間喜歡踢足球、游泳。愿意挑戰(zhàn)新事物,結(jié)交新朋友,一起進(jìn)步,一起成長(zhǎng)。
工作內(nèi)容:需要一顆細(xì)致的心,將選取好的外文文章翻譯成流暢的中文。如果你是數(shù)據(jù)科學(xué)/統(tǒng)計(jì)學(xué)/計(jì)算機(jī)類(lèi)的留學(xué)生,或在海外從事相關(guān)工作,或?qū)ψ约和庹Z(yǔ)水平有信心的朋友歡迎加入翻譯小組。
你能得到:定期的翻譯培訓(xùn)提高志愿者的翻譯水平,提高對(duì)于數(shù)據(jù)科學(xué)前沿的認(rèn)知,海外的朋友可以和國(guó)內(nèi)技術(shù)應(yīng)用發(fā)展保持聯(lián)系,THU數(shù)據(jù)派產(chǎn)學(xué)研的背景為志愿者帶來(lái)好的發(fā)展機(jī)遇。
其他福利:來(lái)自于名企的數(shù)據(jù)科學(xué)工作者,北大清華以及海外等名校學(xué)生他們都將成為你在翻譯小組的伙伴。
點(diǎn)擊文末“閱讀原文”加入數(shù)據(jù)派團(tuán)隊(duì)~
轉(zhuǎn)載須知
如需轉(zhuǎn)載,請(qǐng)?jiān)陂_(kāi)篇顯著位置注明作者和出處(轉(zhuǎn)自:數(shù)據(jù)派ID:DatapiTHU),并在文章結(jié)尾放置數(shù)據(jù)派醒目二維碼。有原創(chuàng)標(biāo)識(shí)文章,請(qǐng)發(fā)送【文章名稱(chēng)-待授權(quán)公眾號(hào)名稱(chēng)及ID】至聯(lián)系郵箱,申請(qǐng)白名單授權(quán)并按要求編輯。
發(fā)布后請(qǐng)將鏈接反饋至聯(lián)系郵箱(見(jiàn)下方)。未經(jīng)許可的轉(zhuǎn)載以及改編者,我們將依法追究其法律責(zé)任。