數據分析 第五篇:離群點檢測


離群點(outlier)是指和其他觀測點偏離非常大的數據點,離群點是異常的數據點,但是不一定是錯誤的數據點。確定離群點對於數據分析會帶來不利的影響,比如,增大錯誤方差、影響預測和影響正態性。

從散點圖上可以直觀地看到離群點,離群點是孤立的一個數據點;從分布上來看,離群點遠離數據集中其他數據點。

 

在數據處理過程中,檢測離斷點的方法,通常有Z-score 和 IQR。

一,Z-score方法

在介紹Z-score方法之前,先了解一下 3∂原則,這個原則有個前提條件:數據需要服從正態分布。

在3∂原則下,如果觀測值與平均值的差值超過3倍標准差,那么可以將其視為異常值。正負3∂的概率是99.7%,那么距離平均值3∂之外的值出現的概率為P(|x-u| > 3∂) <= 0.003,屬於極個別的小概率事件。

如果數據不服從正態分布,那么可以用遠離平均值的多少倍標准差來描述,倍數就是Z-score。Z-score以標准差為單位去度量某一原始分數偏離平均數的距離,它回答了一個問題:"一個給定分數距離平均數多少個標准差?",Z-score的公式是:

Z-score = (Observation — Mean)/Standard Deviation
z = (X — μ) / σ

Z-score需要根據經驗和實際情況來決定,通常把遠離標准差3倍距離以上的數據點視為離群點,也就是說,把Z-score大於3的數據點視作離群點,Python代碼的實現如下:

import numpy as np
import pandas as pd

def detect_outliers(data,threshold=3):
    mean_d = np.mean(data)
    std_d = np.std(data)
    outliers = []
    
    for y in data_d:
        z_score= (y - mean_d)/std_d 
        if np.abs(z_score) > threshold:
            outliers.append(y)
    return outliers

二,IQR方法

四分位點內距(Inter-Quartile Range,IQR),是指在第75個百分點與第25個百分點的差值,或者說,上、下四分位數之間的差,計算IQR的公式是:

IQR = Q3 − Q1 

IQR是統計分散程度的一個度量,分散程度通過需要借助箱線圖來觀察,通常把小於 Q1 - 1.5 * IQR 或者大於 Q3 + 1.5 * IQR的數據點視作離群點,探測離群點的公式是:

outliers =  value < ( Q1 - 1.5 * IQR )  or value > ( Q3 + 1.5 * IQR )

這種探測離群點的方法,是箱線圖默認的方法,箱線圖提供了識別異常值/離群點的一個標准:

異常值通常被定義為小於 Q- l.5 IQR 或者 大於 Q+ 1.5 IQR的值,QL稱為下四分位數, Qu稱為上四分位數,IQR稱為四分位數間距,是Qu上四分位數和QL下四分位數之差,其間包括了全部觀察值的一半。

箱線圖的各個組成部分的名稱及其位置如下圖所示:

箱線圖可以直觀地看出數據集的以下重要特性:

  • 中心位置:中位數所在的位置就是數據集的中心,從中心位置向上或向下看,可以看出數據的傾斜程度。
  • 散布程度:箱線圖分為多個區間,區間較短時,表示落在該區間的點較集中;
  • 對稱性:如果中位數位於箱子的中間位置,那么數據分布較為對稱;如果極值離中位數的距離較大,那么表示數據分布傾斜。
  • 離群點:離群點分布在箱線圖的上下邊緣之外。

使用Python實現,參數sr是Series類型的變量:

def detect_outliers(sr):
    q1 = sr.quantile(0.25)
    q3 = sr.quantile(0.75)
    iqr = q3-q1 #Interquartile range
    fence_low  = q1-1.5*iqr
    fence_high = q3+1.5*iqr
    outliers = sr.loc[(sr < fence_low) | (sr > fence_high)]
    return outliers

 

 

 

 

參考文檔:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM