Overfitting ve underfitting nedir? Kısa tanım

Makine öğreniminde iki sık karşılaşılan sorun overfitting (aşırı uyum) ve underfitting (eksik uyum)dur. Overfitting, bir modelin eğitim verisindeki gürültü ve ayrıntılara fazla uyup yeni verilere iyi genelleme yapamaması halidir; Ulusal bulut ve eğitim kaynaklarında bu durum sıkça vurgulanır. Underfitting ise modelin eğitim verisindeki temel kalıpları yeterince öğrenememesi, yani hem eğitim hem doğrulama üzerinde kötü performans göstermesidir.

Daha teknik bir açıklama ve örnekler için AWS'in kısa rehberine bakabilirsiniz: Aşırı uyum nedir? (AWS) ve underfitting tanımı için Ultralytics'in sözlüğü faydalıdır: Underfitting nedir? (Ultralytics).

Hızlı ayırt etme: hangi göstergelere bakmalı?

  • Eğitim ve doğrulama (veya test) metrikleri: Eğitim hatası düşük, doğrulama hatası yüksekse overfitting; her iki hata da yüksekse underfitting.
  • Öğrenme eğrileri (learning curves): Eğitim ve doğrulama skoru/hattaşı grafiklerinde model davranışını görselleştirin — EITCA Akademisi gibi kaynaklarda bu görselleştirmelerin nasıl yorumlanacağı açıklanır: Eğitim/doğrulama kaybı görselleştirme (EITCA).
  • Genelleme farkı: Eğitim skoruyla doğrulama skoru arasındaki fark genelleme probleminin büyüklüğünü gösterir.

Nasıl görselleştirilir? (temel fikir)

Tipik üç senaryo:

  • Underfitting: Hem eğitim hem doğrulama skorları düşük, model kapasitesi yetersiz.
  • İyi genelleme: Eğitim ve doğrulama skorları benzer ve yeterince yüksek.
  • Overfitting: Eğitim skoru çok yüksek, doğrulama skoru belirgin şekilde daha düşük.

Basit örnek: scikit-learn ile karar ağacı (Decision Tree)

Aşağıdaki kısa örnek, farklı model karmaşıklıkları (max_depth) ile eğitim ve doğrulama doğruluklarını karşılaştırır. Bu örnek küçük, sentetik bir veri seti kullanır ve davranışları anlamaya yöneliktir.

Python (scikit-learn):
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# Veri üretimi ve bölme
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

for depth in [1, 3, 5, None]:
clf = DecisionTreeClassifier(max_depth=depth, random_state=42)
clf.fit(X_train, y_train)
train_acc = accuracy_score(y_train, clf.predict(X_train))
val_acc = accuracy_score(y_val, clf.predict(X_val))
print('max_depth=', depth, 'train_acc=', round(train_acc,3), 'val_acc=', round(val_acc,3))

Beklenti: Çok küçük derinlikler (ör. max_depth=1) hem eğitim hem doğrulamada düşük skor gösterir (underfitting). Çok derin ağaçlar ise eğitimde neredeyse mükemmel ama doğrulamada kötü sonuç verebilir (overfitting).

Çapraz doğrulama örneği

K-fold cross-validation ile modelin farklı alt kümelerdeki tutarlılığını kontrol edin:

from sklearn.model_selection import cross_val_score
scores = cross_val_score(DecisionTreeClassifier(max_depth=5, random_state=42), X, y, cv=5, scoring='accuracy')
print('CV accuracy mean:', scores.mean())

Çapraz doğrulama, bir modelin farklı veri bölümlerinde nasıl davrandığını göstererek overfitting riskini değerlendirmeye yardımcı olur (Codelabs'ten ilgili öneriler için bkz. Codelabs Academy).

Keras ile erken durdurma (EarlyStopping) örneği

Derin öğrenme modellerinde erken durdurma, doğrulama metriği iyileşmeyi kestiğinde eğitimi durdurarak aşırı uyumu azaltır. Aşağıda minimal bir Keras örneği var:

from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([layers.Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
layers.Dense(1, activation='sigmoid')])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

es = keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=100, callbacks=[es], batch_size=32)

Erken durdurma, doğrulama kaybı belirli bir sayıda epoch boyunca azalmadığında en iyi model ağırlıklarını geri yükleyerek aşırı uyumu önlemeye yardımcı olur.

