Öncelikle bir ikili sınıflandırma modeli oluşturduğum soruya bakın:
http://matkafasi.com/115538/r-ile-karar-agaci-modelleri-nasil-kurulur
Oradaki kodla başlayıp devam edersek:
Tabii ki modelimiz bazı durumları doğru bildi bazılarını yanlış. Tahmin modellerinde iki tür hata vardır, "yanlış pozitif" ve "yanlış negatif". Adı üzerinde pozitif olan bir durumu yanlış tahmin ettiğimiz durumlar "yanlış pozitif", negatif olan bir durumu yanlış tahmin etmişsek "yanlış negatif". Benzer şekilde, doğru tahminlerimiz de "doğru pozitif" ve "doğru negatif" olarak ikiye ayrılır. Yukarıdaki linkte oluşturduğumuz hata matrisinde satırların tahmin, sütunların gerçek durum olduğunu hatırlayın:
* 0 satırı ile 0 sütununun kesişimi: Doğru Negatif
* 0 satırı ile 1 sütununun kesişimi: Yanlış Pozitif
* 1 satırı ile 0 sütununun kesişimi: Yanlış Negatif
* 1 satırı ile 1 sütununun kesişimi: Doğru Pozitif
Modelimizin başarını DPO (doğru pozitif oranı) ve DNO (doğru negatif oranı) sayılarıyla ölçebiliriz. Her ikisi de ne kadar yüksekse o kadar iyi. Yukarıda eşik değer olarak 0.5 seçmiştik, eğer eşik değer olarak 0.9 seçseydik bir vakayı pozitif olarak sınıflandırma ihtimalimiz düştüğünden DPO artar. Benzer şekilde 0.1 eşik değeri ile de DNO artar. Fakat genel olarak eşik değeri sağa sola kaydırmak DPO ve DNO'dan birisini arttırırken diğerini düşürür. Bunu aşağıdaki kodla hata matrislerini oluşturup DPO ve DNO oranlarını elle hesaplayarak görebilirsiniz.
for (esik in seq(from=0, to=1, by=0.1)) {
print(table(as.numeric(tahmin > esik), test[,9])) }
Buradan modelin sonuçlarını nasıl bir eşikle yorumlarsak yorumlayalım DPO ve DNO'nun birbirlerine bağlı olarak artıp azaldığını görüyoruz. DPO ve DNO değişkenlerinin ilişkisini gösteren grafiğe "Receiver Operating Curve" denir. Şimdi bu eğriyi çizelim.
# `Receiver operating curve`, `roc` olarak kisaltilir ve olusturulan modelde DPO ile DNO arasindaki iliskiyi gosterir
# Grafikte x ekseni `1-DNO`, y ekseni ise `DPO` olarak tanimlidir
hata_egrisi <- roc(test[,9], tahmin)
plot(hata_egrisi)
Yapay zeka modellerinin başarısı genellikle bu eğriyle ölçülür. Detaylarını atlayarak önemli bir yorumundan bahsedeyim. Elimizdeki tahminler 0 ile 1 arasında sayılar ve biz bu sayılar büyüdükçe vakanın diyabet olma ihtimali yüksek olarak değerlendiriyoruz. Diyelim bize iki vaka sunuldu, ve bunlardan bir tanesi diyabetli diğeri değil. Hangisi hangisidir? Bu soruya tamamen uydurarak (mesela yazı turayla) cevap verseydik ortalama 0.5 ihtimalle doğru cevap verirdik. Peki elimizdeki modelin tahminlerinden yüksek olanına diyabetli diğerine değil dersek ne kadar ihtimalle doğru sonucu buluyoruz? Bunun cevabı tam olarak yukarıda çizdirdiğimiz "receiver operating curve"ün altında kalan eşittir! Buna "area under receiver operating curve" ya da kısaca "auc" denir. Tahmin modellerinin başarısını ölçmekte kullanılan en temel araçtır, gördüğünüz gibi en uyduruk modelde 0.5, mükemmel modelde ise 1 olur. Elimizdeki model için hesaplayalım:
auc(hata_egrisi)
Hangi hasta diyabetlidir sorusuna yüzde seksen ihtimalle doğru cevap veriyoruz ve hiç tıp okumadık. Bence fena değil.
Konuyla ilgili daha az teknik bir yazı:
http://d4c.ai/2019/02/19/yz-modellerinde-basari-olcumu-auc/