離群點(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代碼的實現如下:
importnumpy as npimportpandas as pd
defdetect_outliers(data,threshold=3):
mean_d=np.mean(data)
std_d=np.std(data)
outliers=[]for y indata_d:
z_score= (y - mean_d)/std_dif 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 )
這種探測離群點的方法,是箱線圖默認的方法,箱線圖提供了識別異常值/離群點的一個標準:
異常值通常被定義為小于?QL- l.5 IQR?或者 大于?Qu+ 1.5 IQR的值,QL稱為下四分位數,?Qu稱為上四分位數,IQR稱為四分位數間距,是Qu上四分位數和QL下四分位數之差,其間包括了全部觀察值的一半。
箱線圖的各個組成部分的名稱及其位置如下圖所示:
箱線圖可以直觀地看出數據集的以下重要特性:
中心位置:中位數所在的位置就是數據集的中心,從中心位置向上或向下看,可以看出數據的傾斜程度。
散布程度:箱線圖分為多個區間,區間較短時,表示落在該區間的點較集中;
對稱性:如果中位數位于箱子的中間位置,那么數據分布較為對稱;如果極值離中位數的距離較大,那么表示數據分布傾斜。
離群點:離群點分布在箱線圖的上下邊緣之外。
使用Python實現,參數sr是Series類型的變量:
defdetect_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
參考文檔: