Hata Matrisi (Confusion Matrix) Python Uygulama

Daha anlaşılır olması için şöyle basit bir örnek yapalım. Aşağıda y_pred tahmin sonuçlarını, y_test gerçek sonuçları ve Sonuç ise hata matrisindeki karşılığı ifade etsin. Bu tabloyu tamamen kafadan attık. Çünkü en baştan veri oluştur, böl, eğit, test et vs. uğraşmayalım doğrudan hata matrisine dalalım istedik. TP,TN,FP,FN gibi kısaltmaların ne anlama geldiği bu yazıda açıklanmıştı. Sıkma tablomuz:

y_pred y_test Sonuç
1 1 TP
1 0 FN
1 1 TP
0 1 FP
0 0 TN
1 0 FN
0 1 FP
1 0 FN
0 0 TN
0 0 TN
0 0 TN
1 1 TP
0 0 TN
0 0 TN
1 1 TP
1 1 TP
0 0 TN
0 0 TN
1 0 FN
1 1 TP
0 0 TN
0 0 TN
0 0 TN
0 0 TN
1 0 FN
1 0 FN
0 1 FP

Hata matrisi oluşturmak için Python kodlarımız:

# Gerekli kütüphane
from sklearn import metrics
# Sıkma listemizi oluşturalım
y_pred2 = [1,1,1,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0]
y_test2 = [1,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1]
# Python listemizi pandas series yapalım
y_pred2 = pd.Series.from_array(y_pred2)
# Python listemizi pandas series yapalım
y_test2 = pd.Series.from_array(y_test2)
# Hata matrisini oluşturalım
metrics.confusion_matrix(y_test2, y_pred2)
array([[12, 6],
      [ 3, 6]])

Elde ettiğimiz hata matrisini daha iyi anlamak için aşağıda şekil üzerinde görelim:

 

Hata Matrisinden Elde Edilen Bazı Metrikler

Doğruluk (Classification Accuracy)

Doğruluk = TN + TP / TOPLAM idi. Şimdi Python ile bunu yapalım:

dogruluk = metrics.accuracy_score(y_test2, y_pred2)
dogruluk
0.66666666666666663

Hata Oranı (Error Rate / Misclassification Rate)

Hata Oranı = FN + FP / TOPLAM veya 1 - dogruluk

1 - metrics.accuracy_score(y_test2, y_pred2)
0.33333333333333337

Precision

Precision = TP/(FP+TP) idi. Yani pozitif tahminlerin toplam pozitiflere oranı.

metrics.precision_score(y_test2, y_pred2)
0.5

Bunlar gibi başka metrikler de var. Hata matrisi bize sınıflandırma modelini değerlendirmede daha genel bir çerçeve verir. Genelde accuracy kullanılır. Ancak ihtiyaca göre hangi metriğin daha önemli olduğu değişebilir. Örneğin istenmeyen e-posta filtrelemede doğru postalardan ziyade istenmeyen e-postaların ayıklanması istenir. Bu sebeple TP yerine FN önem kazanır. Yani doğruya doğru demenin anlamı yoktur. Önemli olan yanlışa yanlış demek yani FN sonuçlarını yüksek oranda doğru sınıflandırmakla olur. Yani yanlışa yanlış deme başarısı daha önemlidir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir