離羣點(outlier)是指和其餘觀測點偏離很是大的數據點,離羣點是異常的數據點,可是不必定是錯誤的數據點。肯定離羣點對於數據分析會帶來不利的影響,好比,增大錯誤方差、影響預測和影響正態性。app
從散點圖上能夠直觀地看到離羣點,離羣點是孤立的一個數據點;從分佈上來看,離羣點遠離數據集中其餘數據點。spa
在數據處理過程當中,檢測離斷點的方法,一般有Z-score 和 IQR。code
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
四分位點內距(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
這種探測離羣點的方法,是箱線圖默認的方法,箱線圖提供了識別異常值/離羣點的一個標準:
異常值一般被定義爲小於 QL - l.5 IQR 或者 大於 Qu + 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
參考文檔: