Receiver Operating Characteristic (ROC) Curve
Eine Receiver-Operating-Characteristic-Kurve (ROC-Kurve) stellt die Rate richtig positiver Ergebnisse für jeden Schwellenwert der Rate falsch positiver Ergebnisse gegenüber. So liest du sie, einschließlich AUC und Code.
Eine Receiver-Operating-Characteristic-Kurve (ROC-Kurve) zeigt, wie gut ein binärer Klassifikator zwei Klassen bei allen möglichen Entscheidungsschwellen trennt. Sie stellt die Rate richtig positiver Ergebnisse auf der y-Achse der Rate falsch positiver Ergebnisse auf der x-Achse gegenüber. Für jede auf die Modellwerte angewandte Schwelle gibt es einen Punkt, sodass eine einzige Grafik alle Abwägungen zwischen dem Erkennen positiver Fälle und dem Auslösen von Fehlalarmen abbildet. Die Fläche darunter, die Fläche unter der Kurve (AUC), fasst die Grafik in einem einzigen schwellenwertunabhängigen Wert zusammen. Der Name stammt aus der Radartechnik des Zweiten Weltkriegs, wo damit gemessen wurde, wie gut Radaroperatoren feindliche Flugzeuge von Rauschen unterschieden. Später verbreitete sich das Verfahren in der Medizin, Psychologie und im maschinellen Lernen (ML).
So wird eine ROC-Kurve erstellt#
Jeder Punkt auf der Kurve stammt aus einer bei einer bestimmten Schwelle berechneten Konfusionsmatrix:
- Rate richtig positiver Ergebnisse (TPR), auch Recall oder Sensitivität genannt: TP / (TP + FN), der Anteil der tatsächlich positiven Fälle, die das Modell als positiv kennzeichnet.
- Rate falsch positiver Ergebnisse (FPR): FP / (FP + TN), der Anteil der tatsächlich negativen Fälle, die fälschlich als positiv gekennzeichnet werden. Die FPR entspricht 1 minus der Spezifität.
Wird die Schwelle von hoch nach niedrig durchlaufen, zeichnet sich die Kurve von (0, 0), wo nichts gekennzeichnet wird, bis (1, 1), wo alles gekennzeichnet wird. Ein Klassifikator, der jeden positiven Fall höher einstuft als jeden negativen, verläuft durch die obere linke Ecke. Ein Modell, das zufällig rät, folgt der Diagonalen, und eine Kurve unterhalb der Diagonalen bedeutet, dass die Werte invertiert sind. Die AUC entspricht der Wahrscheinlichkeit, dass ein zufällig ausgewählter positiver Fall einen höheren Wert erhält als ein zufällig ausgewählter negativer Fall. Daher entspricht 0.5 dem Zufall und 1.0 einer perfekten Trennung. Für die Kurve sind kontinuierliche Werte erforderlich, etwa vorhergesagte Wahrscheinlichkeiten oder Konfidenzwerte, da harte 0/1-Kennzeichnungen nur einen einzigen Punkt ergeben. Das folgende Beispiel trainiert einen Klassifikator für logistische Regression auf einem unausgewogenen Datensatz und berechnet die Kurve mit dem roc_curve von scikit-learn:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.model_selection import train_test_split
# Binary task where 10% of samples are positive
X, y = make_classification(n_samples=5000, weights=[0.9], class_sep=0.8, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# ROC analysis needs continuous scores, not hard 0/1 predictions
scores = LogisticRegression().fit(X_train, y_train).predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, scores)
print(f"AUC: {roc_auc_score(y_test, scores):.3f}")
# Each threshold is one point on the curve: higher recall costs more false alarms
for target in (0.80, 0.95):
i = np.argmax(tpr >= target) # first point that reaches the target TPR
print(f"Threshold {thresholds[i]:.2f}: TPR {tpr[i]:.2f}, FPR {fpr[i]:.2f}")Das Modell erreicht eine AUC von 0.963. Bei einer Schwelle von 0.44 findet es 82 % der positiven Fälle bei einer FPR von 0.01. Um einen Recall von 95 % zu erreichen, muss die Schwelle auf 0.02 gesenkt werden, wodurch die FPR auf 0.26 steigt. Bei diesem Testsplit mit 130 positiven und 1,120 negativen Fällen kostet das Erkennen von 18 zusätzlichen positiven Fällen 279 weitere Fehlalarme.
Einen Betriebspunkt auswählen#
Die Kurve zeigt, welchen Preis jede Schwelle hat. Die Anwendung entscheidet, welcher Preis akzeptabel ist:
- Medizinisches Screening: Ein übersehener Tumor ist wesentlich kostspieliger als eine Folgeuntersuchung. Daher arbeiten Screening-Tools an einem Punkt mit hoher TPR und nehmen mehr falsch positive Ergebnisse in Kauf, die Radiologen überprüfen.
- Betrugserkennung: Jede zu Unrecht blockierte Zahlung frustriert einen Kunden. Daher wählen Banken einen Punkt, der möglichst viel Betrug aufdeckt und die FPR zugleich auf einem Niveau hält, das ihre Prüfteams und Kunden bewältigen können.
- Gleiche Kosten: Wenn beide Fehler gleich viel kosten, wählt die Youden-J-Statistik, TPR minus FPR, den Punkt mit dem größten Abstand oberhalb der Diagonalen.
Ultralytics-YOLO26-Klassifizierungs modelle geben in results[0].probs.data eine Wahrscheinlichkeit für jede Klasse zurück – die kontinuierlichen Werte, die die ROC-Analyse benötigt. Werden die Wahrscheinlichkeiten einer Klasse über einen annotierten Validierungssatz gesammelt, ergibt sich die One-vs-Rest-ROC-Kurve dieser Klasse und eine Schwelle, die auf die Kosten der Bereitstellung abgestimmt ist.
ROC-Kurve im Vergleich zu verwandten Werkzeugen#
Eine Precision-Recall-Kurve stellt Precision statt TPR der FPR gegenüber. Da TPR und FPR jeweils innerhalb einer Klasse berechnet werden, bleibt eine ROC-Kurve gleich, wenn positive Fälle seltener werden, während die Precision sinkt. Bei seltenen positiven Fällen, etwa beim Screening auf Betrug oder bei der Anomalieerkennung, kann selbst eine geringe FPR mehr Fehlalarme als echte Erkennungen bedeuten. Eine PLOS-ONE-Studie zu unausgewogenen Datensätzen stellte fest, dass Precision-Recall-Diagramme in dieser Situation aussagekräftiger sind. Objekterkennung wird aus einem verwandten Grund mit Precision-Recall-Kurven und der mittleren Average Precision (mAP) bewertet: Die Hintergrundbereiche, die als richtig negative Ergebnisse zählen würden, sind unbegrenzt, sodass die FPR keinen festen Nenner hat.
- Genauigkeit und F1-Wert: Einzelwerte, die bei einer Schwelle gemessen werden. Die ROC-Kurve und ihre AUC fassen dagegen alle Schwellen zusammen.
- Bildklassifizierung mit vielen Klassen: Für jede Klasse wird eine One-vs-Rest-ROC-Kurve erstellt. Die AUC-Werte der einzelnen Klassen werden zu einem Makro- oder prävalenzgewichteten Wert gemittelt. Das berechnet
roc_auc_scorevon scikit-learn mitmulti_class="ovr".










