なぜ頑健統計が必要か?
標準偏差は強力な散布度の指標ですが、致命的な弱点があります。外れ値に対する極端な敏感さです。たった1つの極端な値がSDを劇的に膨らませ、典型的なばらつきについて誤った印象を与える可能性があります。
頑健統計は外れ値の影響に耐える散布度の指標を提供します。測定エラー、データ入力ミス、あるいは本物の極端なケースが存在する実世界のデータにおいて不可欠です。
例:外れ値の影響
ブレークダウンポイント
中央絶対偏差(MAD)
MADは最も頑健な散布度の指標です。中央値からの絶対偏差の中央値を計算します。
MADの公式
中央値を求める
偏差を計算する
MADを求める
MADをσの推定に換算: 正規分布データでは、MAD ≈ 0.6745 × σ。MADからSDを推定するには1.4826を掛けます。
MADからのSD推定
なぜ1.4826なのか?
四分位範囲(IQR)
IQRはデータの中央50%の散らばり—第25パーセンタイルと第75パーセンタイルの間の範囲—を測定します。
IQRの公式
IQRは理解しやすく、箱ひげ図で視覚化しやすく、外れ値検出の一般的な「1.5×IQRルール」の基礎となるため、広く使われています。
IQRをσの推定に換算: 正規データでは、IQR ≈ 1.35 × σ。IQRからSDを推定するには:
IQRからのSD推定
頑健指標の比較
標準偏差
MAD
IQR
頑健統計を使うべき場面
- 探索的分析: 外れ値が存在するかわからない場合、頑健な指標から始める
- データ品質に問題がある場合: エラーや測定上の問題を含む可能性があるデータ
- 裾の重い分布: 極端な値が予想される場合(金融リターン、保険金請求額)
- 小さな標本: 観測数が少ないため外れ値の影響が大きくなる場合
- 外れ値検出: SDを使って外れ値を検出するのは循環論法。代わりに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}")