Confusion matrix, Accuracy, Recall, Precision ve F1-score nedir?

Yunus Emre Demir
5 min readJul 24, 2020

--

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.

Kullanıcıların vereceği oyların tahmini

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.

Kullanıcıların verdiği oylar

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.

Tahmini + Gerçek verilen oylar

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.

Confusion Matrix, LDP: Liberal Demokrat Parti, VP: Vatan Partisi

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.

Accuracy Score

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

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 :)

f1 - score

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.

Creating a Confusion Matrix

“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.

Confusion Matrix

Şimdi bu matrisi biraz süsleyip gösterelim. Yine hazır fonksiyonlar yardımıyla görselleştirme işlemini gerçekleştiriyoruz.

Görselleştirme kodu

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.

Kaynaklar

--

--

Yunus Emre Demir
Yunus Emre Demir

No responses yet