MAD(Median Absolute Deviation)详解:最稳健的尺度估计方法

MAD(Median Absolute Deviation)详解:最稳健的尺度估计方法

一、为什么需要 MAD?

在统计分析中,我们经常需要衡量数据的"离散程度",最常见的方法是标准差:

σ=1n∑(xi−xˉ)2 \sigma = \sqrt{\frac{1}{n} \sum (x_i - \bar{x})^2} σ=n1∑(xi−xˉ)2

但是标准差有一个致命问题:

对异常值极其敏感


二、异常值的影响

考虑数据:

1,2,3,4,5\] \[1, 2, 3, 4, 5\] \[1,2,3,4,5

标准差较小。

但如果加入一个异常值:

1,2,3,4,100\] \[1, 2, 3, 4, 100\] \[1,2,3,4,100

标准差会被严重放大。


三、MAD 的定义

MAD(Median Absolute Deviation)定义为:

MAD=median(∣xi−median(x)∣) \text{MAD} = \text{median}(|x_i - \text{median}(x)|) MAD=median(∣xi−median(x)∣)

步骤:

  1. 计算中位数
  2. 计算每个点到中位数的绝对偏差
  3. 再取这些偏差的中位数

四、为什么 MAD 更稳健?

关键原因:

  • 使用 median 而不是 mean
  • 不会被极端值拉偏

五、举例说明

数据:

1,2,3,4,100\] \[1, 2, 3, 4, 100\] \[1,2,3,4,100

步骤:

  1. 中位数:

median=3 \text{median} = 3 median=3

  1. 绝对偏差:

2,1,0,1,97\] \[2, 1, 0, 1, 97\] \[2,1,0,1,97

  1. MAD:

MAD=1 \text{MAD} = 1 MAD=1

可以看到:

异常值 100 并没有影响 MAD


六、MAD 与标准差的关系

为了让 MAD 可以近似标准差,需要乘一个系数:

σ≈1.4826×MAD \sigma \approx 1.4826 \times \text{MAD} σ≈1.4826×MAD

这个系数来自正态分布的性质。


七、为什么是 1.4826?

对于标准正态分布:

median(∣Z∣)≈0.6745 \text{median}(|Z|) \approx 0.6745 median(∣Z∣)≈0.6745

所以:

10.6745≈1.4826 \frac{1}{0.6745} \approx 1.4826 0.67451≈1.4826


八、如何用 MAD 判断异常点?

在得到鲁棒尺度估计之后:

σ=1.4826⋅MAD \sigma = 1.4826 \cdot \text{MAD} σ=1.4826⋅MAD

我们可以定义一个"鲁棒标准化距离"(类似 z-score):

zi=∣xi−median(x)∣σ z_i = \frac{|x_i - \text{median}(x)|}{\sigma} zi=σ∣xi−median(x)∣


判断规则

设定阈值 (k),通常取:

  • (k = 2.5)(较宽松)
  • (k = 3)(常用)
  • (k = 3.5)(更严格)

则:

zi>k⇒xi 是异常点 z_i > k \Rightarrow x_i \text{ 是异常点} zi>k⇒xi 是异常点

zi≤k⇒xi 是正常点 z_i \le k \Rightarrow x_i \text{ 是正常点} zi≤k⇒xi 是正常点


直观理解

  • 分子:点到"数据中心"的距离(用 median)
  • 分母:整体数据的"正常波动范围"(用 MAD)

所以:

zi=这个点偏离中心的程度(按整体尺度归一化) z_i = \text{这个点偏离中心的程度(按整体尺度归一化)} zi=这个点偏离中心的程度(按整体尺度归一化)


举例说明

数据:

1,2,3,4,100\] \[1, 2, 3, 4, 100\] \[1,2,3,4,100

  1. 中位数:

m=3 m = 3 m=3

  1. MAD:

MAD=1 \text{MAD} = 1 MAD=1

  1. 转换尺度:

σ=1.4826 \sigma = 1.4826 σ=1.4826

  1. 计算异常程度:

对 100:

z=∣100−3∣1.4826≈65 z = \frac{|100 - 3|}{1.4826} \approx 65 z=1.4826∣100−3∣≈65

远大于 3,因此:

100 是异常点 100 \text{ 是异常点} 100 是异常点


一句话总结

∣xi−median∣1.4826⋅MAD>k \frac{|x_i - \text{median}|}{1.4826 \cdot \text{MAD}} > k 1.4826⋅MAD∣xi−median∣>k

即可判定为异常点。

九、Python 示例

python 复制代码
import numpy as np

def mad(x):
    med = np.median(x)
    return np.median(np.abs(x - med))

def robust_sigma(x):
    return 1.4826 * mad(x)

十、应用场景

MAD 常用于:

  • 鲁棒统计
  • 异常检测
  • 信号处理

十一、总结

MAD 是一个:

  • 简单
  • 稳健
  • 抗异常

的尺度估计方法

在任何存在异常值的场景中,都优于标准差。

相关推荐
小欣加油16 小时前
Leetcode31 下一个排列
数据结构·c++·算法·leetcode·职场和发展
keykey6.16 小时前
LSTM 文本情感分析:从词嵌入到分类实战
开发语言·人工智能·深度学习·机器学习
CyberwayTech16 小时前
赛博威线上营销费用管理咨询:重构企业电商费用管理体系
大数据·人工智能·it·赛博威·营销费用管理·营销费用管理咨询
继续商行16 小时前
Linux 内核调优与网络协议栈性能优化
人工智能
wp123_116 小时前
从Coilcraft SER2915L-472KL看国产扁线电感在AI算力等领域的机遇
人工智能
青云计划16 小时前
Agent Harness:从裸调 LLM 到生产级 Agent 的工程实践
人工智能
Database_Cool_16 小时前
AI 时代的数据仓库:阿里云 AnalyticDB MySQL 向量检索 + SQL 分析一体化实战
数据仓库·人工智能·mysql·阿里云
羊羊小栈16 小时前
停车场管理系统(基于前后端Web开发)
前端·人工智能·毕业设计·大作业
CodePlayer竟然被占用了16 小时前
开发者正在抛弃 Copilot,转向 AI Loop
人工智能
大模型最新论文速读16 小时前
06-08 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理