在数据处理尤其是金融、生物统计、信号处理等中极值异常值会严重影响均值、方差、相关系数等统计量的估计并扭曲模型训练。MAD法Median Absolute Deviation绝对中位差法是一种稳健的去极值方法比基于均值和标准差的方法如3σ法则对异常值更不敏感。下面为你详细介绍MAD法的原理、计算步骤、特点及实际应用。1. 什么是MAD法MAD定义为数据点与其中位数之差的绝对值的中位数。其公式为MAD median ( ∣ X i − median ( X ) ∣ ) \text{MAD}\text{median}(\big|X_i−\text{median}(X)\big|)MADmedian(​Xi​−median(X)​)核心思想先找到数据中心位置中位数然后计算每个点偏离中心的程度再取这些偏离程度的中位数作为“典型偏离尺度”。为什么用中位数中位数本身不受极值影响因此MAD也能抵抗高达50%的异常值理论上而标准差受单个极值影响会急剧增大。2. 使用MAD法去极值的步骤通常我们会将MAD转化为与标准差可比的形式然后设定一个阈值如 n 倍修正后的MAD来判断是否为极值。步骤详解步骤1计算数据的中位数M median ( X ) M \text{median}(X)Mmedian(X)步骤2计算每个数据点与中位数的绝对偏差d i ∣ X i − M ∣ d_i |X_i − M|di​∣Xi​−M∣步骤3计算这些绝对偏差的中位数即 MADMAD median ( d 1 , d 2 , . . . , d n ) \text{MAD} \text{median} (d_1,d_2,...,d_n)MADmedian(d1​,d2​,...,dn​)步骤4将MAD转换为对正态分布下标准差的稳健估计若数据服从正态分布则σ robust ≈ 1.4826 × MAD \sigma_{\text{robust}} \approx 1.4826 \times \text{MAD}σrobust​≈1.4826×MAD其中1.4826是一个比例常数因为对于正态分布MAD ≈ 0.6745 σ \text{MAD} \approx 0.6745\sigmaMAD≈0.6745σ所以σ ≈ MAD / 0.6745 ≈ 1.4826 × MAD \sigma \approx \text{MAD} / 0.6745 \approx 1.4826 \times \text{MAD}σ≈MAD/0.6745≈1.4826×MAD。步骤5设定阈值识别并处理极值常用标准温和异常值超出中位数± 2 × 1.4826 × MAD \pm 2 \times 1.4826 \times \text{MAD}±2×1.4826×MAD极端异常值超出中位数± 3 × 1.4826 × MAD \pm 3 \times 1.4826 \times \text{MAD}±3×1.4826×MAD处理方式截断Winsorizing将超出阈值的点强制设为阈值边界值。删除直接剔除异常值适用于对样本量要求不严的场景。填充用中位数或邻近值替换谨慎使用。3. 举例说明假设数据集[10, 12, 13, 15, 16, 18, 200]200是异常值中位数 M 15排序后第4个数绝对偏差[5, 3, 2, 0, 1, 3, 185]这些偏差的中位数 $ 3 \implies \text{MAD} 3$稳健标准差≈ 1.4826 × 3 ≈ 4.4478 \approx 1.4826 \times 3 \approx 4.4478≈1.4826×3≈4.4478设阈值为3 × 4.4478 ≈ 13.34 3 \times 4.4478 \approx 13.343×4.4478≈13.34则正常范围15 ± 13.34 ⟹ ( 1.66 , 28.34 ) 15 \pm 13.34 \implies (1.66, 28.34)15±13.34⟹(1.66,28.34)200超出上界被判定为极值。可截断为28.34。4. 与3σ法的对比重要特性MAD法3σ法均值±3倍标准差中心趋势度量中位数稳健均值易受极值拉动离散度量MAD稳健标准差易受极值扩大对异常值容忍度可达50%单个极值就会严重干扰适用分布任何单峰分布默认正态修正时要求数据近似正态实际效果不易漏掉真实极值不易误判正常值易把正常值判为异常当数据非正态举例数据[1,2,2,2,3,3,100]均值≈ 16.14 ≈ 16.14≈16.14标准差≈ 35.7 ⟹ 3 σ ≈ 35.7 \implies 3σ≈35.7⟹3σ区间为[ 16.14 − 107.1 , 16.14 107.1 ] [ − 91 , 123 ] [16.14-107.1, 16.14107.1] [-91, 123][16.14−107.1,16.14107.1][−91,123]几乎包含所有值漏掉100是极值。MAD中位数2MAD1稳健σ ≈ 1.48 σ≈1.48σ≈1.483倍区间≈ [ 2 − 4.45 , 2 4.45 ] [ − 2.45 , 6.45 ] ≈[2-4.45, 24.45][-2.45, 6.45]≈[2−4.45,24.45][−2.45,6.45]正确判定100为极值。5. 注意事项样本量要求当数据量很小如10时MAD可能不稳定。非对称分布MAD法假设对称性或至少使用对称阈值对于偏态分布可考虑使用调整后的阈值或分位数法。正态性假设的修正常数1.4826仅在希望MAD近似标准差时使用。若仅用于排序截断可直接使用原始MAD倍数如3倍MAD但不乘以1.4826。多模态分布需谨慎可能将部分正常模式误判为异常。6. 代码实现Python示例importnumpyasnpdefmad_based_outlier(data,threshold3,robust_sigmaTrue): data: 一维数组 threshold: 阈值倍数如3 robust_sigma: 是否转换为与标准差可比的尺度 mediannp.median(data)madnp.median(np.abs(data-median))ifrobust_sigma:madmad*1.4826# 转换为稳健标准差upper_boundmedianthreshold*mad lower_boundmedian-threshold*mad# 截断处理data_cleanednp.clip(data,lower_bound,upper_bound)# 识别异常值位置可选outliers(datalower_bound)|(dataupper_bound)returndata_cleaned,outliers# 测试datanp.array([10,12,13,15,16,18,200])cleaned,flagmad_based_outlier(data,threshold3)print(cleaned)# 输出: [10. 12. 13. 15. 16. 18. 28.34]总结MAD法去极值的核心优势在于稳健性——它不会被少量极端值带偏因此非常适合于金融收益率序列常有极端波动生物/医学数据测量误差或个体差异大任何含有未知或大量异常值的真实数据集在实际使用中建议先可视化数据分布再选择合适的阈值通常24倍MAD或24倍稳健标准差并明确最终采用截断、删除还是替换策略。