Confusion matrix: eşik dansı
2026 · 10 dakika okuma
Modelinin doğruluğu %95. Harika görünüyor, değil mi? Şimdi şunu söyleyeyim: veri setinin %95'i negatif sınıf. Model her şeye "negatif" dese %95 accuracy alır. Hiçbir şey öğrenmeden.
İşte bu yüzden accuracy tek başına yeterli değil. Confusion matrix, modelin gerçekte ne yaptığını gösterir.
Önce dene
Senaryo: bir hastalık testi. 50 hasta, 50 sağlıklı kişi var. Eşik değerini kaydır, TP/FP/TN/FN ve türetilen metriklerin nasıl değiştiğini izle.
Eşik: 0.50 — Precision: 98%, Recall: 94%. Kesinliği öne çıkaran ayar — spam filtresine benzer.
4 hücre ne anlama geliyor?
- TP (True Positive): Hasta, hasta dendi. Doğru yakalandı.
- TN (True Negative): Sağlıklı, sağlıklı dendi. Doğru bırakıldı.
- FP (False Positive): Sağlıklı ama hasta dendi. Tip-1 hata, yanlış alarm.
- FN (False Negative): Hasta ama sağlıklı dendi. Tip-2 hata, kaçırılan vaka.
Kanser taramasında FN'den kaçınmak kritik — hastayı kaçırmak ölümcül olabilir. Spam filtresinde ise FP'den kaçınmak önemli — önemli maili spam'e atmak kullanıcıyı kaybettirir.
Metrikler türetilir
from sklearn.metrics import classification_report, confusion_matrix y_true = [1, 1, 0, 1, 0, 0, 1, 0] y_pred = [1, 0, 0, 1, 1, 0, 1, 0] cm = confusion_matrix(y_true, y_pred) print(cm) # [[TN, FP], # [FN, TP]] print(classification_report(y_true, y_pred)) # precision recall f1-score support
Hangi metriği ne zaman kullanırım?
- Accuracy: Dengeli veri setinde iyi. Dengesiz veri setinde yanıltıcı.
- Precision: "Pozitif dediğimde ne kadar haklıyız?" — yanlış alarm maliyetli olduğunda.
- Recall: "Tüm pozitifleri ne kadar yakaladık?" — kaçırmak maliyetli olduğunda.
- F1: Precision ve Recall'un harmonik ortalaması. İkisini birlikte optimize etmek istediğinde.
- AUC-ROC: Eşikten bağımsız, modelin genel ayrıştırma gücü. 0.5 rastgele, 1.0 mükemmel.
ROC eğrisi ne anlatır?
ROC eğrisi, tüm olası eşik değerleri için TPR (Recall) ve FPR ilişkisini gösterir. Demoda mor noktanın eşikle birlikte eğri üzerinde hareket ettiğini gördün. AUC (Area Under Curve) bu eğrinin altındaki alan — modelin eşikten bağımsız genel performansı.
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
auc = roc_auc_score(y_true, y_scores)
plt.plot(fpr, tpr, label=f'AUC = {auc:.3f}')
plt.plot([0,1], [0,1], '--', color='gray')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Eğrisi')
plt.legend()
plt.show()Sıradaki yazıda Pandas'ta en çok yanlış bilinen 7 şey: yıllarca gördüğüm yaygın ama yanlış pattern'ler.