Pratik kontrol listesi: Model genelleme kontrol listesi

Aşağıdaki maddeleri her model geliştirme döngüsünde kontrol edin:

  1. Veri kalitesi ve dağılım: Eksik değerler, dengesizlikler ve sızıntı (data leakage) kontrol edildi mi?
  2. Basit bir temel model (baseline) kuruldu mu? İlke: önce basit, sonra karmaşık.
  3. Veri bölünmesi doğru mu? (train/validation/test veya CV kullanımı)
  4. Learning curve’lar çizildi mi? Eğitim ve doğrulama eğrilerinde gap izleniyor mu?
  5. Cross-validation ile model kararlılığı test edildi mi?
  6. Düzenlileştirme (L1/L2), dropout veya erken durdurma uygulandı mı?
  7. Model karmaşıklığı kontrol edildi (feature sayısı, ağaç derinliği, katman sayısı vb.)
  8. Gerekirse veri arttırma, yeni özellik mühendisliği veya daha fazla veri toplama planı var mı?
  9. Son model test setinde değerlendirildi mi? Test sonucu operasyonel beklentiyle uyumlu mu?

Aşırı uyumu azaltma: pratik yöntemler

  • Daha fazla veri: Aynı dağılımdan daha fazla örnek genelleme yeteneğini arttırır.
  • Modeli basitleştirme: Daha az parametre, daha kısa ağaç derinliği, daha küçük ağlar.
  • Düzenlileştirme: L1/L2 (ridge/lasso), dropout (sinir ağları için) gibi teknikler.
  • Erken durdurma: Doğrulama metrikleri izlenerek eğitim durdurulur.
  • Çapraz doğrulama ve en uygunlaştırma: GridSearch/RandomizedSearch ile düzenleme parametreleri seçilebilir.
  • Veri arttırma (augmentation): Görüntü veya sıra verilerinde random dönüşümler kullanmak.
  • Ensemble yöntemleri: Bagging/Boosting genelleme performansını iyileştirebilir.

Pratik çalışma akışı (adım adım)

  1. Keşif (EDA): veri dağılımı ve eksiklikleri kontrol edin.
  2. Baseline model: çok basit bir model kurun ve ölçün.
  3. Öğrenme eğrileri: farklı eğitim seti boyutları ve epoch'lar için çizim yapın.
  4. Cross-validation: model kararlılığını test edin.
  5. Regülarizasyon ve hiperparametre ayarı: kademeli olarak uygulayın.
  6. Son değerlendirme: ayrılmış test setinde nihai ölçümleri alın.

Sıkça Sorulan Sorular (SSS)

Soru: Eğitim doğruluğu yüksek ama doğrulama doğruluğu düşükse kesinlikle overfitting midir?

Cevap: Genellikle evett; eğitim ile doğrulama arasındaki belirgin fark modelin veriye fazla uyduğunu gösterir. Ancak veri sızıntısı veya hatalı veri bölünmesi gibi diğer nedenleri de kontrol etmelisiniz (ör. aynı kayıtların hem eğitim hem doğrulamada olmaması).

Soru: Underfitting durumunda ilk hangi adımı atmalıyım?

Cevap: Model kapasitesini artırmayı deneyin (daha fazla parametre, daha derin ağaç, ek feature mühendisliği) veya eğitim süresini/gözlem sayısını artırın. Ayrıca veri mühendisliği ile anlamlı özellikler eklemek çoğu zaman etkili olur.

Soru: Cross-validation overfitting'i tamamen engeller mi?

Cevap: Hayır; cross-validation modelin farklı veri alt kümelerinde nasıl davrandığını gösterir ve seçim sırasında aşırı uyumu azaltır, ancak tek başına tüm overfitting risklerini ortadan kaldırmaz. Düzenlileştirme ve doğru model seçimi ile birlikte kullanılmalıdır.

Kaynaklar ve ileri okuma

Bu yazıda kullanılan temel kavramlar ve öneriler için şu kaynaklara bakabilirsiniz:


Bu rehber uygulamaya yönelik ve genel bir kılavuzdur; her veri seti ve problem kendi özel koşullarına sahiptir. Model performansını değerlendirirken veri kalitesi, dağılım farklılıkları ve operasyonel gereksinimleri göz önünde bulundurun.