Kurs
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ı

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.

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.

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

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.

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%%');

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:

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.

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.
