CodeBlanks Logo Icon CodeBlanks

Recall

Recall, gerçek pozitiflerin kaçının bulunduğunu gösterir.

ROC eğrisi

Eşik 1'den 0'a indikçe duyarlılık (doğru pozitif oranı, TPR) artar ama yanlış pozitif oranı (FPR) da artar. ROC eğrisi bu iki oranı tüm eşikler için çizer:

from sklearn.metrics import roc_curve
fpr, tpr, esikler = roc_curve(y_test, p)
# her eşik için (fpr, tpr) noktası

FPR = FP / (FP + TN): gerçek negatiflerin ne kadarına yanlışlıkla pozitif dendiği.

AUC

ROC eğrisinin altındaki alan (AUC) tek sayılık bir özettir: 1.0 kusursuz, 0.5 rastgele. Eşikten bağımsızdır ve "rastgele bir pozitif örneğin rastgele bir negatiften daha yüksek skor alma olasılığı" olarak yorumlanır:

from sklearn.metrics import roc_auc_score
print(roc_auc_score([0, 0, 1, 1], [0.1, 0.4, 0.35, 0.8]))   # 0.75

Dört pozitif-negatif çiftinin üçünde pozitif daha yüksek skor almış: 3/4 = 0.75.

Uygulama AUC hesapla

Meme kanseri test olasılıkları p için roc_auc_score değerini round(..., 3) ile yazdır. Ardından roc_curve ile kaç eşik üretildiğini (len(esikler)) yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
m = make_pipeline(StandardScaler(), LogisticRegression()).fit(X_train, y_train)
p = m.predict_proba(X_test)[:, 1]
from sklearn.metrics import roc_auc_score, roc_curve

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
m = make_pipeline(StandardScaler(), LogisticRegression()).fit(X_train, y_train)
p = m.predict_proba(X_test)[:, 1]
from sklearn.metrics import roc_auc_score, roc_curve

print(round(roc_auc_score(y_test, p), 3))
fpr, tpr, esikler = roc_curve(y_test, p)
print(len(esikler))

Beklenen çıktı

0.995
12

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Rastgele tahmin eden bir modelin ROC eğrisi nasıldır?

  • (0,0)'dan (1,1)'e köşegen Doğru cevap
  • Sol üst köşeye yapışık
  • Yatay çizgi
  • Tek bir nokta

Açıklama: Rastgele modelde TPR her zaman FPR'ye eşittir; AUC 0.5 olur.

2 ROC eğrisinin altındaki alanı hesapla.

Soru
auc = ____(y_test, p)
Cevap
auc = roc_auc_score(y_test, p)

Açıklama: roc_auc_score karar değil olasılık ya da skor ister.

3 Terimleri eşleştir.

Kavram Anlamı
TPR Duyarlılık
FPR FP / (FP + TN)
AUC = 0.5 Rastgele
AUC = 1.0 Kusursuz sıralama

Başlangıç bölümündeki tüm dersler