Karmaşıklık Matrisi
Confusion Matrix
Bir sınıflandırma modelinin tahminlerini gerçek etiketlere göre dört (ya da N×N) bölmede özetleyen tablo — modelin nerede ve nasıl yanıldığını tek bakışta gösterir.
Karmaşıklık matrisi, ikili sınıflandırmada 2×2 bir tablodur: satırlar gerçek sınıfı, sütunlar tahmin edilen sınıfı gösterir. Dört köşe: TP (gerçek pozitif — doğru pozitif tahmin), TN (gerçek negatif — doğru negatif tahmin), FP (yanlış pozitif — model "var" dedi ama yokmuş), FN (yanlış negatif — model "yok" dedi ama varmış).
Bu dört sayı tüm temel metriklerin kaynağıdır. Doğruluk = (TP+TN)/toplam. Precision = TP/(TP+FP). Recall = TP/(TP+FN). Specificity = TN/(TN+FP). False positive rate = FP/(FP+TN). Bir matrise bakmak, modelin hangi tür hatayı daha çok yaptığını görmenin en hızlı yoludur.
Çok sınıflı problemde matris N×N olur. Köşegen doğru tahminler, köşegen dışı sınıfların birbirine karıştığı yerleri gösterir. "Köpek tahminlerinin %12'si kurt diye işaretlenmiş" gibi içgörüler buradan çıkar; modelin hangi sınıflarda zayıf olduğunu anlarsın.
Bir tıbbi test düşün: "Bu hasta hasta mı?" sorusuna evet/hayır cevap veriyor. Sonuçları dört kategoriye atarsın: gerçekten hasta ve test pozitif (TP), gerçekten sağlıklı ve test negatif (TN), gerçekte sağlıklı ama test pozitif (yanlış alarm — FP), gerçekten hasta ama test negatif (kaçırılmış vaka — FN). Hangi hatanın daha pahalı olduğu testin nasıl ayarlanacağını belirler. Karmaşıklık matrisi tam olarak bu dört durumun sayılmasıdır.
Bir banka kart dolandırıcılığı modelini değerlendiriyor. 100.000 işlemlik test setinde sonuçlar:
| | Tahmin: Geçerli | Tahmin: Dolandırıcılık | |--------------|------------------|------------------------| | Gerçek: Geçerli | 99.580 (TN) | 320 (FP) | | Gerçek: Dolandırıcılık | 24 (FN) | 76 (TP) |
Hızlı yorum: 100 gerçek dolandırıcılığın 76'sı yakalandı (recall %76). 396 alarm verildi, 76'sı gerçek (precision %19). Yani modelin verdiği her 5 alarmdan 1'i doğru. Bu çok düşük bir precision; müşteri hizmetleri ekibi 320 yanlış alarmı incelemek zorunda kalır. Eşik yükseltilirse precision artar ama recall düşer; iş ekibi bu trade-off'u maliyet hesabıyla seçmeli.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
from sklearn.metrics import classification_report
import matplotlib.pyplot as plt
preds = model.predict(X_test)
# Ham matris
cm = confusion_matrix(y_test, preds, labels=[0, 1])
print(cm)
# [[TN FP]
# [FN TP]]
# Görsel
disp = ConfusionMatrixDisplay(
confusion_matrix=cm,
display_labels=["geçerli", "dolandırıcılık"],
)
disp.plot(cmap="Blues", values_format="d")
plt.savefig("cm.png", dpi=150, bbox_inches="tight")
# Kapsamlı metrik raporu
print(classification_report(y_test, preds))
# Çok sınıflı: normalize edilmiş matris hangi sınıfların karıştığını gösterir
cm_norm = confusion_matrix(y_test, preds, normalize="true")- Her sınıflandırma değerlendirmesinde — temel teşhis aracı
- Modelin hangi tür hatada zayıf olduğunu görmek
- Sınıflar arası karışıklığı analiz etmek (çok sınıflı)
- Ürün ekibine model davranışını sayısal göstermek
- Universal araç; her zaman kullanılır
Normalize etmeden çok sınıflı yorumlamak
10 sınıflı bir matriste her sınıfın örnek sayısı çok farklıysa ham sayılar yanıltıcıdır. Satıra göre normalize ederek 'gerçek X sınıfının % kaçı Y diye etiketlendi' sorusuna cevap al.
Sadece köşegene bakmak
Köşegen toplamı doğruluğu verir ama hangi sınıfın hangi sınıfla karıştırıldığı asıl içgörüdür. Köşegen dışındaki en büyük hücreleri her zaman incele.
Test seti çok küçük
Az test örneğinde matris değerleri rastlantıyla oynaşır. Az veride güven aralığı hesapla; yorumu rakamların değişkenliğine göre yap.