Önerdiğimin Kaçı Doğru, Kaçını Kaçırdım?
Bir öneri kutusu, bir arama sonucu, bir spam filtresi: hepsi aynı iki soruyla yargılanır. Önerdiğimin kaçı gerçekten doğruydu? Ve var olan doğruların kaçını yakalayabildim? Birincisinin adı precision, ikincisinin adı recall. Bu yazıda makine öğrenmesinin ve arama motorlarının yetmiş yıllık bu iki temel kavramını en baştan, balık ağından kanser testine örneklerle kuruyoruz; sonra gerçek bir öneri sisteminin karnesine bağlıyoruz.
· ~23 dk okuma · İnteraktif
İçindekiler
İki soru Dört kutu: karışıklık matrisi Doğruluk neden yalan söyler Kaçınılmaz takas Hangi hata daha pahalı? Tek sayı: F1 Sıra da önemli: @k Öneri sistemine uygulamak Nereden geliyor? Sık yapılan hatalar Nereden başlamalı Sonuçİki soru
Bir göle ağ atıyorsun. Sudaki balıklar aradığın şeyler; taşlar, otlar, çöp ise istemediklerin. Ağı çekince iki ayrı soru sorabilirsin, ve bunlar aynı soru değildir:
- Ağımdaki her şeyin kaçı gerçekten balıktı? Bu, precision'dır (kesinlik). Gürültüyü ölçer: ne kadar çöp topladım?
- Göldeki tüm balıkların kaçını yakalayabildim? Bu, recall'dır (anma, geri çağırma). Kaçırmayı ölçer: kaç balık elimden kaçtı?
Dikkat: bu ikisini ayrı ayrı, bedavaya tavan yapabilirsin. Hiçbir şey önermezsen, önerdiğin o tek şey doğru çıkarsa precision'ın yüzde 100 olur (ama neredeyse hiçbir şey yakalamadın). Her şeyi önerirsen recall'ın yüzde 100 olur (ama yarısı çöptür). İşte tam bu yüzden ikisi her zaman birlikte okunur. Tek başına biri seni kandırır.1
Aynı iki soruyu bir öneri sistemine taşıyalım, çünkü bu serinin çıkış noktası buydu. Diyelim bir not uygulamasında "bununla ilgili notlar" öneriyorsun. Kullanıcıya 8 ilgili not gösterdin:
Aynı dilin iki yüzü
Precision: Gösterdiğim 8 notun kaçı gerçekten ilgiliydi? 6 ise, precision = 6/8 = %75. "Önerilerimin ne kadarı isabet?"
Recall: Bu not için aslında ilgili olan 20 not varken ben 6'sını yüzeye çıkardım, yani recall = 6/20 = %30. "Var olan doğruların ne kadarına ulaşabildim?"
Aynı sistem; yüksek precision (gösterdiğim temiz), düşük recall (çoğunu kaçırdım). İkisi farklı şeyler söyler, ve hangisinin önemli olduğu duruma göre değişir.
Bu yazının sözü şu: precision ile recall, bir arama ya da öneri sisteminin ABC'sidir. Önce sezgiyle kuracağız (ağ, spam, kanser testi), sonra dört kutuluk küçük bir tabloya, oradan da gerçek bir karneye bağlayacağız. Hiç formül korkusu yok; her formülün yanında Türkçesi olacak.
Dört kutu: karışıklık matrisi
Bir sistemin her kararı, dört kutudan birine düşer. "Spam mı, değil mi?" diyen bir filtreyi düşün. Filtre "spam" diyebilir ya da "temiz" diyebilir; gerçek de spam ya da temizdir. Dört olası birleşim, dört isim:1
- TP (doğru pozitif): spam'e "spam" dedi. Doğru yakalama.
- FP (yanlış pozitif): temiz e-postaya "spam" dedi. Yanlış alarm. Precision'ı düşüren şey budur.
- FN (yanlış negatif): spam'e "temiz" dedi. Kaçan balık. Recall'ı düşüren şey budur.
- TN (doğru negatif): temize "temiz" dedi. Doğru geçiş.
İki metrik de bu kutulardan çıkar, ve aralarındaki tek fark neye böldükleridir:
Precision, işaretlediğin her şeye böler. Recall, gerçekte doğru olan her şeye böler. Pay ikisinde de aynı: doğru yakaladıkların.
Aşağıdaki örneği kurcala: aynı matris, üç farklı soru. Üstteki düğmeyle metriği değiştir; matris hangi kutuları topladığını sana göstersin.
Aynı matris, üç soru
Örnek: 100 e-posta gelmiş, 20'si gerçekten spam. Filtre 18 tanesine "spam" demiş; bunların 15'i isabetli.
Gördüğün gibi precision üst satırı (işaretlediklerini) tarar, recall ise sol sütunu (gerçek spam'leri) tarar. Aynı 15 doğru yakalama, iki farklı paydaya bölününce iki farklı hikâye anlatır: filtre işaretlediğinde genelde haklı (%83 precision) ama yine de her beş spam'den birini kaçırıyor (%75 recall).
Doğruluk neden yalan söyler
"Neden sadece doğruluk (accuracy) oranına bakmıyoruz?" diye sorabilirsin. Doğruluk gayet doğal görünür: tüm kararların kaçı isabetliydi, yani (TP + TN) bölü hepsi. Sorun şu ki, aradığın şey nadir olduğunda doğruluk utanmadan yalan söyler.
Klasik örnek tüyler ürpertici: nadir bir kanseri yakalamaya çalışan bir model düşün. Eğer model herkese körü körüne "sağlıksın" derse, hastaların hiçbirini yakalamadığı halde, vakaların çok büyük kısmı zaten sağlıklı olduğu için kâğıt üstünde yüzde 76 doğruluk tutturabilir, ve klinik olarak tamamen işe yaramazdır.2 Aynı tuzak dolandırıcılıkta da var: işlemlerin yüzde 2'si sahteyse, "hiçbiri sahte değil" diyen bir model yüzde 98 doğrulukla parlar ve tek bir dolandırıcıyı bile yakalamaz.
Doğruluğun kör noktası
Google'ın ders notlarındaki ifadeyle: bir sınıf çok nadir göründüğünde, diyelim zamanın %1'inde, "her zaman negatif" diyen bir model %99 doğruluk alır, "işe yaramaz olmasına rağmen".2 Precision ve recall tam burada parlar: ikisi de o devasa "doğru negatif" yığınını (herkese doğru şekilde 'sağlıklı' demek) görmezden gelir ve merceği umursadığın nadir şeye, yani gerçek pozitiflere çevirir. "Hep sağlıklı" diyen modelin recall'ı anında 0 çıkar ve maskesi düşer.
Bilgi getiriminde durum daha da uç: bir arama motoru için belgelerin çoğu zaman yüzde 99,9'undan fazlası ilgisizdir. "Hepsine ilgisiz de" diyen bir sistem neredeyse kusursuz doğruluk alır ama kullanıcı için "tamamen tatmin edicilikten uzaktır".1 İşte bu yüzden arama ve nadir-olay dünyası doğruluğu bırakıp precision ile recall'a geçti. Doğruluk, dengeli bir dünyada iyi bir özettir; dengesiz bir dünyada bir reklam panosudur.
Kaçınılmaz takas
Çoğu sistem sana net bir "evet/hayır" vermez; bir skor verir ("bu e-posta %73 ihtimalle spam"). Bu skoru karara çevirmek için bir eşik koyarsın: eşiğin üstü "spam", altı "temiz". Ve işin sırrı şu: eşiği oynatmak, precision ile recall'ı birbirine karşı takas eder.
Balık ağına geri dönelim, çünkü metafor birebir oturuyor. Eşiği düşürmek, ağı genişletmek demektir: daha çok şey yakalarsın (recall ↑) ama içeri çöp de dolar (precision ↓). Eşiği yükseltmek, ağı daraltmak demektir: sadece en emin olduklarını alırsın (precision ↑) ama çoğunu kaçırırsın (recall ↓). Aşağıdaki simülatörde eşik çizgisini kaydır ve ikisinin nasıl ters yönde hareket ettiğini kendi gözünle gör.
Ağı genişlet, ağı daralt
24 e-posta, soldan sağa "spam skoru"na göre dizili. Üst sıra gerçek spam, alt sıra gerçek e-posta. Eşiğin sağındakilere "spam" diyorsun.
Bu ters ilişki neredeyse her zaman vardır; birini iyileştirmek çoğu kez diğerini bozar.3 O yüzden "en iyi eşik" diye soyut bir şey yoktur. Sadece, senin uygulamanda hangi hatanın daha pahalı olduğuna göre seçtiğin bir çalışma noktası vardır. Bir sonraki bölüm tam olarak bunu soruyor.
Hangi hata daha pahalı?
İki klasik örnek, terazinin iki ucunu mükemmel anlatır. Havalimanı güvenliği: bir silahı kaçırmak (yanlış negatif) felakettir; masum bir yolcuyu durdurup üstünü aramak (yanlış alarm) sadece can sıkıcıdır. O yüzden tarayıcı bilerek bol bol öter, yani recall'a oynar. Spam filtresi: gelen kutuna bir spam sızması (yanlış negatif) sinir bozar ama önemli bir iş teklifinin çöp klasörüne düşmesi (yanlış alarm) kabul edilemez. O yüzden filtre temkinlidir, yani precision'a oynar.4
Yani "doğru" metriği seçmek bir matematik problemi değil, bir maliyet kararıdır: hangi hata daha çok acıtıyor? Birkaç senaryoda kendini dene.
Bu durumda hangi hatayı önce azaltırsın?
Tıpta recall'a bir başka isim verilir: duyarlılık (sensitivity). Bir tarama testinin "hastayı kaçırmama" becerisidir, ve hayat kurtardığı için çoğu taramada öncelik odur. Aynı şekilde precision'ın tıptaki/istatistikteki adı pozitif kestirim değeridir (PPV). İsimler alanına göre değişir; soru hep aynıdır.
Tek sayı: F1
Bazen tek bir özet sayı gerekir (mesela iki modeli kıyaslarken). Precision ile recall'ı tek sayıya sıkıştıran metriğin adı F1, ve özelliği harmonik ortalama olmasıdır:
F1 = 2 · (P · R) / (P + R)
Neden sıradan (aritmetik) ortalama değil de harmonik? Çünkü harmonik ortalama dengesizliği cezalandırır: küçük olan değere yapışır. Yani F1'i yükseltmenin tek yolu, ikisinin de iyi olmasıdır. Bölüm başındaki "her şeyi öner" hilesini hatırla: recall = 1, precision = 0,05 olsun. Aritmetik ortalama 0,525 verir (yazı-tura gibi, yanıltıcı derecede yüksek). Harmonik ortalama (F1) ise yaklaşık 0,095 verir, yani "bu kötü" der ve haklıdır.3 Manning'in ders kitabı bunu sert bir örnekle koyar: her belgeyi getirip aritmetik ortalamada "yüzde 50" toplayabilirsin, ama aynı stratejinin harmonik ortalaması asgari değerine yakındır.1
İki hatanın maliyeti eşit değilse, F1'i eğebilirsin: bu genelleşmiş haline F-beta denir. β > 1 recall'a ağırlık verir (örn. F2: kaçırmanın pahalı olduğu kanser, sızma tespiti); β < 1 precision'a ağırlık verir (örn. F0.5: yanlış alarmın pahalı olduğu spam, dolandırıcılık).5 Bu fikrin kökü 1979'a, van Rijsbergen'in "etkinlik" ölçüsüne kadar uzanır; harmonik ortalamayı "azalan marjinal etkinlik" gibi iktisadi bir gerekçeyle savunur.5
| Metrik | Türkçesi / sorusu | Ne zaman güvenilir | Ne zaman yanıltır |
|---|---|---|---|
| Accuracy | Doğruluk: tüm kararların kaçı isabet? | Sınıflar dengeliyse | Nadir bir şey ararken (kanser, dolandırıcılık) |
| Precision | İşaretlediğimin kaçı doğru? | Yanlış alarmın pahalı olduğu yerde | Tek başına: hiç önermeyip "%100" yapabilirsin |
| Recall | Doğruların kaçını yakaladım? | Kaçırmanın pahalı olduğu yerde | Tek başına: her şeyi önerip "%100" yapabilirsin |
| F1 | İkisinin dengeli ortalaması | Tek sayıyla kıyas gerekince | İki hatanın maliyeti çok farklıysa (F-beta kullan) |
Sıra da önemli: Precision@k
Şimdiye kadar sistemin bir küme döndürdüğünü varsaydık. Ama arama motorları ve öneri sistemleri sıralı bir liste döndürür. Burada metrikler küçük ama önemli bir ek kazanır: bir k kesme noktası.
- Precision@k: ilk k sonucun kaçı ilgili? (İlk 10 sonuçtan 6'sı ilgiliyse, Precision@10 = %60.)
- Recall@k: ilk k sonuç, var olan tüm ilgililerin kaçını kapsıyor? (8 ilgili varken ilk 10'da 5'ini yakaladıysan, Recall@10 = %62,5.)
k'yi ürünün vitrinine göre seçersin. Ana sayfanda "Senin İçin 5 Öneri" kutusu varsa Precision@5 ve Recall@5 anlamlıdır; 20 ürünlük bir tanıtım e-postası gönderiyorsan @20.6 Daha çok öğe önermek (k: 10 → 50) genelde recall'ı artırır (daha çok keşif) ama precision'ı düşürür (daha çok dağınıklık). Bu, bir ürün kararıdır: keşif odaklı bir akış recall'a, "şunu da al" vitrini precision'a yaslanır.
Bir sonraki bölümün tohumu
Precision@k'nin sinsi bir kör noktası var: ilk k içindeki sırayı umursamaz. 1. sıradaki ilgili sonuç ile 10. sıradaki ilgili sonuç onun gözünde aynıdır. Oysa kullanıcı için kesinlikle aynı değil. Sıralamayı ve "ne kadar ilgili"yi hesaba katmak için dereceli alaka ve nDCG gerekiyor: serinin 2. bölümünün tam konusu. (Sıralı dünyada bir ara durak da var: birden çok sorgu üzerinden ortalama alan MAP, yani Mean Average Precision; ilgili sonuçları yukarı taşımayı ödüllendirir ve TREC'te 1994'ten beri başrol metriklerden biridir.6)
Öneri sistemine uygulamak
Şimdi merceği bu serinin çıkış noktasına, gerçek bir öneri sisteminin karnesine çevirelim. Her kullanıcı (ya da her öğe) için iki küme düşün: senin önerdiğin K öğe, ve kullanıcının gerçekte ilgili bulduğu öğeler. Precision@K "önerdiğim K şeyin kaçını gerçekten istedi", Recall@K "isteyebileceği her şeyin kaçını yüzeye çıkardım" sorusunu sorar. Bunları kullanıcı başına hesaplar, sonra ortalamasını alırsın.
Ama burada sinsi bir soru var: "doğru" olan ne, kim söylüyor? Yani ground-truth (gerçek değer, altın standart) nereden geliyor? Öneri dünyasında bunun birkaç kaynağı var:
- Açık (explicit) geri bildirim: bir eşik koyarsın, mesela "kullanıcının 4 veya 5 yıldız verdiği her film ilgili sayılır".
- Örtük (implicit) geri bildirim: tıklama, izleme, satın alma, sepete ekleme gibi davranışları ilgi sinyali sayarsın.
Örtük veride sinsi bir tuzak var: yalnızca kullanıcıya gösterdiğin şeylerle etkileşimi görürsün. Gösterilmemiş ama aslında ilgili olan öğeler, veride "ilgisiz" gibi görünür. Bu yüzden gerçek recall'ı çevrimdışı ölçmek özellikle zordur; elindeki "doğru" listesi eksiktir.
Buna bağlı olarak iki değerlendirme dünyası var. Çevrimdışı (offline): geçmiş veriyi ikiye bölersin (genelde zamana göre: geçmişle eğit, gelecekle test et), tahminleri Precision@K / Recall@K / MAP ile ölçersin. Ucuz ve tekrar edilebilir, ama o "eksik doğru listesi" sorunundan muzdarip. Çevrimiçi (online): canlı kullanıcılarla A/B testi; önerilerin gerçekten işe yarayıp yaramadığının altın standardı, ama pahalı ve yavaş. Çevrimdışı metrikler, çevrimiçi testi göze almadan önce optimize ettiğin vekil ölçütlerdir.
Karnedeki "related P/R" tam olarak bu
Bir öneri sisteminin karnesinde "related precision / recall" satırını gördüysen, gördüğün şey budur: önerilen "ilgili" öğelerin precision'ı (gösterdiklerimin kaçı gerçekten ilgiliydi) ve recall'ı (var olan ilgililerin kaçını yakaladım). Sonraki iki bölüm bu karneyi iki yönde derinleştirecek: önce ilgiyi derecelendirerek (RELATED / WEAK / UNRELATED), sonra o "doğru" etiketini kimin koyduğunu sorarak (ipucu: bir LLM hakem). Ama temel hep bu iki sayıdır.
Nereden geliyor?
Bu kavramlar yeni moda değil; arama sistemlerinin tarihiyle yaşıt. "Bizim icadımız" sanma; precision ve recall, alanın yetmiş yıllık, standart, evrensel dilidir.
- Terimler doğuyor. Allen Kent ve meslektaşları (J. W. Perry, Madeline Berry), delikli kartlarla literatür taraması yapan sistemlerde getirim başarısını nesnel ölçmek için precision ve recall'ı ortaya atıyor. Hedef pratikti: iyileştirmeleri tutarlı biçimde ölçebilmek.7
- Cranfield deneyleri. İngiliz kütüphaneci Cyril Cleverdon, kontrollü bir koleksiyonla (1.400 belge, 221 sorgu) ölçümü standartlaştırıyor. Bugün hâlâ kullandığımız üç miras: insan eliyle alaka yargıları, "test koleksiyonu" düzeni, ve sistemleri "precision aracı" / "recall aracı" diye ayırma fikri.7
- F ölçüsü. C. J. van Rijsbergen, precision ile recall'ı tek bir "etkinlik" sayısında birleştiriyor; F1'in atası buradan geliyor.5
- TREC. Küçük, tutarsız koleksiyonlardan bıkan NIST, devasa ölçekli ortak değerlendirmeyi başlatıyor. MAP, 1994'ten itibaren bilgi getiriminin başrol metriği oluyor ve hâlâ öyle.7
Sık yapılan hatalar
Pratikte herkesin düştüğü birkaç tuzak var; adını koymak yarısını çözer:
- Farklı eşiklerde kıyaslamak. Precision ve recall eşiğe bağlıdır. A modelinin bir eşikteki precision'ını B'nin başka eşikteki precision'ıyla kıyaslamak anlamsızdır. Ya sabit bir çalışma noktasında ya da tüm eğri boyunca kıyasla.
- Hazır 0,5 eşiğine körü körüne güvenmek. O eşik aslında keyfîdir; doğru kesme noktası hataların maliyetine göre değişir.
- Dengesizlikte doğruluğu başlık yapmak. Yukarıdaki kanser/dolandırıcılık tuzağı.
- Recall'ı web ölçeğinde "ölçtüm" sanmak. Gerçek recall, var olan tüm ilgililerin tam listesini gerektirir; milyarlarca sayfada bu pratikte imkânsızdır. Bu yüzden webde Precision@k ve MAP öne çıkar.
- Sıralı listede sırayı unutmak. Precision@k ilk k içindeki düzeni görmez; bu boşluğu nDCG doldurur (2. bölüm).
Bir de güçlü bir kıyas aracı olarak iki eğriyi bil: PR eğrisi (precision'a karşı recall) ve ROC eğrisi. Sınıflar çok dengesizse, yani aradığın nadir ve "doğru negatif" yığını devasaysa, PR eğrisi performansın "daha doğru bir resmini" verir; ROC, o devasa yığın yüzünden yanlış alarmları yeterince hissetmez.8 Pratik başlık: nadir pozitif + bol sıkıcı negatif → PR eğrisi.
Nereden başlamalı
1 · Çekirdek
Introduction to Information Retrieval · Manning, Raghavan, Schütze (8. bölüm, ücretsiz, nlp.stanford.edu). Precision/recall, harmonik ortalama, sıralı getirim: alanın başucu kaynağı.
2 · En sezgisel
MLU-Explain · Precision and Recall (Amazon). Görselleştirmeli, "doğruluk neden yetmez" anlatımı; kanser örneği buradan.
3 · Pratik / ML
Google ML Crash Course · Accuracy, precision, recall & thresholds. Karışıklık matrisi ve eşik mantığının en temiz pratik anlatımı.
+ Öneri sistemleri
Evidently AI ve Shaped.ai blogları: Precision@k / Recall@k / MAP'in öneri sistemlerine örnekli uygulaması.
Sonuç
Bir sistemin iyi olup olmadığını tek bir parlak sayıyla yargılamak isteriz; ama precision ve recall bize bunun bir yalan olabileceğini öğretir. Doğru soru çift taraflıdır: söylediğimde haklı mıyım (precision) ve susmam gerekmeyen yerde sustum mu (recall)? İkisi arasındaki gerilim bir kusur değil, bir seçim: hangi hatanın daha pahalı olduğuna senin karar vermen gereken bir kadran.
Precision gürültüyü ölçer, recall kaçırmayı. Birini bedavaya tavan yapabilirsin; ikisini birden yapmak işin gerçek adıdır.
Bu, üç yazılık "Öneriyi Ölçmek" serisinin temel taşıydı. Ama "ilgili / ilgisiz" diye ikiye bölen bu dünyanın bir sınırı var: gerçek hayatta alaka derecelidir; bir sonuç "çok ilgili", "biraz ilgili" ya da "alakasız" olabilir. Bir sonraki bölümde bu ikili gözlüğü kırıp dereceli alakaya ve onun kralı nDCG'ye geçiyoruz; ve senin karnenideki RELATED / WEAK / UNRELATED etiketlerinin aslında yetmiş yıllık bir literatür kavramı olduğunu göreceğiz.
Seri · Sonraki bölüm
2/3 · Doğru ya da Yanlış Değil: Alakanın Dereceleri — İkili alaka neden bilgi kaybeder, dereceli yargılar, ve CG → DCG → nDCG'yi adım adım, canlı bir hesaplayıcıyla kuruyoruz.