Robust Statistics: Huber, M-Estimator, Tukey Biweight, and MCD — Outlier-Resistant Estimation
Brittleness of classical statistics to outliers; the philosophy of robust statistics; M-estimator framework; Huber and Tukey biweight loss; Minimum Covariance Determinant (MCD) for robust multivariate estimation — the hidden foundation of modern AD.
Şükrü Yusuf KAYA
28 min read
Intermediate🛡️ Sağlamlık felsefesi
Bir istatistik 'robust' ise: %20 veri bozulsa bile cevabın anlamlı şekilde değişmez. Klasik ortalama bu testten çakıyor (tek bir 10⁹ değeri tüm cevabı bozar). Medyan, Huber loss, MCD gibi araçlar bu testten geçiyor. Bu ders kursun gizli omurgalarından biri çünkü modern AD modellerinin çoğunun içinde robust tahmin yatıyor — sen farkında olmasan bile.
"Robust" Ne Demek?#
Robust istatistik üç temel kavramda ölçülür:
Breakdown Point#
Bir istatistiğin "bozulmadan dayanabileceği" kirletilmiş veri oranı.
- Mean (ortalama): Breakdown point = 0. Tek değer mean'i ∞'a çekebilir.
- Median (medyan): Breakdown point = 50%. Verinin yarısı bozuk olsa bile median çalışır.
- Trimmed mean (kırpılmış ortalama): Breakdown point = trim oranı.
Influence Function#
Bir gözlemin sonucu ne kadar etkilediği (matematiksel türevi).
- Mean: Influence function lineer — büyük outlier büyük etki.
- Median: Influence function sınırlı — outlier'ın büyüklüğü etkisini değiştirmez.
Efficiency#
Robust istatistik klasiğe göre kaç kat fazla veri ile aynı doğruluğu verir?
- Mean (normal'de): Maksimum verimli.
- Median (normal'de): ~%64 verimli (daha fazla veri ister).
Trade-off: Robustness ↔ Efficiency. Bir istatistik ne kadar robust olursa, normal durumda o kadar verimli değil. Bu trade-off'u dengelemek robust istatistiğin sanat tarafı.
M-Estimator: Robust Tahminin Çerçevesi#
Peter Huber (1964) M-estimator çatısını icat etti. "M" = maximum likelihood'ın
genelleştirmesi. Bir M-estimator şu optimizasyonu çözer:
Burada ρ (rho) bir loss function. Farklı ρ seçimleri farklı estimator verir:
| ρ(r) seçimi | Estimator | Karakter |
|---|---|---|
| (r^2) | Mean (least squares) | Outlier'a duyarlı |
| ( | r | ) |
| Huber loss | Huber estimator | Yumuşak geçiş |
| Tukey biweight | Tukey estimator | Sert kapama |
Sezgi: Loss function'ın türevi (ψ (psi) function) bir gözlemin etkisini gösterir. Mean'de ψ lineer (sınırsız); robust estimator'larda ψ sınırlanır.
Huber Loss#
Huber'in en ünlü tasarımı — yumuşak yarı-geçişli loss:
Sezgi:
- |r| ≤ k: Quadratic — küçük rezidüellere normal davranış (mean'in verimli olduğu bölge)
- |r| > k: Linear — büyük rezidüellerde mean'in agresifliği kaybolur (outlier'ı kapıya alır ama tamamen göz ardı etmez)
k seçimi: Genelde k = 1.345σ. Bu, normal dağılımda %95 verimlilik korur.
Huber Mean (M-Estimator)#
İteratif olarak çözülür:
1. Bir başlangıç tahmin (örn. median) seç 2. Rezidüleri r = x - θ hesapla 3. Huber loss minimizasyonu yapan yeni θ bul 4. Yakınsayana kadar tekrarla
python
import numpy as npfrom scipy.optimize import minimize_scalar def huber_loss(r, k=1.345): """Huber loss function.""" abs_r = np.abs(r) quadratic = 0.5 * r**2 linear = k * (abs_r - 0.5 * k) return np.where(abs_r <= k, quadratic, linear) def huber_mean(x, k=1.345, max_iter=50, tol=1e-6): """ Huber M-estimator for location (robust mean). Iteratively Reweighted Least Squares (IRLS). """ theta = np.median(x) # başlangıç for _ in range(max_iter): r = x - theta # ψ function (Huber) psi = np.where(np.abs(r) <= k, r, k * np.sign(r)) # Weight function w = np.where(np.abs(r) <= k, 1, k / np.abs(r)) theta_new = np.sum(w * x) / np.sum(w) if abs(theta_new - theta) < tol: break theta = theta_new return theta # Karşılaştırmanp.random.seed(42)data = np.concatenate([ np.random.normal(50, 5, 100), [1000, 2000, 500], # 3 büyük outlier]) print(f"Mean: {np.mean(data):.2f} ← outlier'lardan bozuldu")print(f"Median: {np.median(data):.2f} ← robust")print(f"Huber mean: {huber_mean(data):.2f} ← arası, biraz verimli")Huber M-estimator implementasyonu
Tukey Biweight (Bisquare) Loss#
Tukey biweight Huber'den daha agresif robust. Bir eşiğin üstündeki
rezidüleri tamamen sıfır ağırlık verir (Huber sınırlı azaltıyordu):
c seçimi: Genelde c = 4.685σ. Bu, normal dağılımda %95 verimlilik korur.
Huber vs Tukey#
| Özellik | Huber | Tukey Biweight |
|---|---|---|
| Outlier'ı ne yapar | Etkisini sınırlar | Tamamen reddeder ( |
| Optimization | Convex | Non-convex (lokal minimum riski) |
| Breakdown point | %50 | %50 |
| Hesaplama | Hızlı | Orta |
| Pratik kullanım | Yaygın | İleri kullanıcı |
Non-convex uyarısı: Tukey biweight non-convex olduğu için başlangıç noktasına duyarlı. Median'dan başla, multiple-start yap.
python
def tukey_biweight_mean(x, c=4.685, max_iter=50, tol=1e-6): """ Tukey biweight M-estimator for location. """ theta = np.median(x) # robust başlangıç for _ in range(max_iter): r = (x - theta) / c mask = np.abs(r) < 1 # Weight function — biweight w = np.where(mask, (1 - r**2)**2, 0.0) theta_new = np.sum(w * x) / (np.sum(w) + 1e-10) if abs(theta_new - theta) < tol: break theta = theta_new return theta # Aynı veri üzerindeprint(f"Tukey biweight: {tukey_biweight_mean(data):.2f}")Tukey biweight M-estimator
MCD: Minimum Covariance Determinant#
Şimdi çok-değişkenli robust tahmin'e geçelim. Mean ve std'nin
çok-değişkenli karşılıkları:
- Mean: Centroid (sample mean vector)
- Std: Covariance matrix
İkisi de outlier'a karşı kırılgan. Modern çok-değişkenli AD (Mahalanobis
distance, Robust PCA) robust covariance ister.
MCD Algoritması#
Rousseeuw (1984):
Tüm (\binom{n}{h}) alt kümeden (her biri h gözlemli) en küçük determinantlı kovaryansı veren alt kümeyi bul. Onun ortalama ve kovaryansı = robust tahmin.
h: Tipik h = ⌈(n + p + 1) / 2⌉, yani verinin yarısı. Bu, breakdown
point'i ~%50'ye sabitler.
Pratikte: Tüm alt kümeler exponential — pratik değil. FastMCD (Rousseeuw
& Van Driessen, 1999) algoritması bu işi yapar:
1. Rastgele h-boyutlu örneklem seç 2. Mean ve covariance hesapla 3. Tüm n gözlem için Mahalanobis distance hesapla 4. En düşük h distance'a sahip gözlemleri yeni h-set yap 5. 2-4'ü yakınsayana kadar tekrarla (genelde 5-10 adım) 6. 500 farklı başlangıçla 1-5 koş; en küçük determinant'lı sonucu seç
python
from sklearn.covariance import MinCovDet # Çok-değişkenli kirli verinp.random.seed(42)normal_data = np.random.multivariate_normal( mean=[0, 0], cov=[[1, 0.5], [0.5, 1]], size=200)outliers = np.random.uniform(low=-5, high=5, size=(30, 2))X = np.vstack([normal_data, outliers]) # Klasik kovaryanscov_classical = np.cov(X, rowvar=False)mean_classical = X.mean(axis=0) # MCDmcd = MinCovDet(support_fraction=0.7, random_state=42).fit(X)cov_robust = mcd.covariance_mean_robust = mcd.location_ print("Klasik mean:", mean_classical)print("Robust mean:", mean_robust)print("\nKlasik covariance:")print(cov_classical)print("\nRobust (MCD) covariance:")print(cov_robust) # Mahalanobis distance — robust versiyonudistances_classical = np.diag((X - mean_classical) @ np.linalg.inv(cov_classical) @ (X - mean_classical).T)distances_robust = mcd.mahalanobis(X) print(f"\nMax robust Mahalanobis distance: {distances_robust.max():.2f}")print(f"Outlier'ların robust distance'ı (top 5): {np.sort(distances_robust)[-5:]}")MCD ile robust kovaryans
MCD Neden Önemli?#
Bir bankada müşteri davranışını modellersin: aylık harcama miktarı, transaksiyon
sayısı, ortalama tutar, merchant çeşitliliği — 4 boyutlu vektör. Bu vektörlerin
ortalama davranışını ve yayılımını tanımlamak için kovaryans gerek.
Eğer eğitim setinde %2 fraud transaksiyonu varsa, klasik kovaryans bozulur —
çünkü 1-2 fraud cluster'ı dağılımı kendine çeker. Robust covariance (MCD) o
%2'yi göz ardı eder ve sağlam kovaryans verir.
Sonra Mahalanobis distance ile her gözlemin "tipik müşteri davranışından kaç
sigma uzakta" olduğunu hesaplarsın. Outlier'lar büyük distance alır.
Modül 8 (One-Class SVM, Robust Covariance) bu pipeline'ı detaylı işleyecek.
Bonus: Trimmed Mean ve Winsorized Mean#
Robust tahminin en basit versiyonu — uçtaki gözlemleri kırp veya
ört.
Trimmed Mean (%α)#
- Alt %α ve üst %α'yı sil
- Kalanın ortalamasını al
Winsorized Mean (%α)#
- Alt %α'yı min ile değiştir
- Üst %α'yı max ile değiştir
- Tümünün ortalamasını al
from scipy.stats import trim_mean data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1000] print(f"Mean: {np.mean(data):.2f}") print(f"Median: {np.median(data):.2f}") print(f"Trimmed (10%): {trim_mean(data, 0.1):.2f}") print(f"Trimmed (25%): {trim_mean(data, 0.25):.2f}")
Ne zaman? Hızlı, anlaşılır, uygulanabilir. Sektörel raporlamada (medyan
yerine "5% trimmed mean") sıklıkla kullanılır.
Modern AD'de Robust Estimator'lar Nerede?#
Robust istatistik modern AD literatürünün gizli baş aktörü:
| AD Modeli | Robust temeli |
|---|---|
| Robust PCA (Modül 9) | MCD veya iteratif weighted PCA |
| One-Class SVM (Modül 8) | Hinge loss (robust öğrenme) |
| Isolation Forest | Sample-based, dolaylı robust |
| Robust autoencoder (Modül 10) | Huber loss reconstruction |
| Deep SVDD (Modül 10) | Hypersphere etrafında robust mesafe |
| TranAD (Modül 17) | Robust attention via dropout |
| GANomaly (Modül 11) | Reconstruction + discriminator robust |
Çoğu öğrenci bu modelleri "deep" diye öğreniyor ama altında klasik robust
istatistik var. Modülü iyi anladığında, modern modeller seninle yaşar.
📜 BDDK + KVKK Compliance
BDDK denetiminde 'modelin outlier'lara karşı dayanıklı mı?' sorusu gelir. Cevabın 'Huber loss + MCD-based Mahalanobis distance kullanıyoruz' olursa denetçi memnun olur — bunlar 40+ yıllık akademik temelli, kanıtlanmış yöntemler. 'Black-box neural network' cevabı denetçiyi rahatsız edebilir.
Modül 2.5 Özeti#
Bu derste öğrendiğin:
- Breakdown point robust istatistiğin ana metriği
- M-estimator çatısı — Huber, Tukey biweight gibi varyantların ortak yapısı
- Huber loss — yumuşak geçişli, convex, üretimde yaygın
- Tukey biweight — sert kapama, non-convex, daha agresif
- MCD — çok-değişkenli robust kovaryans, modern AD'nin alt yapısı
- Trimmed / Winsorized — basit ama etkili kırpma yöntemleri
Bunlar gizli omurga. Modül 8-9'da bu temellerin üzerine inşa edeceğiz.
👉 Bir sonraki ders
Ders 2.6 — Hands-on Lab: NYC Taxi Talep Anomalisi. Şimdi bu 4 dersin yöntemini gerçek veri üzerinde sınayacağız. New York Taxi tarihi verisinin saatlik yolcu sayısı time series'i — Numenta NAB benchmark'ında klasik. 5 farklı istatistiksel detektörü (z-score, modified z, IQR, adjusted boxplot, POT) yan yana koşturup PR-AUC karşılaştırması yapacağız. Aha-momenti garantili.
Frequently Asked Questions
Normal dağılımda Huber estimator'ın asimptotik verimliliği %95 olacak şekilde seçilmiş. Daha küçük k → daha robust ama daha az verimli. Daha büyük k → mean'e yakın ama daha az robust. 1.345 endüstri standardı.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
Module 0: Course Framework & Workshop Setup
Who Is an Anomaly Detection Engineer? Differences from Fraud, SRE, Quality Engineer Roles and the Turkey Salary Landscape
Start LearningModule 0: Course Framework & Workshop Setup
Course Philosophy: Why This Path, Why This Order — The Anomaly Detection Learning River
Start LearningModule 0: Course Framework & Workshop Setup