İmbalansız Veri Setlerinde Accuracy Tuzağı: Doğru Metrik Seçimi

# İmbalansız Veri Setlerinde Accuracy Tuzağı: Doğru Metrik Seçimi

Bir kredi kartı dolandırıcılık tespiti modeliniz %99 accuracy gösteriyor. Harika, değil mi? Aslında hayır. Eğer veri setinizde 10.000 işlemden 9.900'ü meşru, sadece 100'ü dolandırıcılıksa, model hiçbir dolandırıcılığı tespit etmese bile %99 accuracy elde eder. Çünkü meşru işlemleri doğru sınıflandırmak yeterlidir.

Bu, imbalansız veri setlerinde accuracy'nin tuzağıdır.

Accuracy = (Doğru Pozitif + Doğru Negatif) / Toplam

Fakat imbalansız veriler için şunlar daha değerlidir:

Precision = Doğru Pozitif / (Doğru Pozitif + Yanlış Pozitif)
"Pozitif dediğim kaç tanesinin gerçekten pozitif?"

Recall = Doğru Pozitif / (Doğru Pozitif + Yanlış Negatif)
"Tüm pozitiflerden kaç tanesini yakaladım?"

F1-Score = 2 × (Precision × Recall) / (Precision + Recall)
Precision ve recall'un dengeli ortalaması

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Kredi kartı dolandırıcılığı tespiti üzerinde çalışalım:

1import numpy as np
2from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
3
4# Gerçek etiketler (1 = dolandırıcılık, 0 = meşru)
5y_true = np.array([0]*9900 + [1]*100)
6
7# Model tahminleri (hiçbir dolandırıcılığı tespit etmiyor)
8y_pred = np.array([0]*10000)
9
10print(f"Accuracy: {accuracy_score(y_true, y_pred):.4f}") # 0.9900
11print(f"Precision: {precision_score(y_true, y_pred, zero_division=0):.4f}") # 0.0000
12print(f"Recall: {recall_score(y_true, y_pred, zero_division=0):.4f}") # 0.0000
13print(f"F1-Score: {f1_score(y_true, y_pred, zero_division=0):.4f}") # 0.0000
14
15print("\nConfusion Matrix:")
16print(confusion_matrix(y_true, y_pred))

Çıktı:

1Accuracy: 0.9900
2Precision: 0.0000
3Recall: 0.0000
4F1-Score: 0.0000
5
6Confusion Matrix:
7[[9900 0]
8[ 100 0]]

Akkurat görünen model, tüm dolandırıcılıkları kaçırdı! Precision ve F1-Score bunu hemen gösteriyor.

1. Veri imbalansını kontrol et:

1from collections import Counter
2print(Counter(y_true))
3# Counter({0: 9900, 1: 100})

2. Doğru metriği seç:
- Yanlış negatif pahalıysa (hastalık tespiti, dolandırıcılık): Recall önemliyse
- Yanlış pozitif pahalıysa (spam filtresi): Precision önemliyse
- İkisi de önemliyse: F1-Score kullan

3. Confusion matrix'i oku:

1Tahmin: Negatif Tahmin: Pozitif
2Gerçek: Negatif TN FP
3Gerçek: Pozitif FN TP

İmbalansız verilerle çalışırken accuracy'ye güvenme. Confusion matrix, precision, recall ve F1-score kullan. Doğru metrik seçimi, modelinizin gerçek performansını gösterir.

bknz: Multiclass Sınıflandırmada Performans Metrikleri: Confusion Matrix Ötesi

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz