CodeBlanks Logo Icon CodeBlanks

Metrik seçimi

Dengesiz veride accuracy yerine F1 veya AUC kullanılır.

Metrik seçimi

Dengesiz veride doğruluk yerine azınlığa odaklanan metrikler kullanılır:

  • Kesinlik/duyarlılık/F1: azınlık sınıfı için.
  • Ortalama kesinlik (PR AUC): kesinlik-duyarlılık eğrisinin altındaki alan; eşikten bağımsızdır.
  • ROC AUC: dengesizlikte iyimser görünebilir, çünkü çok sayıdaki doğru negatif FPR'yi küçük tutar.
from sklearn.metrics import average_precision_score, roc_auc_score
p = m.predict_proba(X_test)[:, 1]
print(roc_auc_score(y_test, p), average_precision_score(y_test, p))

Rastgele bir modelin PR AUC'si azınlık oranına (burada 0.05) eşittir; ROC AUC'si ise 0.5'tir.

Eşik ayarı

Model değiştirmeden en etkili adım çoğu zaman karar eşiğini ayarlamaktır. Eşik doğrulama verisinde, istenen duyarlılığı ya da en yüksek F1'i verecek biçimde seçilir:

from sklearn.metrics import precision_recall_curve
pr, re, esik = precision_recall_curve(y_val, p_val)
f1 = 2 * pr * re / (pr + re + 1e-12)
en_iyi = esik[f1[:-1].argmax()]

scikit-learn'ün yeni sürümlerindeki TunedThresholdClassifierCV bunu CV ile otomatik yapar.

Uygulama AUC ve AP

Lojistik regresyonun test olasılıkları için ROC AUC ve ortalama kesinliği round(..., 3) ile aynı satırda yazdır. Ardından rastgele olasılıklarla (rng.random(len(y_test))) aynı iki metriği yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=2000, n_features=10, n_informative=4, weights=[0.95, 0.05], flip_y=0, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, average_precision_score

rng = np.random.default_rng(0)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=2000, n_features=10, n_informative=4, weights=[0.95, 0.05], flip_y=0, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, average_precision_score

rng = np.random.default_rng(0)

p = LogisticRegression().fit(X_train, y_train).predict_proba(X_test)[:, 1]
print(round(roc_auc_score(y_test, p), 3), round(average_precision_score(y_test, p), 3))
r = rng.random(len(y_test))
print(round(roc_auc_score(y_test, r), 3), round(average_precision_score(y_test, r), 3))

Beklenen çıktı

0.928 0.425
0.455 0.046

Soru ve cevaplar

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

1 %1 azınlıklı bir veride rastgele modelin ortalama kesinliği yaklaşık kaçtır?

  • 0
  • 0.01 Doğru cevap
  • 0.5
  • 0.99

Açıklama: Rastgele tahminde her eşikte kesinlik azınlık oranı civarındadır.

2 Eşikten bağımsız PR özetini hesapla.

Soru
ap = ____(y_test, p)
Cevap
ap = average_precision_score(y_test, p)

Açıklama: average_precision_score PR eğrisinin altındaki alanı özetler.

3 Metrikleri eşleştir.

Kavram Anlamı
average_precision PR eğrisi alanı
roc_auc Dengesizlikte iyimser
F1 Eşiğe bağlı denge
eşik ayarı Model değiştirmeden iyileştirme

Orta seviye bölümündeki tüm dersler