Neden Dayanıklı İstatistikler?
Standart sapma güçlü bir yayılım ölçüsüdür, ancak kritik bir zayıflığı vardır: aykırı değerlere aşırı duyarlılık. Tek bir uç değer SS’yi dramatik biçimde şişirebilir ve tipik değişimin yanıltıcı bir resmini çizebilir.
Dayanıklı istatistikler, aykırı değerlerin etkisine direnen yayılım ölçüleri sağlar ve ölçüm hataları, veri giriş yanlışlıkları veya gerçek uç durumların yaygın olduğu gerçek dünya verileri için gereklidir.
Örnek: Aykırı Değer Etkisi
Kırılma Noktası
Medyan Mutlak Sapma (MAD)
MAD en dayanıklı yayılım ölçüsüdür. Medyandan mutlak sapmaların medyanını hesaplar:
MAD Formülü
Medyanı Bulun
Sapmaları Hesaplayın
MAD’ı Bulun
MAD’ı σ tahmin etmek için ölçeklendirme: Normal dağılımlı veriler için MAD ≈ 0,6745 × σ. MAD’dan SS tahmin etmek için 1,4826 ile çarpın:
MAD’dan SS Tahmini
Neden 1,4826?
Çeyrekler Arası Açıklık (IQR)
IQR, verilerin orta %50’sinin yayılımını ölçer—25. ve 75. yüzdelik dilimler arasındaki aralık:
IQR Formülü
IQR yaygın olarak kullanılır çünkü anlaşılması basit, kutu grafiklerinde görselleştirmesi kolay ve yaygın “1,5×IQR kuralı”nın aykırı değer tespiti için temelini oluşturur.
IQR’ı σ tahmin etmek için ölçeklendirme: Normal veriler için IQR ≈ 1,35 × σ. IQR’dan SS tahmin etmek için:
IQR’dan SS Tahmini
Dayanıklı Ölçüleri Karşılaştırma
Standart Sapma
MAD
IQR
Dayanıklı İstatistikleri Ne Zaman Kullanmalı?
- Keşifsel analiz: Aykırı değerlerin var olup olmadığını bilmediğinizde dayanıklı ölçülerle başlayın
- Veri kalitesi sorunları: Veriler hata veya ölçüm sorunları içerebiliyorsa
- Kalın kuyruklu dağılımlar: Uç değerlerin beklendiği durumlarda (finansal getiriler, sigorta talepleri)
- Küçük örneklemler: Az sayıda gözlem nedeniyle aykırı değerlerin orantısız etkiye sahip olduğu durumlarda
- Aykırı değer tespiti: Aykırı değerleri tespit etmek için SS kullanmak döngüsel bir mantıktır; bunun yerine IQR veya MAD kullanın
Uygulama Örnekleri
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}")