Sz
Sıfır Gecikme
veri bilimi · türkçe
Tümüİnteraktif📖Rehber🛠Araç📊Vaka💼Kariyer🐍Playground📚Öğren
Hakkımda
Ana sayfainteraktif

Bias-variance trade-off: ezber mi, genelleme mi?

2026 · 10 dakika okuma

Modelini eğitim verisinde test ediyorsun, %99 doğruluk. Harika. Sonra gerçek veriye bakıyorsun — %60. Ne oldu?

Model eğitim verisini ezberledi. Öğrenmedi, ezberledi. Bu overfitting. Ve tam tersi de var: model çok basit, hiçbir şeyi yakalayamıyor — underfitting. İkisi arasındaki denge bias-variance trade-off'tur.

Önce dene

Polinom derecesini kaydır. Yeşil noktalar train verisi, kırmızı halkalar test verisi. Mor eğri modelinin öğrendikleri. Kesik gri çizgi ise gerçek fonksiyon — modelin bulmaya çalıştığı şey.

1
Train Hatası
0.047
Test Hatası
0.044
Durum
Underfitting
── gerçek fonksiyontraintestmodel

Derece 1: Model çok basit. Hem train hem test hatası yüksek — yüksek bias. Gerçek fonksiyonun karmaşıklığını yakalayamıyor.

Bias nedir, variance nedir?

Bias azaldıkça variance artar, variance azaldıkça bias artar. İkisini aynı anda minimize edemezsin — bu trade-off'tur. Hedef: her ikisinin toplamını minimize etmek.

Pratikte nasıl tanırsın?

from sklearn.model_selection import learning_curve
import numpy as np
import matplotlib.pyplot as plt

train_sizes, train_scores, val_scores = learning_curve(
    model, X, y,
    train_sizes=np.linspace(0.1, 1.0, 10),
    cv=5, scoring='neg_mean_squared_error'
)

train_err = -train_scores.mean(axis=1)
val_err   = -val_scores.mean(axis=1)

plt.plot(train_sizes, train_err, label='Train hatası')
plt.plot(train_sizes, val_err,   label='Validation hatası')
plt.xlabel('Eğitim örnek sayısı')
plt.ylabel('MSE')
plt.legend()
plt.show()

# Underfitting: her iki hata da yüksek ve birbirine yakın
# Overfitting:  train hatası düşük, val hatası çok yüksek
# İyi model:    her ikisi de düşük ve birbirine yakın

Çözümler

from sklearn.linear_model import Ridge, Lasso
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline

# Yüksek dereceli polinom + Ridge regularizasyon
# Overfitting'i kontrol altında tutar
model = Pipeline([
    ('poly', PolynomialFeatures(degree=8)),
    ('ridge', Ridge(alpha=1.0))  # alpha arttıkça regularizasyon güçlenir
])

model.fit(X_train, y_train)
print(f"Train R²: {model.score(X_train, y_train):.3f}")
print(f"Test  R²: {model.score(X_test, y_test):.3f}")

Cross-validation: overfitting'i yakalamak için

Test setini bir kez kullanırsın ve model ona göre ayarlanmaya başlar. Cross-validation, veriyi birden fazla parçaya bölerek daha güvenilir bir performans tahmini verir.

from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X, y, cv=5, scoring='r2')
print(f"CV skorları: {scores}")
print(f"Ortalama: {scores.mean():.3f} ± {scores.std():.3f}")

# Düşük ortalama → underfitting
# Yüksek std      → overfitting (kararsız model)
# İdeal: yüksek ortalama, düşük std

Sıradaki yazıda zaman serisi analizi: trend, mevsimsellik ve Python'da Prophet ile basit tahmin.

💬 Yorumlar