數據科學家必備的5種離群點/異常檢測方法
什么是異常/異常值?
在統計學中,離群值是不屬于某個總體的數據點,它是一種與其他值相差甚遠的異常觀察,是一種與其他結構良好的數據不同的觀察值。
例如,您可以清楚地看到列表中的異常值:[20,24,22,19,29,184300,30,18]。當觀察值只是一組數字并且是一維時,很容易識別它,但是當你有數千個觀察值或多維值時,你需要更聰明的方法來檢測這些值。這就是本文將要介紹的內容。
為什么我們關心異常?
離群點的檢測是數據挖掘的核心問題之一。數據的不斷擴展和持續增長以及物聯網設備的普及,使我們重新思考我們處理異常的方式,以及通過觀察這些異常情況可以構建的用例。
我們現在有智能手表和腕帶,可以每隔幾分鐘檢測我們的心跳。檢測心跳數據中的異常有助于預測心臟病。交通模式的異常有助于預測事故。它還可以用來識別網絡基礎設施和服務器之間的通信瓶頸。因此,建立在檢測異常之上的用例和解決方案是無限的。
我們需要檢測異常的另一個原因是,在為機器學習模型準備數據集時,檢測所有異常值非常重要,要么去掉它們,要么分析它們,以了解為什么會有異常。
現在,讓我們從最簡單的方法開始探索5種常見的異常檢測方法。
方法1 - 標準差:
- 在統計學中,如果一個數據分布近似正態分布,那么大約68%的數據值在平均值的一個標準差內,約95%在兩個標準差內,約99.7%在三個標準差內。
因此,如果有任何數據點超過標準偏差的3倍,那么這些點很可能是異常或異常值。
讓我們看看代碼。
此代碼的輸出是一個值大于80小于-40的值的列表。請注意,我傳遞的數據集是一維數據集。現在,讓我們探索多維數據集的更高級方法。
方法2 - 箱體圖
箱體圖是通過分位數對數值數據的圖形化描述。這是一種非常簡單但有效的方法來可視化異常值。把上下胡須(whisker)看作是數據分布的邊界。任何顯示在胡須上方或下方的數據點都可以被視為異常值或異常值。下面是繪制箱體圖的代碼:
- import seaborn as sns
- import matplotlib.pyplot as plt
- sns.boxplot(data=random_data)
上面的代碼顯示下面的圖。如您所見,它認為高于75或低于-35的所有數據都是異常值。結果與上述方法1非常接近。
箱體圖剖析:
- 四分位間距(IQR)的概念用于構建箱線圖。IQR是統計學中的一個概念,通過將數據集分成四分位數來衡量統計離散度和數據可變性。
簡單地說,根據數據的值以及它們與整個數據集的比較,任何數據集或任何一組觀測值被劃分為四個定義的區間。四分位數將數據分為三個點和四個區間。
四分位間距(IQR)很重要,因為它用于定義異常值。它是第三個四分位數和第一個四分位數之間的差值(IQR=Q3-Q1)。這種情況下的異常值定義為低于(Q1−1.5x IQR)或boxplot下須或以上(Q3+1.5x IQR)或boxplot上須的觀測值。
方法3-DBScan聚類:
- DBScan是一種將數據分組的聚類算法。它也可以作為一種基于密度的異常檢測方法,無論是單維數據還是多維數據。其他的聚類算法,如k-means 和hierarchal聚類也可以用來檢測異常值。在本例中,我將向您展示一個使用DBScan的示例,但是在開始之前,讓我們先介紹一些重要的概念。DBScan有三個重要概念:
核心點:為了理解核心點的概念,我們需要關注一些用于定義DBScan作業的超參數。第一個超參數(HP)是min_samples。這只是組成集群所需的最小核心點數量。第二重要的超參數HP是eps。eps是兩個樣本被視為在同一個聚類之間的最大距離。
邊界點與核心點在同一個集群中,但距離集群中心遠得多。
其他的一切都被稱為噪聲點,那些是不屬于任何簇的數據點。它們可以是異常的或非異常的,需要進一步的研究。現在,讓我們看看代碼。
以上代碼的輸出是94。這是噪聲點的總數。SKLearn將噪波點標記為(-1)。這種方法的缺點是維數越高,精度就越低。你還需要做一些假設,比如估計eps的確切值,這可能很有挑戰性。
方法4-孤立森林:
- 孤立森林是一種無監督學習算法,屬于集成決策樹家族。這種方法不同于以往的所有方法。之前所有的方法都是試圖找到數據的正常區域,然后識別出這個定義區域之外的任何異常值或異常值。
這種方法的效果不同。它顯式地隔離異常值,而不是通過為每個數據點分配分數來分析和構造正常點和區域。它利用了一個事實,即異常是少數數據點,并且它們的屬性值與正常實例的屬性值大不相同。該算法適用于高維數據集,是一種非常有效的異常檢測方法。由于本文關注的是實現,而不是技術訣竅,因此我將不再進一步討論算法的工作原理。此文將詳細介紹它的工作原理。
現在,讓我們探索一下代碼:
此代碼將輸出數組中每個數據點的預測。如果結果為-1,則表示此特定數據點為異常值。如果結果為1,則表示數據點不是異常值。
方法5-隨機森林:
- 隨機森林(RCF)算法是亞馬遜用于檢測異常的無監督算法。它也通過關聯異常分數來工作。低分值表示數據點被視為“正常”。高值表示數據中存在異常。“低”和“高”的定義取決于應用,但通常的做法是,分數超過平均分的三個標準差被視為異常。詳細的算法可以在此文中找到。
這個算法的優點在于它可以處理非常高維的數據。它還可以處理實時流數據(內置于AWS Kinesis分析)以及離線數據。
我將在下面的視頻中更詳細地解釋這個概念:
- 這篇論文中給出了一些與孤立森林比較的性能指標。本文的結果表明,RCF比孤立森林更準確、更快速。
完整的示例代碼可以在這里找到:
- awslabs/amazon-sagemaker-examplesExample notebooks that show how to apply machine learning and deep learning in Amazon SageMaker …github.com
結論:
我們生活在一個數據以秒為單位變大的世界。如果使用不當,數據的價值會隨著時間的推移而減少。在流中在線或離線在數據集中發現異常對于識別業務中的問題或構建一個在問題發生之前就潛在地發現問題的主動解決方案,或者甚至在為ML準備數據集的探索性數據分析(EDA)階段,都是至關重要的。我希望您能發現本文有用,請告訴我您的想法在下面的評論部分思考。