Aşırı Öğrenme
Overfitting
Modelin eğitim verisini ezberleyip, daha önce görmediği yeni veride başarısız olması — makine öğrenmesinin en yaygın ve en tehlikeli tuzağı.
Aşırı öğrenme, modelin eğitim verisindeki örüntüleri yakalamak yerine gürültüyü ve özel durumları öğrenmesi durumudur. Eğitim doğruluğu sürekli yükselirken test doğruluğunun düşmesi klasik belirtidir. Model 'kendine fazla güveniyor' ama gerçek dünyada bu güveni karşılamaz.
Sebepler genelde şunlardır: model fazla esnek (çok parametre, çok derin ağaç, çok fazla iterasyon), eğitim verisi yetersiz veya çeşitlilikten yoksun, eğitim ile test arasındaki dağılım farkı ihmal edilmiş. Modelin "kapasitesi" verinin "söylediği örüntüden" büyükse, model gürültüyü de örüntü sanır.
Aşırı öğrenmeyi önlemenin standart araçları: doğrulama seti (validation), çapraz doğrulama (cross-validation), düzenlileştirme (regularization — L1, L2, dropout), erken durdurma (early stopping), veri artırma (data augmentation) ve daha fazla veri toplamak.
Bir öğrencinin sınav sorularını ezberlemesi gibidir. Sınıfta sorulan tüm soruları ezberlemiş, hepsini cevaplayabiliyor. Ama final sınavında soru biraz değişince donup kalıyor — çünkü konuyu anlamamış, sadece soru-cevap çiftlerini ezberlemiş. Eğitim doğruluğu %100, test doğruluğu %50. Aşırı öğrenmiş model işte tam olarak böyle bir öğrencidir.
Bir ekip 800 örneklik küçük bir veri setiyle dolandırıcılık tespit modeli eğitiyor. Random forest, max_depth sınırı yok, 1000 ağaç. Eğitim seti üzerinde %99.8 doğruluk. Heyecanla canlıya alınıyor. İlk hafta gerçek doğruluk %62. Müşteri şikayetleri patlıyor.
Sorun ortada: model 800 örneğin her detayını ezberlemişti. "Salı gecesi 23:14, restoran kategorisi, 487 TL = ham" gibi anlamsız ezberler yapmış. Yeniden eğitiliyor: max_depth=8, 100 ağaç, 5-fold cross-validation. Eğitim doğruluğu %88'e düştü ama test doğruluğu %85 kaldı. Ürün başarılı. Ezberi bırakmak doğruluğu artırdı.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import learning_curve
import numpy as np
import matplotlib.pyplot as plt
# Eğitim ve doğrulama eğrilerini çiz
train_sizes, train_scores, val_scores = learning_curve(
RandomForestClassifier(max_depth=None, n_estimators=300),
X, y, cv=5,
train_sizes=np.linspace(0.1, 1.0, 8),
scoring="f1_macro",
)
plt.plot(train_sizes, train_scores.mean(axis=1), label="Eğitim")
plt.plot(train_sizes, val_scores.mean(axis=1), label="Doğrulama")
plt.xlabel("Eğitim örneği sayısı")
plt.ylabel("F1")
plt.legend()
plt.savefig("learning_curve.png")
# Eğitim ile doğrulama arasındaki büyük makas → aşırı öğrenme
gap = train_scores.mean(axis=1)[-1] - val_scores.mean(axis=1)[-1]
print(f"Eğitim-doğrulama makası: {gap:.3f}")- Bu bir konsept; her ML iş akışında kontrol etmen gereken bir tuzak
- Bu bir konsept; sürekli takipte olunması gerekir
Sadece eğitim doğruluğuna bakmak
Eğitim seti %99 doğru → 'model harika' demek en eski hatadır. Validation/test seti olmadan model kalitesi hakkında bir şey bilemezsin.
Test setine 'biraz' bakmak
Test setine birkaç kez bakıp hiperparametre ayarlamak, test setini sızdırır. Eğitim, validation, test üçlüsünü ayır; test setine sadece final değerlendirmesinde dokun.
Cross-validation sonucu yanlış yorumlamak
Çapraz doğrulama makul bir tahmin verir ama eğitim verisinin temsil ettiği dünyanın dışına çıkıldığında hâlâ patlayabilir. Domain shift, distribution drift kontrol edilmeli.