Precision ve Recall Ne Anlama Gelir?
Precision (Kesinlik) ve Recall (Duyarlılık), sınıflandırma modellerinin performansını iki farklı açıdan sorgular. Precision "Modelimin pozitif dediği şeyler gerçekten pozitif mi?" sorusunu yanıtlarken, Recall "Gerçek pozitiflerin ne kadarını yakaladım?" sorusunu yanıtlar. İkisi de Confusion Matrix'ten türer: True Positive (TP), False Positive (FP) ve False Negative (FN) değerleri üzerinden hesaplanır.
Formüller ve Confusion Matrix Bileşenleri
- check_circle True Positive (TP): Model doğru pozitif tahmin yaptı — gerçek pozitif örneği pozitif olarak etiketledi
- check_circle False Positive (FP): Model yanlış pozitif tahmin yaptı — gerçek negatif örneği pozitif olarak etiketledi (Tip I Hata)
- check_circle False Negative (FN): Model yanlış negatif tahmin yaptı — gerçek pozitif örneği negatif olarak kaçırdı (Tip II Hata)
- check_circle Precision = TP / (TP + FP): Modelin pozitif dediği tahminler arasında gerçekten doğru olanların oranı
- check_circle Recall = TP / (TP + FN): Tüm gerçek pozitif örnekler arasında modelin yakaladığı oranı
Precision-Recall Dengesi ve F1-Score
Precision ve Recall birbiriyle ters orantılıdır: model eşik değeri (threshold) düşürüldüğünde daha fazla pozitif tahmin üretilir, Recall artar ancak Precision düşer. Bu dengeyi yönetmek için F1-Score kullanılır: 2 × (P × R) / (P + R). F1, iki ölçütün harmonik ortalamasıdır ve biri diğerinden çok düşükse ceza puanlar. Precision-Recall Eğrisi (PR Curve) farklı eşiklerdeki dengeyi görselleştirir; AUC-PR ise genel modeli tek sayıyla özetler.
Ne Zaman Hangisi Önemlidir?
- check_circle Yüksek Precision gerektiğinde: Yanlış alarm maliyeti yüksek olduğunda: spam filtresi (meşru e-posta silinmemeli), hukuki belge sınıflandırma
- check_circle Yüksek Recall gerektiğinde: Kaçırma maliyeti yüksek olduğunda: kanser tespiti (hasta birey gözden kaçırılmamalı), dolandırıcılık tespiti
- check_circle Dengesiz veri kümelerinde: AUC-PR, AUC-ROC'a göre daha bilgilendiricidir; nadir sınıf oranı %5'in altındaysa PR eğrisini tercih edin
- check_circle Çok sınıflı problemlerde: Macro, micro veya weighted averaging ile sınıf başına hesaplanıp birleştirilebilir
LLM ve RAG Sistemlerinde Precision-Recall
Büyük dil modelleri ve Retrieval-Augmented Generation (RAG) sistemlerinin değerlendirilmesinde klasik sınıflandırma ölçütleri adapte edilmiştir. Precision@k, geri çekilen ilk k belge arasında kaçının alaka düzeyinde olduğunu ölçerken, Recall@k tüm alakalı belgelerden kaçının geri getirildiğini gösterir. RAGAS çerçevesi Context Precision ve Context Recall metriklerini kullanarak RAG boru hattının retrieval kalitesini ölçer. Ayrıca LLM çıktılarında hallüsinasyon tespitinde de precision/recall metrikleri başvurulan ölçütlerdir.
calculate Adım Adım Hesaplama Örneği
1.000 e-postalık bir test kümesi düşünün. Gerçekte 100 tanesi spam. Model 90 e-postayı spam olarak işaretliyor ve bunların 80'i gerçekten spam.
Confusion matrix şöyle oluşur: TP = 80 (spam dedi, spamdı) FP = 10 (spam dedi, değildi) FN = 20 (spam demedi, spamdı) TN = 890 (spam demedi, değildi)
Precision = TP / (TP + FP) = 80 / 90 = 0,889 Recall = TP / (TP + FN) = 80 / 100 = 0,800 F1 = 2 x (0,889 x 0,800) / (0,889 + 0,800) = 0,842 Accuracy = (80 + 890) / 1.000 = 0,970
Aynı veri kümesinde hiçbir e-postayı spam saymayan boş bir model accuracy değerini 0,900 gösterir; precision ve recall ise sıfırdır. Dengesiz veride accuracy'nin neden tek başına bir şey anlatmadığı bu farkta görülür.
Eşiğin etkisi de aynı tabloda izlenir. Modelin olasılık eşiğini 0,50'den 0,30'a indirirseniz daha çok e-posta spam sayılır; tipik sonuç TP 88, FP 30 olur. Recall 0,880'e çıkarken Precision 0,746'ya iner. Eşiği 0,70'e çıkarmak bunun tersini yapar. Hangi noktanın seçileceği, bir spam'i kaçırmanın mı yoksa meşru bir e-postayı karantinaya almanın mı daha pahalı olduğuna bağlıdır.
terminal scikit-learn ile Hesaplama ve Eşik Taraması
Tek bir çağrı, sınıf başına precision, recall, f1 ve örnek sayısını birlikte verir:
from sklearn.metrics import precision_score, recall_score, f1_score from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred, digits = 3))
İkili sınıflandırmada precision_score(y_test, y_pred) varsayılan olarak 1 etiketini pozitif sayar. Etiketler metinse pos_label = "spam" vermek gerekir.
Çok sınıflı problemde average parametresi zorunludur:
f1_score(y_test, y_pred, average = "macro") # her sınıfa eşit ağırlık f1_score(y_test, y_pred, average = "micro") # her örneğe eşit ağırlık f1_score(y_test, y_pred, average = "weighted") # sınıf büyüklüğüne göre
Eşik taraması için predict yerine olasılık kullanın:
from sklearn.metrics import precision_recall_curve, average_precision_score
y_score = model.predict_proba(X_test)[:, 1] p, r, thresholds = precision_recall_curve(y_test, y_score) ap = average_precision_score(y_test, y_score)
precision_recall_curve, thresholds dizisinden bir eleman fazla p ve r döndürür; eğriyi çizerken p[:-1] ve r[:-1] kullanın. En az %90 precision veren eşiği bulmak için thresholds[(p[:-1] >= 0.90).argmax()] yeterli. average_precision_score ise PR eğrisinin altındaki alandır ve dengesiz veride ROC-AUC'tan daha bilgilendiricidir.
bug_report Ölçümde Sık Yapılan Hatalar ve Çözümü
- check_circle Target is multiclass but average='binary' hatası: Çok sınıflı etiketlerde precision_score ve recall_score varsayılan ikili modda çalışır. average parametresine macro, micro veya weighted vermek hatayı kaldırır. Azınlık sınıfları önemliyse macro, genel hacim önemliyse micro seçilir.
- check_circle UndefinedMetricWarning ve sıfır dönen skor: Model hiç pozitif tahmin üretmediğinde precision paydası sıfır olur; scikit-learn uyarı basıp 0 döndürür. zero_division = 0 vererek davranışı açıkça seçebilirsiniz, ancak asıl sorun genelde eşiğin çok yüksek olması ya da modelin azınlık sınıfını hiç öğrenmemesidir.
- check_circle pos_label yanlış veya eksik: Etiketler 0 ve 1 değil de spam ile ham gibi metinse ikili metrikler hangi sınıfın pozitif olduğunu bilemez. pos_label verilmezse ya hata alınır ya da yanlış sınıf ölçülür; rakamlar sessizce yanıltıcı hale gelir.
- check_circle Dengeleme işlemini test setine uygulamak: SMOTE, oversampling veya undersampling yalnızca eğitim bölümüne uygulanır. Test setinin sınıf dağılımı değiştirilirse precision gerçek üretim değerinin çok üzerinde çıkar ve model canlıya alındığında beklenti tutmaz.
- check_circle Tek eşik ve tek bölünmeye bakmak: 0,50 eşiği keyfi bir varsayılandır. Eşiği doğrulama kümesinde taramak ve sonucu çapraz doğrulamayla raporlamak, tek bölünmeden gelen şanslı yüksek skorların önüne geçer.
- check_circle Veri sızıntısı: Ölçekleme, hedef kodlama veya özellik seçimini bölünmeden önce tüm veriye uygulamak precision ve recall değerlerini şişirir. Adımları bir Pipeline nesnesinde toplamak bu hatayı yapısal olarak engeller.
Sık Sorulan Sorular
- check_circle Precision mi Recall mi daha önemlidir? Uygulamaya bağlıdır: kaçırmanın bedeli yüksekse Recall'u, yanlış alarımın bedeli yüksekse Precision'ı önceliklendirin.
- check_circle Accuracy neden Precision-Recall kadar yeterli değildir? Dengesiz veri kümelerinde nadir sınıfı hep negatif tahmin eden model %99 accuracy alabilir; Precision-Recall bu triki gizlemez.
- check_circle F1-Score ne zaman yanıltıcı olabilir? Precision ve Recall'un farklı önemleri olduğu durumlarda: F-beta skoru (β > 1 Recall ağırlıklı, β < 1 Precision ağırlıklı) daha uygun alternatiftir.
- check_circle AUC-PR ve AUC-ROC arasındaki fark nedir? ROC eğrisi TPR-FPR ilişkisini gösterir ve negatif sınıf büyüdükçe iyimser sonuçlar üretebilir; PR eğrisi pozitif sınıfa odaklanır ve dengesiz veri için daha güvenilirdir.
- check_circle RAG sistemlerinde precision ve recall nasıl ölçülür? RAGAS gibi çerçeveler, alınan belgelerin kaçının sorgu ile alakalı olduğunu (Context Precision) ve alakalı belgelerin kaçının getirildiğini (Context Recall) LLM hakem değerlendirmesiyle hesaplar.
- check_circle Precision ve recall nasıl hesaplanır? Her ikisi de confusion matrix'ten türer. Precision = TP / (TP + FP), yani pozitif dediklerinizin ne kadarı gerçekten pozitifti. Recall = TP / (TP + FN), yani gerçek pozitiflerin ne kadarını yakaladınız. 80 doğru yakalama, 10 yanlış alarm ve 20 kaçırma veren bir modelde precision 0,889 ve recall 0,800 çıkar.
- check_circle Precision ve recall Türkçesi nedir? Precision genellikle kesinlik, recall ise duyarlılık olarak çevrilir. Türkçe kaynaklarda precision için pozitif kestirim değeri, recall için anma ya da hassasiyet karşılıklarına da rastlanır. Terim karışıklığını önlemek için metinde karşılığı formülle birlikte yazmak en güvenlisi.
- check_circle Çok sınıflı problemde macro mu micro mu kullanmalı? Macro her sınıfın skorunu eşit ağırlıkla ortalar, bu yüzden küçük sınıflardaki başarısızlık hemen görünür. Micro tüm TP, FP ve FN değerlerini toplayıp tek skor üretir ve tek etiketli çok sınıflı problemlerde accuracy ile aynı değere gelir. Azınlık sınıfları önemliyse macro seçin.
- check_circle Precision ve recall aynı anda nasıl yükseltilir? Eşik değiştirmek ikisini birbirine karşı takas eder, toplam performansı artırmaz. İkisini birlikte yükseltmek için daha ayırt edici öznitelikler, daha temiz etiketli veri veya daha güçlü bir model gerekir. İlerlemeyi tek eşikteki F1 ile değil, PR eğrisinin altındaki alanla (average precision) takip edin.