異常檢測方法-MAD
阿新 • • 發佈:2021-01-10
技術標籤:SPSS異常檢測pythonpython統計學MAD
絕對中位差(MAD,median absolute deviation)方法是近年來受到青睞的異常值檢測方法。
MAD 定義為,一元序列Xi同其中位數偏差的絕對值的中位數(deviation,偏差本身有正有負):
假定資料服從正態分佈,我們讓異常點(outliers)落在兩側的 50% 的面積裡,讓正常值落在中間的 50% 的區域裡:
正態分佈下,±0.67449包含50%面積,而1/0.67449≈1.4826,因此:
正態分佈相關請參考:python標準正態分佈表(scipy.stats)
根據Leys(2013)的描述,其原理可分為以下步驟:
- 第一,求出變數A的中位數MA;
- 第二,使用變數A減去中位數MA,得到變數B;
- 第三,對新變數B取絕對值,得到變數C;
- 第四,求出變數C的中位數MC;
- 第五,將MC校正為MAD,MAD=MC*1.4826;
- 第六,使用變數A的中位數加減MAD的倍數:MA±倍數*MAD,超出此範圍的數值被認為是異常值。
在第六步中,Leys(2013)本人建議使用2.5倍的MAD進行異常值的判斷。
使用MAD法進行異常值檢測的主要理由有兩個Leys(2013):
- 第一,MAD法對樣本量不敏感,即使是在8個樣本的資料中依然可行;
- 第二,MAD法對異常值不敏感,不會因為特殊的異常值而導致估計的嚴重偏差。
實現程式碼如下:
from scipy.stats import norm def mad_based_outlier(points, thresh=3.5): med = np.median(points, axis=0) abs_dev = np.absolute(points - med) med_abs_dev = np.median(abs_dev) # Z-score 是非標準正態分佈標準化後的 x即z=(x-u)/d,norm.ppf(0.75)=0.674。 mod_z_score = norm.ppf(0.75) * abs_dev / med_abs_dev return mod_z_score > thresh
參考:
- Leys, C., Ley, C., Klein, O., Bernard, P.,& Licata, L. (2013). Detecting outliers: Do not use standard deviationaround the mean, use absolute deviation around the median. Journal ofExperimental Social Psychology, 49(4), 764-766.