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

離羣點(outlier)是指和其餘觀測點偏離很是大的數據點,離羣點是異常的數據點,可是不必定是錯誤的數據點。肯定離羣點對於數據分析會帶來不利的影響,好比,增大錯誤方差、影響預測和影響正態性。app

從散點圖上能夠直觀地看到離羣點,離羣點是孤立的一個數據點;從分佈上來看,離羣點遠離數據集中其餘數據點。spa

 

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

一,Z-score方法

Z-score以標準差爲單位去度量某一原始分數偏離平均數的距離,它回答了一個問題:"一個給定分數距離平均數多少個標準差?",Z-score的公式是:blog

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

使用Python來實現,一般把遠離標準差3倍距離以上的數據點視爲離羣點,也就是說,把Z-score大於3的數據點視做離羣點:數據分析

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的公式是:pandas

IQR = Q3 − Q1 io

IQR是統計分散程度的一個度量,分散程度經過須要藉助箱線圖來觀察,一般把小於 Q1 - 1.5 * IQR 或者大於 Q3 + 1.5 * IQR的數據點視做離羣點,探測離羣點的公式是:class

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

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

異常值一般被定義爲小於 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

 

 

參考文檔:

相關文章
相關標籤/搜索