Ana içeriğe atla

Python’da Kesinlik-Duyarlılık (Precision-Recall) Eğrisi Eğitimi

Python’da precision-recall eğrilerini nasıl uygulayıp yorumlayacağınızı öğrenin ve amacınıza uygun eşiği nasıl seçeceğinizi keşfedin.
Güncel 3 Eki 2026  · 14 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Makine öğrenimi (ML) algoritmaları sıradan işleri otomatikleştirmek ve verideki gizli desenleri ortaya çıkarmak için giderek daha fazla kullanılıyor. Ancak bu yöntemler doğası gereği olasılıksaldır; yani tahminleri her zaman doğru değildir. Bu nedenle, bu tür sistemlere güvenebilmek için ML modelinizin geçerliliğini tahmin etmenin bir yoluna ihtiyacınız vardır. 

Doğruluk (accuracy), kesinlik (precision), duyarlılık (recall), ortalama kare hata (MSE), ortalama mutlak yüzde hata (MAPE) ve benzeri değerlendirme metrikleri model performansını ölçmek için yaygın olarak kullanılır. Farklı metrikler, performansı farklı ölçüt ve bakış açılarıyla değerlendirmenize yardımcı olur. 

Bu metrikler aynı zamanda modelin hedeflediği görevi öğrenme konusunda sürekli iyileşmesini sağlar. Sonuçta, ölçemiyorsanız, ML sisteminin performansını da iyileştiremezsiniz.

Doğruluk, anlaşılması kolay ve dengeli veri kümeleriyle, yani tüm sınıfların eşit temsil edildiği durumlarda iyi çalışan bir metriktir. Ancak gerçek dünyadaki olgular eşit dağılmaz; dolayısıyla böyle dengeli veri kümeleri nadirdir. Doğruluk öncelikle, örneklerin çoğunun ait oldukları sınıftan bağımsız olarak doğru tanımlanıp tanımlanmadığıyla ilgilenir. Sahtekâr işlem ya da bir reklam gösteriminde tıklama gibi nadir ama önemli olaylarda, doğruluk metriği her şeyi negatif sınıf (ör. sahtecilik yok veya tıklama yok) olarak tahmin eden bir modeli yanıltıcı biçimde iyi gösterebilir. Bu tür sınırlamalar nedeniyle, doğruluk en uygun metrik değildir. Peki, modellerimizin performansını ölçmek için bunun yerine hangi metriği kullanmalıyız?

Kesinlik (precision) ve duyarlılık (recall), müşteri kaybı tahmini gibi dengesiz sınıflandırma modellerinin performansını değerlendirmede yaygın olarak kullanılan metriklerdir. 

Kesinlik ve Duyarlılık: Açıklama

Kesinlik, pozitif sınıfın pozitif olarak tahmin edilmesine ne kadar güvenilebildiğini ifade eder; duyarlılık ise modelin veri kümesindeki pozitif sınıf örneklerini ne ölçüde yakaladığını ölçer. Pozitif sınıfın, ilgi duyulan sınıf olduğunu unutmayın.

Uygulamada, kesinlik ve duyarlılık en iyi, dört temel terimden oluşan karmaşıklık matrisi (confusion matrix) yardımıyla anlaşılır:

  • True Positive (TP): Doğru olarak tanımlanan pozitif sınıf örneklerinin sayısı
  • False Positive (FP): Negatif sınıf örneklerinden hatalı biçimde pozitif olarak tanımlananların sayısı
  • True Negative (TN): Doğru olarak tanımlanan negatif sınıf örneklerinin sayısı
  • False Negative (FN): Pozitif sınıf örneklerinden hatalı biçimde negatif olarak tanımlananların sayısı

Precision-recall Representation

Temsil, Yazar tarafından oluşturulmuştur

Kesinlik ve Duyarlılık bu dört terimin matematiksel ifadesidir:

Kesinlik, TP’nin tüm pozitif tahminlere (TP+FP) oranıdır. Duyarlılık ise TP’nin tüm pozitif örneklere (TP+FN) oranıdır.

