Confusion matrix, Accuracy, Recall, Precision ve F1-score nedir?
Confusion Matrix, yapılan bir deney/uygulama sonucunun gerçeğe ne derece yakın olduğunu görmemizi sağlayan bir matristir.
Örnek üzerinden anlatılırsa daha iyi anlaşılır. Mesela 20 haneli bir köyde yakın zamanda bir seçim olacak. Bu seçime Vatan partisi (VP) ve Liberal Demokrat Parti (LDP) olmak üzere 2 parti katılacak. Bizim bir seçim tahmin büromuz olduğunu varsayalım. Büromuz gelecek seçim için: kullanıcıların seçimde verecekleri oyları aşağıdaki gibi tahmin etti.
Bu tahminleri yaptıktan 10 gün sonra seçim günü gelip çatıyor. Seçmenler oylarını aşağıdaki gibi kullanıyorlar.
Biz büro olarak acaba kaç seçmenin sonucunu doğru tahmin ettik diye bakmak için Confusion Matrixi kullanıyoruz. İlk önce yukarıdaki iki tabloyu alt alta koyalım.
Yanlış tahmin ettiklerimiz kırmızı, doğru tahmin ettiklerimiz ise yeşil ile boyandı. Bu resme daha kolay bakmak ve üzerinden bazı analizler yapabilmek için bu sonucu aşağıdaki gibi bir Confusion Matrix ile ifade ediyoruz.
Matrisi Okumak
1. Toplam seçmen sayısı : 8+4+3+5 = 20 : Tablodaki toplam sayı.
Actual : Seçmenin verdiği gerçek oy.
2. Actual + LDP = bu satırın tamamı : 8 + 4= 12 kişi gerçekte LDP’ye oy vermiş.
3. Actual + VP = bu satırın toplamı : 3 + 5 = 8 kişi gerçekte VP’ye oy vermiş.
Predicted : Bizim tahmin ettiğimiz sonuçlar.
4. Predicted + LDP = Bu sütunun tamamı : 8 + 3 = 11 kişi LDP’ ye oy verecek diye tahmin etmişiz.
5. Predicted + LDP = Bu sütunun tamamı : 4 + 5 = 9 kişi VP’ye oy verecek diye tahmin etmişiz.
6. True : Doğru tahmin👍, False : Yanlış tahmin👎
7. Positive, Negative bilgisi, Predicted sütunlarını temsil ediyor
8. 1. Satır, 1. Sütun = True Positive(TP) = Seçimde 8 kullanıcı LDP’ye oy vermiş. Ben de önceden bu 8 Kullanıcı için LDP’ye oy verecek diye tahmin etmişim => Yani doğru(true) tahmin etmişim. 😊👏
9. 1. Satır, 2. Sütun = False Negatif = Seçimde 4 kullanıcı daha LDP’ye oy vermiş. Ben ise önceden bu 4 kullanıcının VP’ye oy verecek diye tahmin etmişim => Yani yanlış(false) tahmin etmişim. 😥
10. 2. Satır, 1. Sütun = False Positive = Seçimde 3 kullanıcı VP’ye oy vermiş. Ben ise önceden bu 4 kullanıcı için LDP’ye oy verecek diye tahmin etmişim => Yani yanlış(Yanlış) tahmin etmişim. 😥
11. 2. Satır, 2. Sütun = True Negatif = Seçimde 5 kullanıcı daha VP’ye oy vermiş. Ben de önceden bu 5 Kullanıcı için, VP’ye oy verecek diye tahmin etmişim => Yani doğru(True) tahmin etmişim.😊👏
Matrisin satır ve sütun okumaları böyleyken bura 4 yeni kavramdan daha bahsedeceğim bunlar : Accuracy, Recall, Precision ve F1-score. Bu metrikler ise oluşturulan confusion matrix üzerinden amaca uygun sonuçlar üretmek için kullanılmaktadır.
Accuracy Score
Toplamda, yapılan doğru tahmin oranını bulmak için kullanılır. Yani seçimin geneli için kaç seçmene ait doğru tahminde bulunduğumun oranını verir. (Matristeki köşegenin tümüne oranıdır) Formülü aşağıdaki gibidir.
Sonuç olarak ben TP+TN= 8+5= 13 seçmen için doğru tahmin yapmışım. 7 seçmen için ise yanlış tahmin yapmışım. Başarı oranım ise 13/20 = 0.65 ((TP+TN)/Hepsi) Bu hesaba Accuracy score denilmektedir.
Precision
LDP için yapılan doğru tahminlerin tüm LDP tahminlerine oranıdır. Yani toplamda 11 kişi için LDP’ye oy verecek demişim ama bunlardan sadece 8 tanesi LDP’ye oy vermiş. Dolayısıyla LDP’ye ait oyları %72'lik bir başarı ile tahmin etmişim.
Precision, False Positive’in maliyetlerinin yüksek olduğununda bakılması gereken önlemli bir parametredir. Ne demek istiyorum? Örneğin, e-posta spam algılama uygulamamız var. E-posta spam algılamasında False Positive, spam olmayan bir e-postanın spam olarak tanımlandığı (yanlış tahmin etmişiz) anlamına gelir. Eğer spam algılama modeli için Precision değeri çok düşükse, kullanıcının önemli e-postaları spam olarak işaretleneceği için bunları kaybedebilir. (60 e-posta var. Ben 30 unu spam işaretledim ve sildim. Gerçekte de bu e-postaların spam sayısı 10 ise 10/30= 0.34 bir spam tahmini yapmış olurum ve 20 önemli e-postam silinir.😱)
Recall
LDP için tutturulan tahminin, tüm gerçek LDP oylarına oranıdır.
Recall, False Negative’in maliyetlerinin yüksek olduğununda bakılması gereken önlemli bir parametredir. Mesela gerçekte 30 Covid-19'lu hasta var. Bunların 15 tanesini doğru olarak tespit ettin. 15 tanesini ise sağlıklı diye evine gönderdin (False Negative) yani yanlış tahmin ettin. Buradaki başarı 15/30=0.5 : geçmiş olsun tüm şehri Covid-19'ladın. 😱😱
F1- score
F1- score, Precision ve Recall arasında bir denge aramamız gerektiğinde veya eşit olmayan bir sınıf dağılımı(yanlış sınıflandırılmış vakıa sayısı çok) olduğunda kullanmak için iyi bir yöntem olduğu söyleniyor aşağıdaki kaynaklarda :)
Confusion Matrixin Görselleştrilmesi
Görselleştirme işlemini Python’da bulunan hazır kütüphaneler vasıtasıyla gerçekleştireceğiz. “secim_true” isimli değişken seçmenlerin verdiği gerçek oyları temsil etmektedir. “secim_pred” isimli değişken ise bizim tahmin ettiğimiz sonuçları bir liste halinde tutmaktadır. Bu iki listeyi “confusion_matrix” adlı hazır fonksiyona gönderdik.
“confusion_matrix” fonksiyonu, gerçek ve tahmin sonuçlardan (iki listeden) bir confusion matrix üretti ve bunu “data” adlı değişkene atadı. Artık “data” adlı değişkenimizde bir confusion matrix var. Görüntüsü aşağıdaki gibi.
Şimdi bu matrisi biraz süsleyip gösterelim. Yine hazır fonksiyonlar yardımıyla görselleştirme işlemini gerçekleştiriyoruz.
Yukarıdaki kodun çıktısı da aşağıdaki gibidir.
Not: Görüldüğü gibi Confusion Matrix’i oluşturacak olan listenin elemanları illa sayılardan oluşacak(-1 0 1 vs.) diye bir zorunluluk yok.