為什麼需要穩健統計?
標準差是一個強大的離散程度量度,但它有一個致命弱點:對離群值極度敏感。一個極端值就能大幅膨脹標準差,導致對典型變異程度的描述失真。
穩健統計提供了能抵抗離群值影響的離散程度量度,對於現實世界中常見的測量誤差、資料輸入錯誤或真實極端案例的資料來說,這些方法不可或缺。
範例:離群值的影響
崩潰點
中位數絕對偏差 (MAD)
MAD 是最穩健的離散程度量度。它計算各值與中位數之差的絕對值的中位數:
MAD 公式
計算中位數
計算偏差
計算 MAD
用 MAD 估計 σ: 對於常態分配的資料,MAD ≈ 0.6745 × σ。要從 MAD 估計標準差,乘以 1.4826:
由 MAD 估計標準差
為什麼是 1.4826?
四分位距 (IQR)
IQR 衡量中間 50% 資料的離散程度——即第 25 百分位數和第 75 百分位數之間的範圍:
IQR 公式
IQR 被廣泛使用,因為它簡單易懂、在盒鬚圖中容易視覺化,而且是常見的“1.5×IQR 規則”偵測離群值的基礎。
用 IQR 估計 σ: 對於常態資料,IQR ≈ 1.35 × σ。要從 IQR 估計標準差:
由 IQR 估計標準差
穩健量度比較
標準差
MAD
IQR
何時使用穩健統計
- 探索性分析: 當你不知道是否存在離群值時,先從穩健量度開始
- 資料品質問題: 當資料可能包含錯誤或測量問題時
- 重尾分配: 當極端值是預期中的(金融報酬、保險理賠)
- 小樣本: 當離群值因觀測值少而有過大影響時
- 離群值偵測: 用標準差來偵測離群值是循環論證;改用 IQR 或 MAD
實作範例
import numpy as np
from scipy import stats
def mad(data):
"""Median Absolute Deviation"""
median = np.median(data)
return np.median(np.abs(data - median))
def scaled_mad(data):
"""MAD scaled to estimate SD (for normal data)"""
return 1.4826 * mad(data)
def iqr(data):
"""Interquartile Range"""
return np.percentile(data, 75) - np.percentile(data, 25)
# Compare on data with outlier
data = [10, 12, 11, 13, 12, 11, 100]
print(f"SD: {np.std(data, ddof=1):.2f}")
print(f"MAD: {mad(data):.2f}")
print(f"Scaled MAD: {scaled_mad(data):.2f}")
print(f"IQR: {iqr(data):.2f}")