Aşağıdaki gösterim, ikisi arasındaki farkı vurgulayarak daha da sadeleştirir. Esasen, her iki metrikin paydası aynıdır: gerçek pozitif örneklerle pozitif tahminlerin kesişimi, yani TP.

Precision Recall Accuracy

Görsel: Shruti Saxena

Ayırt edici olan paydadır: Kesinlik, tüm pozitif tahminleri (TP+FP) dikkate alırken, Duyarlılık gerçek pozitif örnekleri (TP+FN) dikkate alır. 

Kesinlik ve Duyarlılığın Sezgisi 

Karmaşıklık matrisi adını boşuna almamıştır – bu kavramları ilk kez kavramaya çalıştığınızda gerçekten kafa karıştırıcı olabilir. 

Bu nedenle, bir örnekle içselleştirelim. Diyelim ki bir çelik fabrikanız var; tesiste demir cevherinden demir çıkarılıyor ve bazen istemeden başka mineraller ve elementlerle karışıyor. Çıkarma kısmına odaklanalım: Aşağıda belirtildiği gibi, çıkarılan metalin saflığı ve süreçte üretilen atık miktarıyla ilgili bazı seçenekleriniz var:

Senaryo 1: Süreçte ne kadar metal israf edildiğine bakmaksızın, çıkarılan demirin saflığını önceliklendirmek istiyorsunuz.

Senaryo 2: Saflıktan bağımsız olarak, verimliliği en üst düzeye çıkarmak istiyorsunuz; yani birim cevher başına çıkarılan demir miktarını artırmak.

Senaryo 3: Her iki dünyanın en iyisini istiyorsunuz; yani çıkarılan metalin saflığını olabildiğince yüksek tutarken atığı azaltmak (birim cevher başına çıkarılan demiri maksimize etmek).

Yüksek fırın veya elektrik ark ocağını, farklı sonuçlar (demir saflığı ve atık) veren modelleme seçenekleri olarak düşünün. Diyelim ki çıkarma yöntemlerinden biri %97,5 saf demir sağlıyor ve çamurda demirin %4’ünü kaybediyor. Bu durumda, kesinliği, çıkarılan metaldeki saf demir oranı olarak, yani %97,5; duyarlılığı ise cevherdeki tüm demirden çıkarılan demir miktarı olarak, yani %96 (tüm demirin %4’ü israf) tanımlayabiliriz.

Iron Extraction Process

İllüstrasyon, Yazar tarafından oluşturulmuştur

Diyelim ki daha saf demir istediğiniz için ikinci yöntemi benimsiyorsunuz; bu da çıkarma sürecinde daha fazla atık anlamına geliyor. Saflığı %0,5 artırıp %98’e çıkardığınızda metal israfınızın %11 arttığını varsayalım. Bu, %98 kesinliğe karşılık gelen duyarlılık değerinin %85 olduğu anlamına gelir. Daha yüksek kesinlik karşılığında duyarlılıktan feragat etme ve tersinin geçerli olması, kesinlik ve duyarlılık arasındaki ters ilişkiyi gösterir.

Tüm kesinlik değerleri ile bunlara karşılık gelen duyarlılık değerlerini bilseydiniz, hedefinize en uygun kararı veremez miydiniz?

Kesinlik-duyarlılık eğrisi bu seçimi yapmanıza yardımcı olur; bunu sonraki bölümlerde derinlemesine anlayacaksınız. Ancak ondan önce, PR eğrisinin özünü oluşturan önemli bir kavram olan eşik değerini (threshold) ele alalım. 

Eşik Kavramı

Bir eşik (veya kesim) değerinin nasıl çalıştığını anlamak için sahtekâr işlem tespiti örneğini ele alalım. Aşağıdaki tabloda 1’den 4’e kadar işlem kimliğine sahip dört işlem var; bir işlem ya sahtekâr ya da normal olabilir. Sahtekârlık tespit modeli, bir işlemin sahtekâr olma olasılığını (sarı sütunda vurgulanmış) çıktılar; bu, normal işlem olasılığını da dolaylı olarak verir. 

Bir işlemin sahtekâr olarak tahmin edilmesi, Sahtekârlık olasılığı sütunundaki çıktı olasılığının seçilen eşik değerinden büyük olmasına bağlıdır; aksi halde normal işlem olarak kabul edilir. 

İşlem ID

Sahtekârlık olasılığı

Normal işlem olasılığı

Sahtekâr mı? (Eşik = 0.9)

Sahtekâr mı? (Eşik = 0.5)

Sahtekâr mı? (Eşik = 0.4)

1

0.3

0.7

Hayır

Hayır

Hayır

2

0.4

0.6

Hayır

Hayır

Evet

3

0.6

0.4

Hayır

Evet

Evet

4

0.95

0.05

Evet

Evet

Evet

0,9 gibi katı bir eşik uygulandığında ilk üç işlem normal, son işlem ise sahtekâr olarak işaretlenir. Bu kadar yüksek bir eşik, tahminlere güveni artırarak yüksek kesinliğe yol açar. Karşılığında, bazı sahtekâr işlemleri kaçırarak modelin duyarlılığından feragat edersiniz.

Böyle bir senaryo, yüksek kesinliğe rağmen arzu edilir değildir. Nedenini düşünebiliyor musunuz?

Çünkü işletme, bu tür bir modelin asıl amacı olan sahtekârlığı tespit edememenin daha yüksek maliyetine katlanır. Unutmayın, sahtekâr bir işlemin maliyeti, engellenen ama aslında normal işlemlerin (FP) maliyetinden çok daha yüksektir. 

Şimdi spektrumun diğer tarafını düşünelim: 0,4 gibi düşük bir eşik değeri, alttaki üç işlemi sahtekâr olarak işaretler. Bu kadar gevşek bir eşik, işlemlerin çoğunu engeller; bu da birçok müşteriyi kızdırabilir. Ayrıca, işaretlenen işlemleri inceleyip gerçek sahtekârlıkları bulmak için insan kaynağına ek yük getirir.

Bu nedenle işletme, aşağıdaki maliyetleri göz önünde bulundurarak, her iki dünyadan da en iyi şekilde faydalanmak için hedef metrikleri ve istenen değerlerini tanımlamalıdır:

  • Sahtekâr bir işlemi normal olarak tanımlamanın maliyeti (False Negative)
  • Normal bir işlemi sahtekâr olarak tanımlamanın maliyeti (False Positive)

Kesinlik tanımına geri dönersek, yanlış pozitiflerin (FP) matematiksel ifadede paydada yer aldığını ve dolayısıyla yanlış pozitifleri en aza indirmenin kesinliği maksimize ettiğini görürsünüz. Benzer şekilde, yanlış negatifleri (FN) azaltmak modelin duyarlılığını artırır.

Dolayısıyla, bir işlemin sahtekâr mı yoksa normal mi tahmin edildiği büyük ölçüde eşik değerine bağlıdır.

Kesinlik-Duyarlılık Eğrisi Nedir?

Kesinlik-duyarlılık eğrisi, istenen kesinlik ve duyarlılık değerlerine göre bir eşik belirlemenize yardımcı olur. Ayrıca farklı modellerin performansını, “Kesinlik-Duyarlılık Eğrisi Altındaki Alan”ı (AUC) hesaplayarak karşılaştırmak için de kullanışlıdır.

Karmaşıklık matrisiyle açıklandığı üzere, ikili bir sınıflandırma modeli, farklı eşik değerleri için TP, FP, TN ve FN üretir; her bir eşik değeri, karşılık gelen bir kesinlik ve duyarlılık çifti verir. 

Duyarlılık değerlerini x eksenine, karşılık gelen kesinlik değerlerini y eksenine yerleştirmek, negatif eğimli bir PR eğrisi oluşturur. Bu eğri, belirli bir model için kesinlik (FP’leri azaltma) ile duyarlılık (FN’leri azaltma) arasındaki ödünleşimi gösterir. Kesinlik ve duyarlılık arasındaki ters ilişki göz önüne alındığında, eğri genellikle doğrusal değildir; bir metriki artırmak diğerini azaltır, fakat azalma oransal olmak zorunda değildir.

Precision-recall curve

Görsel: StackExchange

Diyelim ki bir kuruluş, kabul edilebilir asgari duyarlılık değerini %98 olarak belirliyor. Yıldızla gösterilen “Düşük Eşik, Düşük Kesinlik, Yüksek Duyarlılık” noktasında kesinlik %30’dur.  

