Skip to content

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
Robust İstatistikler: Huber, M-Estimator, Tukey Biweight ve MCD — Outlier'a Dirençli Tahmin
🛡️ 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çimiEstimatorKarakter
(r^2)Mean (least squares)Outlier'a duyarlı
(r)
Huber lossHuber estimatorYumuşak geçiş
Tukey biweightTukey estimatorSert 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 np
from 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ırma
np.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#

ÖzellikHuberTukey Biweight
Outlier'ı ne yaparEtkisini sınırlarTamamen reddeder (
OptimizationConvexNon-convex (lokal minimum riski)
Breakdown point%50%50
HesaplamaHızlıOrta
Pratik kullanımYaygı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 üzerinde
print(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 veri
np.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 kovaryans
cov_classical = np.cov(X, rowvar=False)
mean_classical = X.mean(axis=0)
 
# MCD
mcd = 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 versiyonu
distances_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 ModeliRobust temeli
Robust PCA (Modül 9)MCD veya iteratif weighted PCA
One-Class SVM (Modül 8)Hinge loss (robust öğrenme)
Isolation ForestSample-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