AUC (Area Under Curve)
Die Fläche unter der ROC-Kurve – ein einzelner Wert zwischen 0 und 1, der die Gesamtqualität eines Klassifikators misst.
Ein Diagramm zur Bewertung von Klassifikatoren – zeigt das Verhältnis von True Positive Rate zu False Positive Rate bei verschiedenen Schwellenwerten.
Die ROC Curve zeigt, wie gut ein Klassifikator zwischen Klassen unterscheidet.
TPR (True Positive Rate) = TP / (TP + FN) = Recall
FPR (False Positive Rate) = FP / (FP + TN)
1 │ ╭────────── Perfekt
│ ╱
TPR │ ╱ ← Gutes Modell
│ ╱
│╱.............. Zufall (Diagonale)
0 └─────────────────
0 1
FPR
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt
# Vorhersage-Wahrscheinlichkeiten
y_true = [0, 0, 1, 1, 1, 0, 1, 0]
y_scores = [0.1, 0.4, 0.35, 0.8, 0.7, 0.3, 0.9, 0.2]
# ROC Curve
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
# Plot
plt.plot(fpr, tpr, label=f'AUC = {roc_auc_score(y_true, y_scores):.2f}')
plt.plot([0, 1], [0, 1], 'k--', label='Random')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
# Youden's J statistic: maximiert TPR - FPR
j_scores = tpr - fpr
best_idx = np.argmax(j_scores)
best_threshold = thresholds[best_idx]
Die ROC-Kurve ist keine Funktion des Modells allein, sondern des Rankings seiner Scores. Man sortiert alle Beispiele absteigend nach vorhergesagtem Score und senkt den Schwellenwert schrittweise: Jedes Mal, wenn ein tatsächlich positives Beispiel neu als positiv klassifiziert wird, steigt die Kurve nach oben (TPR wächst); bei einem negativen Beispiel wandert sie nach rechts (FPR wächst). Ein Modell mit perfektem Ranking – alle Positiven vor allen Negativen – erzeugt daher zuerst nur Aufwärtsschritte und erreicht die obere linke Ecke.
Daraus folgt eine wichtige Eigenschaft: Die ROC-Kurve ist invariant gegenüber monotonen Transformationen der Scores. Ob ein Modell kalibrierte Wahrscheinlichkeiten oder unkalibrierte Scores liefert, ändert die Kurve nicht – sie bewertet ausschließlich die Reihenfolge.
| Aspekt | ROC-Kurve | Precision-Recall-Kurve |
|---|---|---|
| Achsen | FPR vs. TPR | Recall vs. Precision |
| Nutzt True Negatives? | Ja (in FPR) | Nein |
| Bei starker Klassen-Imbalance | Kann zu optimistisch wirken | Zeigt Schwächen deutlicher |
| Baseline | Diagonale (unabhängig von Klassenverteilung) | Horizontale auf Höhe des Positiv-Anteils |
| Typischer Einsatz | Ausgewogene Klassen, Modellvergleich | Seltene positive Klasse (Fraud, Anomalien) |
Der Grund für den Unterschied: Bei sehr vielen Negativen bleibt die FPR selbst dann klein, wenn absolut gesehen viele False Positives entstehen – die riesige Zahl an True Negatives im Nenner verdeckt das Problem. Precision reagiert direkt auf jede falsch-positive Vorhersage und ist deshalb bei seltenen positiven Klassen die ehrlichere Perspektive.
Youden’s J behandelt beide Fehlerarten als gleich teuer – das ist selten realistisch. Bei einem medizinischen Screening ist ein übersehener Krankheitsfall (False Negative) meist gravierender als eine unnötige Nachuntersuchung (False Positive); beim automatischen Sperren von Nutzerkonten ist es umgekehrt. In solchen Fällen wählt man den Punkt auf der Kurve, der die gewichteten Kosten minimiert, oder fixiert eine der beiden Raten (z. B. „FPR darf höchstens x betragen”) und maximiert die andere.
roc_curve braucht Scores oder Wahrscheinlichkeiten (predict_proba), nicht die 0/1-Ausgabe von predict – sonst besteht die „Kurve” nur aus einem einzigen Punkt.ROC ist wie ein Regler zwischen 'alles als positiv markieren' und 'nichts als positiv markieren'. Die Kurve zeigt, wie gut dein Modell bei jeder Einstellung ist.
X-Achse: False Positive Rate (FPR)
Y-Achse: True Positive Rate (TPR/Recall)
Perfektes Modell: Kurve geht zur oberen linken Ecke
Modellvergleich
Welches Modell ist besser?
Schwellenwert-Wahl
Optimalen Cutoff finden
Imbalanced Data
Robuster als Accuracy
ROC bei balancierten Klassen. Precision-Recall bei stark unbalancierten (z.B. Fraud Detection mit 0.1% Positiven).
Zufälliges Raten. Alles darüber ist besser als Zufall, darunter schlechter.