Diğer iki uç nokta, eşiğin şu durumlarını temsil eder:

  • Aşırı düşük → Yüksek Duyarlılık – insan kaynağı maliyeti ve kızgın müşteriler
  • Aşırı yüksek → Yüksek Kesinlik – sahtekâr işlemlerin maliyeti ve itibar kaybı

PR eğrisi kullanımı

İş hedefiyle uyumlu doğru kesim değerini seçmenin yanı sıra, birden fazla model veya algoritmanın kesinlik-duyarlılık eğrilerinin eğri altı alanı, performanslarını kıyaslamak için kullanılabilir. Tekil kesinlik, duyarlılık veya (Kesinlik ve Duyarlılığın harmonik ortalaması olan) F1 skoru yerine PR eğrileriyle modelleri karşılaştırmak özellikle faydalıdır.

Precision-recall curve 2

Görsel: Stackoverflow

Bu metrikler eşik bağımlıdır; eşikteki bir değişim, TP, FP ve FN dağılımını değiştirir. İki farklı model, belirli bir eşikte farklı performans gösterebilir; bu da PR eğrisini model karşılaştırması için sağlam bir tercih haline getirir. Yukarıdaki grafik, belirli bir veri kümesi üzerinde iki farklı algoritmanın PR eğrilerini gösterir – ikinci algoritmanın AUC’si birincisinden büyüktür; bu da onu bu problem için daha iyi bir seçenek yapar.

Python’da Kesinlik-Duyarlılık Eğrisinin Uygulanması

Artık precision-recall eğrilerinin ne olduğunu ve ne için kullanıldığını bildiğimize göre, Python’da bir precision-recall eğrisi oluşturmayı görelim. 

Adım 1: Gerekli Python paketlerini içe aktarın

Meme kanseri tespiti için bir model veri kümesine bakalım; burada “sınıf 1” kanser tanısını, “sınıf 0” ise kanser olmadığını temsil eder.

İlk içe aktarma, bağımsız değişkenler ile hedef değişkeni içeren “sklearn.datasets” modülünden veri kümesini yükler. Çoğu algoritma tarafından kolayca öğrenilebilen bir model veri kümesi olduğu için, sklearn’den “GaussianNB” olarak içe aktarılan Naive Bayes algoritmasını seçtik. 

Sonraki “precision_recall_curve” içe aktarması, farklı eşikler ve bunlara karşılık gelen Kesinlik ve Duyarlılık değerlerini üretir.

from sklearn.datasets import load_breast_cancer
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import precision_recall_curve
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

Adım 2: Eğitim ve test verilerini hazırlama

Bağımsız değişkenler “data” sözlüğündeki “data” anahtarında, hedef değişken ise “target” anahtarında tutulur. Veri daha sonra test_size argümanına 0.3 değeri verilerek eğitim ve test kümelerine ayrılır.

# Load model breast cancer data
data = load_breast_cancer()
X = data['data']
y = data['target']

Pozitif ve negatif sınıfın, yani meme kanseri olan ve olmayan vakaların dağılımına bakalım.

import numpy as np
unique, counts = np.unique(y, return_counts=True)
plt.pie(counts, labels=unique, autopct='%.0f%%');

Distribution of positive and negative class

Veriyi, sklearn’ün model_selection modülündeki train_test_split yöntemiyle eğitim ve test kümelerine ayırın.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

Adım 3: Model eğitimi

Eğitim verileri GaussianNB() içine argüman olarak verilerek model eğitimi başlatılır. Elde edilen uyumlanmış model nesnesi, eğitim ve test verisi üzerinde olasılık biçiminde tahminler almak için kullanılır. 

# Fit a Naive Bayes model
clf = GaussianNB().fit(X_train, y_train)

Adım 4: Tahminlerin üretilmesi

Farklı eşik değerlerinde Kesinlik ve Duyarlılık elde etmek için eğitim ve test veri kümesini kullanarak tahmin olasılıklarını üretin.

# Predict probability
y_prob_train = clf.predict_proba(X_train)[:,1]
y_prob_test = clf.predict_proba(X_test)[:,1]

Adım 5: PR eğrisini çizme

precision_recall_curve() yöntemi iki girdi alır – eğitim veri kümesinden gelen olasılıklar (y_prob_train) ve gerçek yer doğrusu değerleri – ve üç değer döndürür: Kesinlik, Duyarlılık ve eşikler.

precision, recall, thresholds = precision_recall_curve(y_train, y_prob_train)
plt.fill_between(recall, precision)
plt.ylabel("Precision")
plt.xlabel("Recall")
plt.title("Train Precision-Recall curve");

Kesinlik ve duyarlılık vektörleri, aşağıda gösterildiği gibi değişen eşiklerde PR eğrisini çizmek için kullanılır:

Train Precision-recall curve

PR Eğrisi, Yazar tarafından oluşturulmuştur

Kesinlik-Duyarlılık Eğrisi ROC Eğrisinden Daha mı İyidir?

ROC eğrisi, PR eğrisine benzer; farklı eşikler için Doğru Pozitif Oranı (TPR) ile Yanlış Pozitif Oranı’nı (FPR) çizer. TPR’yi zaten biliyoruz; bu, duyarlılığın diğer adıdır. Öyleyse, negatif sınıftaki yanlış sınıflandırmaları ifade eden FPR’ye odaklanalım. Sahtekârlık örneğine devam edersek, normal işlemlerden sahtekâr olarak işaretlenenlerin yüzdesini temsil eder.

True Positive Fals Positive

Görsel: Albert Um

Artık anlıyoruz ki duyarlılık (TPR) PR eğrisi ile ROC eğrisi arasında ortaktır; temel fark sırasıyla kesinlik ve FPR’dedir. PR eğrisinin neden daha bilgilendirici olduğuna bakalım.

Bunun nedeni, PR eğrisinin ROC eğrisine kıyasla ilgi duyulan sınıf hakkında daha anlamlı içgörüler sunmasıdır. Sahtekâr işlem tahminini ele alalım. Dengesiz veri kümelerinde Doğru Negatifler (TN) çok büyük olma eğilimindedir ve FPR’yi çok küçük bir değere indirir. Peki bu, bir işlemi sahtekâr olarak tahmin etme performansı hakkında bir şey söyler mi?

Hayır! Öte yandan, metriklerden biri olarak Kesinliği kullanmak, modelin pozitif sınıftaki (sahtekâr işlemler) performansını tanımlar. Bu, modelin sahtekâr işlemleri işaretlemede tutucu mu yoksa cömert mi olduğunu gösterir.

ROC eğrisinin ikinci büyük sakıncası, dengesiz verilere karşı görece bağışıklığıdır. Yukarıdaki şekilde görüldüğü gibi FPR yalnızca negatif sınıfa dayalı bir metriktir; yani FP’deki değişimin, FP+TN’deki (tüm negatif örnekler) değişime orantılı olması beklenir. Dolayısıyla alttaki veri dağılımı değişse bile ROC önemli ölçüde değişmeyebilir. Sınıf dağılımına bu duyarsızlık, PR eğrisini ROC eğrisine göre daha iyi bir seçenek yapar.

Son Düşünceler

Kesinlik ve duyarlılık, makine öğrenimi sınıflandırma modellerinin performansını ölçmek için temel değerlendirme metrikleridir. Ancak ikisi arasındaki ödünleşim, iş önceliklerine bağlıdır ve PR eğrisiyle en iyi şekilde çözümlenir. Bu yazıda PR eğrisinin nasıl yorumlanacağını ve iş hedefini karşılayacak doğru eşiğin nasıl seçileceğini açıkladık. Ayrıca, Python kullanarak adım adım nasıl çizileceğini gösterdik. Son olarak, PR eğrisinin ROC eğrisine kıyasla neden daha bilgilendirici olduğunu tartıştık.  

Konular
Python
Makine Öğrenimi

Python Kursları

Kurs

Python'da Model Doğrulama

4 sa
31.1K
Model doğrulamanın temellerini ve doğrulama tekniklerini öğrenin ve doğrulanmış, yüksek performanslı modeller oluşturmaya başlayın.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör