Direkt zum Inhalt

AUC und die ROC-Kurve beim maschinellen Lernen

Lerne, wie die AUC-ROC-Kurve binäre Klassifizierungsmodelle bewertet, wobei der Schwerpunkt auf der Leistung über Schwellenwerte hinweg liegt, insbesondere bei unausgewogenen Datensätzen. Nutze die Python-Bibliotheken, um AUC-Werte zu berechnen und Klassifikatoren in einem Arbeitsgang zu vergleichen.
Aktualisierte 1. Okt. 2024  · 9 Min. Lesezeit

Klassifizierungsmodelle gehören zu den am häufigsten verwendeten Vorhersagealgorithmen. Für die Modellierung eines Prozesses können verschiedene Algorithmen verwendet werden, aber wie findest du heraus, welches Modell am effektivsten ist?

Bei der Modellauswahl werden verschiedene Modelle anhand ihrer Leistungskennzahlen wie Präzision, Recall, F1-Score und AUC-ROC bewertet. Kennzahlen wie Präzision, Recall und F1-Score geben zwar Aufschluss darüber, welches Modell am besten zu den Daten passt, aber nur bei einem einzigen Schwellenwert. Die AUC-ROC (Area Under the Receiver Operating Characteristic Curve) hingegen ist eine robuste Kennzahl, die die Güte des Modells über das gesamte Spektrum der Schwellenwerte hinweg bewertet. 

In diesem Beitrag erfährst du, warum AUC-ROC eine wichtige Kennzahl für die Bewertung der Leistung von binären Klassifizierungsmodellen ist und wie du damit zwischen den beiden Klassen unterscheiden kannst. Wenn wir schon dabei sind, solltest du dich auch für unseren Karrierepfad "Machine Learning Scientist with Python " anmelden. Damit wirst du zum Experten in Sklearn, das wir in diesem Lernprogramm verwenden werden.  

Werde ein ML-Wissenschaftler

Bilde dich in Python weiter, um ein/e Wissenschaftler/in für maschinelles Lernen zu werden.
Kostenloses Lernen beginnen

Was ist die ROC-Kurve?

Die ROC-Kurve veranschaulicht die Kompromisse zwischen der Wahr-Positiv-Rate (TPR) und der Falsch-Positiv-Rate (FPR) bei verschiedenen Schwellenwerten. Sie gibt Aufschluss darüber, wie gut das Modell den Kompromiss zwischen der Erkennung positiver Instanzen und der Vermeidung von Fehlalarmen bei verschiedenen Schwellenwerten ausbalancieren kann. AUC, oder Area Under the Curve, ist ein einzelner skalarer Wert zwischen 0 und 1, der eine Momentaufnahme der Leistung des Modells darstellt. Du berechnest die AUC erst, nachdem du die ROC-Kurve erstellt hast, denn die AUC ist die Fläche unter der Kurve.

AUC-ROC-Kurve

Abbildung der AUC-ROC-Kurve. Bild vom Autor

True Positive Rate

Die True-Positive-Rate, auch Sensitivität oder Recall genannt, spiegelt die Fähigkeit eines Modells wider, positive Instanzen korrekt zu identifizieren. Sie misst den Anteil der tatsächlich positiven Fälle, die das Modell erfolgreich identifiziert. Mathematisch lässt sich das wie folgt ausdrücken durch die folgende Gleichung ausgedrückt werden:

Gleichung für die True-Positive-Rate

Wo:

  • TP oder True Positives sind die Anzahl der positiven Klassendatensätze, die das Modell korrekt als positiv vorhersagt.
  • FN oder falsche Negative sind die Anzahl der positiven Klassendatensätze, die das Modell fälschlicherweise als negativ vorhersagt.

Falsch-positiv-Rate

FPR gibt an, wie oft unser Modell negative Klasseninstanzen fälschlicherweise als positiv klassifiziert. Sie misst den Anteil der tatsächlich negativen Instanzen, die vom Modell fälschlicherweise als positiv identifiziert werden, und gibt damit die Rate der Fehlalarme an. Mathematisch lässt sich das wie folgt ausdrücken.

Gleichung für die Falsch-Positiv-Rate

Wo:

  • FP oder False Positives sind die Anzahl der negativen Klassendatensätze, die fälschlicherweise als positiv vorhergesagt werden.
  • TN oder wahre Negative sind die Anzahl der negativen Klassendatensätze, die korrekt als negativ vorhergesagt wurden.

Warum wird die AUC-ROC-Kurve verwendet?

Lasst uns die Szenarien verstehen, in denen AUC-ROC eine relevantere Kennzahl ist.

Leistung messen

Der AUC-ROC ist ein aggregiertes Leistungsmaß für alle möglichen Klassifizierungsschwellenwerte. Im Gegensatz zu Genauigkeit, Präzision oder F1-Score, die von einem bestimmten Schwellenwert abhängen, wird die Leistung des Modells bei verschiedenen Betriebspunkten berücksichtigt.

Modellvergleich

Der AUC-ROC ist ein einziger skalarer Wert, der den Vergleich mehrerer Modelle erleichtert, unabhängig von ihren Klassifizierungsschwellenwerten. Durch seine Schwellenwertunabhängigkeit ist es die bessere Wahl, um einen fairen Vergleich zwischen Modellen mit unterschiedlichen optimalen Schwellenwerten zu ziehen. 

Blick auf das Klassenungleichgewicht

Die meisten realen Datensätze sind unausgewogen, d. h. eine Klasse ist unverhältnismäßig stärker vertreten als die andere, z. B. bei der Stimmungsanalyse, der Betrugserkennung und der Krebserkennung. In solchen Szenarien liefern Messgrößen wie die Genauigkeit eine irreführende Bewertung der Modellleistung, da sie auf die Mehrheitsklasse ausgerichtet sind. In solchen Szenarien sind Metriken wie AUC-ROC zuverlässiger.

Die wichtigsten Konzepte der AUC-ROC-Kurve

Werfen wir einen Blick auf einige der wichtigsten Ideen. 

Erstellen einer ROC-Kurve

Um die ROC-Kurve zum Leben zu erwecken, berechnen wir die TPR und FPR bei verschiedenen Schwellenwerten. Beginnen wir mit dem Importieren der Bibliotheken, die für diese Demo benötigt werden.

from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, roc_curve, auc
import matplotlib.pyplot as plt

Als Nächstes erstellen wir mit der Funktion make-classification() einen binären Klassifizierungsdatensatz mit 1000 Stichproben und 20 Merkmalen.

# Generate a binary classification dataset
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=0)

Teilen wir den Datensatz in Trainings- und Testdaten auf - wir trainieren das Modell auf dem Trainingsset und messen seine Leistung auf dem ungesehenen Testdatenset.

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

Als Nächstes definieren wir das Modellobjekt, indem wir die Klasse LogisticRegression() aufrufen, und trainieren es dann mit der Methode fit auf den Trainingsdaten, wobei X_train die Features und y_train die Labels repräsentiert.

# Train a Logistic Regression model
model = LogisticRegression()
model.fit(X_train, y_train)

Jetzt ist das Modell trainiert und bereit, Vorhersagen zu treffen. Wir rufen die Funktion predict_proba() auf, um die Wahrscheinlichkeit für eine positive Klasse zu erzeugen. Wir verwenden die Methode predict(), um Bewertungskennzahlen wie Genauigkeit, Präzision, Wiedererkennung und F1-Score zu berechnen.

# Predict the probabilities for the test set
y_probs = model.predict_proba(X_test)[:, 1]

# Predict the classes for the test set
y_pred = model.predict(X_test)

Als Nächstes berechnen und drucken wir alle diese Metriken mit ihren jeweiligen Funktionen.

# Calculate the AUC - ROC score
roc_auc = roc_auc_score(y_test, y_probs)

# Calculate other metrics
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

# Print the metrics
print(f"AUC - ROC Score: {roc_auc:.2f}")
print(f"Accuracy: {accuracy:.2f}")
print(f"Precision: {precision:.2f}")
print(f"Recall: {recall:.2f}")
print(f"F1 Score: {f1:.2f}")
AUC-ROC Score: 0.93
Accuracy: 0.87
Precision: 0.87
Recall: 0.87
F1 Score: 0.87

Nun wollen wir die ROC-Kurve zusammen mit der diagonalen Linie, die ein Zufallsmodell darstellt, visualisieren. Um dies zu berechnen, benötigen wir FPR und TPR für jede diskrete Schwelle zwischen 0 und 1. In der folgenden Grafik stellt die orangefarbene Kurve die ROC dar und die Fläche unter dieser Kurve beträgt 0,93.

# Plotting the ROC Curve
fpr, tpr, thresholds = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)

plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

ROC-Kurve für logistische Regression

ROC-Kurve für die logistische Regression. Bild vom Autor

Auswahl des besten Algorithmus mithilfe der ROC-Kurve

Nun wollen wir denselben Datensatz verwenden und die Leistung der vier Klassifizierungsalgorithmen mithilfe von ROC vergleichen. Wir beginnen mit dem Import von RandomForestClassifier, KNeighborsClassifier und SVC und vergleichen diese mit LogisticRegression.

from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC

# Define the models
models = {
    "Logistic Regression": LogisticRegression(),
    "Random Forest": RandomForestClassifier(),
    "SVM": SVC(probability=True),
    "K-Nearest Neighbors": KNeighborsClassifier()
}

# Initialize a dictionary to store AUC - ROC scores
roc_auc_scores = {}

# Plot the ROC curves
plt.figure(figsize=(10, 8))

for name, model in models.items():
    # Train the model
    model.fit(X_train, y_train)
    
    # Predict the probabilities
    y_probs = model.predict_proba(X_test)[:, 1]
    
    # Calculate the AUC - ROC score
    roc_auc = roc_auc_score(y_test, y_probs)
    roc_auc_scores[name] = roc_auc
    
    # Compute ROC curve
    fpr, tpr, _ = roc_curve(y_test, y_probs)
    
    # Plot ROC curve
    plt.plot(fpr, tpr, lw=2, label=f'{name} (AUC = {roc_auc:.2f})')

# Plot the diagonal 50% line
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')

# Customize the plot
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve Comparison')
plt.legend(loc="lower right")
plt.show()

# Print the AUC - ROC scores for each model
for name, score in roc_auc_scores.items():
    print(f'{name}: AUC - ROC = {score:.2f}')

Für jedes Modellobjekt wiederholen wir die fit() und predict_proba(), berechnen die entsprechenden FPR und TPR und stellen dann die jeweiligen Kurven dar.

ROC-Kurve für logistische Regression, Random Forest, SVM und KNN

ROC-Kurve für verschiedene Modelle. Bild vom Autor

Die obige Abbildung zeigt alle vier Kurven, die den vier Klassifikatoren entsprechen, wobei der RandomForestClassifier mit einem AUC-ROC von 0,94 am besten abschneidet, während der KNeighborsClassifier mit einem AUC-ROC von 0,85 am schlechtesten abschneidet. Ein ideales Modell würde die linke obere Ecke des Diagramms umarmen - dort, wo die TPR maximiert und die FPR minimiert ist. Je näher die Kurve an diesem Punkt liegt, desto besser ist die Leistung des Modells.

Wie man die AUC-ROC-Kurve liest und versteht

Schauen wir uns die Kennzahlen an, die die AUC-ROC-Kurve liefert, und verstehen wir ihre Bedeutung.

Interpretation des AUC-Wertes

Die AUC-Werte geben einen schnellen Überblick darüber, wie gut das Modell funktioniert. Wenn der AUC nahe bei 1 liegt, ist unser Modell auf dem Höhepunkt seiner Leistungsfähigkeit. Es zeigt eine hervorragende Leistung mit einer starken Fähigkeit, zwischen Klassen zu unterscheiden. Ein AUC-Wert um 0,5 ist besorgniserregend, da er zeigt, dass das Modell nicht besser ist als das zufällige Raten und somit keine Trennschärfe besitzt. Ein AUC-Wert, der näher bei 0 liegt, ist eine alarmierende Situation. Das deutet darauf hin, dass das Modell völlig falsch liegt, schlimmer noch als ein Münzwurf.

True-Positive-Rate: Erfolg messen

TPR oder Sensitivität ist eine wichtige Kennzahl, die angibt, wie gut unser Modell die positiven Instanzen erfasst. Die TPR wird als der Anteil der tatsächlich positiven Ergebnisse berechnet, die vom Modell richtig erkannt wurden. Das ist ein wichtiger Indikator für die Effektivität unseres Modells bei der Erkennung der echten Signale (Positivmeldungen). Eine hohe TPR bedeutet, dass unser Modell sehr gut erkennt, was am wichtigsten ist.

Falsch-Positiv-Rate: Das Rauschen einschätzen

Auf der anderen Seite hilft uns die FPR, das Rauschen zu verstehen - wie oft unser Modell fälschlicherweise Negatives als Positives identifiziert. FPR ist der Anteil der tatsächlichen Negativmeldungen, die unser Modell fälschlicherweise als Positivmeldungen kennzeichnet. Das ist eine wichtige Kennzahl, um die Kompromisse, die unser Modell eingeht, zu bewerten. Eine hohe FPR weist auf eine Tendenz zu Fehlalarmen hin, die je nach Anwendung kostspielig sein können.

Abwägen von Sensitivität und Spezifität

Die Schönheit und die Herausforderung der binären Klassifizierung liegen in der Einstellung der Schwellenwerte. Deshalb stimmen wir die Sensitivität (TPR) und Spezifität (1 - FPR) unseres Modells genau ab. Wir können steuern, wie empfindlich unser Modell auf die Erkennung positiver Klasseninstanzen reagiert, und die Zahl der Falsch-Positiven reduzieren, indem wir den Schwellenwert anpassen. In den meisten realen Szenarien können die Kosten von falsch-negativen (fehlenden positiven) gegenüber falsch-positiven (falschen Alarmen) erheblich variieren.

Anwendungsfälle der AUC-ROC-Kurve in der realen Welt

Der AUC-ROC ist nicht nur ein theoretisches Konzept. Hier erfährst du, wie diese praktische Kennzahl in verschiedenen Branchen eingesetzt wird, um wichtige Entscheidungen zu treffen:

Medizinische Diagnostik

Die AUC-ROC wird verwendet, um verschiedene diagnostische Tests zu vergleichen. Das ist besonders nützlich, wenn die Kosten für falsch negative Ergebnisse (z. B. das Übersehen einer Krankheit) viel höher sind als für falsch positive Ergebnisse (z. B. eine unnötige Behandlung). Ein bemerkenswertes Beispiel wäre die Krebsvorsorge, bei der der Schwellenwert für weitere Tests auf der Grundlage von Risikofaktoren und verfügbaren Ressourcen angepasst werden kann.

Betrugsaufdeckung

Modelle des maschinellen Lernens werden zunehmend eingesetzt, um betrügerische Aktivitäten im Finanzsektor zu erkennen. Wenn man bedenkt, dass Betrugstransaktionen sehr selten sind, sind solche Datensätze sehr unausgewogen. Daher ist AUC-ROC ein effektiver Bewertungsmaßstab, der es auch ermöglicht, den Schwellenwert auf der Grundlage verschiedener Faktoren anzupassen, z. B. der Höhe des mit der Transaktion verbundenen Risikos, der Kosten für die manuelle Überprüfung jeder Transaktion und der Kosten für die Unannehmlichkeiten für die Kunden.

Cybersecurity 

Ähnlich wie bei der Betrugsaufdeckung sind auch Cyberangriffe relativ seltene Ereignisse. Daher findet AUC-ROC auch in der Cybersicherheit Anwendung, wo es darum geht, Bedrohungen zu erkennen und eine Ermüdung durch falsch-positive Meldungen zu vermeiden.

Alternativen zur AUC-ROC-Kurve

AUC-ROC ist eine beliebte Kennzahl für die Bewertung von binären Klassifizierungsmodellen, aber es gibt Szenarien, in denen andere Kennzahlen geeigneter sein können. Wir wollen einige Alternativen untersuchen und herausfinden, wann man sie einsetzen sollte:

Präzision-Rückruf-Kurve

Die Precision-Recall-Kurve (PRC) ist eine Metrik für unausgewogene Datensätze, die den Wert des maschinellen Lernmodells erheblich beeinflusst, wenn falsch-positive und falsch-negative Ergebnisse unterschiedliche Kosten haben. Im Gegensatz zum AUC-ROC, der bei unausgewogenen Datensätzen eine irreführend optimistische Sichtweise vermitteln kann, konzentriert sich PRC mehr auf die Leistung in Bezug auf die positive Klasse.

F1-Punktzahl

Die F1-Punktzahl ist das harmonische Mittel aus Precision und Recall und stellt eine einzige Metrik dar, die beide ausgleicht. Sie wird verwendet, wenn wir eine klare, einstellige Zusammenfassung der Modellleistung benötigen, insbesondere bei unausgewogenen Datensätzen. Die AUC-ROC bietet eine globalere Sicht, während F1 ein bestimmter Punkt auf der PRC-Kurve ist.

Fazit

Der AUC-ROC ist der Goldstandard bei binären Klassifizierungsproblemen, weil er einen ausgewogeneren Überblick darüber gibt, wie gut das Modell bei verschiedenen Schwellenwerten abschneidet, vor allem in Szenarien mit Klassenungleichheit.

Wir glauben, dass der beste Weg, das Gelernte zu festigen, die praktische Anwendung ist. Die Vielseitigkeit von Python gibt uns die perfekte Möglichkeit, grundlegende Konzepte zu beherrschen. Egal, ob wir unsere Grundlagen auffrischen oder fortgeschrittenere Themen erforschen wollen, jetzt ist der ideale Zeitpunkt, um einzusteigen. Lass uns unsere Python-Grundlagen wiederholen und uns selbst herausfordern, indem wir mit AUC-ROC an komplexen Datensätzen arbeiten.

Werde ein ML-Wissenschaftler

Bilde dich in Python weiter, um ein/e Wissenschaftler/in für maschinelles Lernen zu werden.

Vidhi Chugh's photo
Author
Vidhi Chugh
LinkedIn

Ich bin KI-Stratege und Ethiker und arbeite an der Schnittstelle von Datenwissenschaft, Produkt und Technik, um skalierbare maschinelle Lernsysteme zu entwickeln. Als einer der "Top 200 Business and Technology Innovators" der Welt bin ich auf der Mission, das maschinelle Lernen zu demokratisieren und den Fachjargon zu überwinden, damit jeder an diesem Wandel teilhaben kann.

Häufig gestellte Fragen

Was ist AUC?

AUC, oder Area Under the Curve, ist eine Metrik, die häufig beim maschinellen Lernen verwendet wird, insbesondere bei Klassifizierungsaufgaben. Sie bezieht sich auf die Fläche unter der ROC-Kurve (Receiver Operating Characteristic curve), die die Rate der echten Positiven (Sensitivität) gegen die Falsch-Positiven-Rate (1 - Spezifität) bei verschiedenen Schwellenwerten aufträgt.

Was ist die AUC-ROC-Kurve?

Die AUC-ROC-Kurve ist ein Diagramm, das die Leistung eines binären Klassifizierungsmodells über verschiedene Schwellenwerte hinweg veranschaulicht, indem es die Rate der echten Positiven gegen die Rate der falschen Positiven aufträgt.

Warum ist die AUC-ROC-Kurve bei der Modellbewertung wichtig?

Die AUC-ROC-Kurve bietet ein umfassendes Leistungsmaß für alle Schwellenwerte und ist daher besonders nützlich für den Vergleich von Modellen und die Bewertung ihrer Fähigkeit, zwischen Klassen zu unterscheiden.

Wie wird der AUC-Wert interpretiert?

Der AUC-Wert reicht von 0 bis 1, wobei ein Wert näher an 1 für eine hervorragende Modellleistung steht, 0,5 für eine zufällige Schätzung und ein Wert nahe 0 für eine schlechte Leistung.

Wann sollte ich AUC-ROC gegenüber anderen Metriken verwenden?

AUC-ROC ist ideal, wenn du eine schwellenwertunabhängige Metrik brauchst, vor allem bei unausgewogenen Datensätzen, bei denen traditionelle Metriken wie die Genauigkeit irreführend sein können.

Welche Alternativen gibt es zur AUC-ROC-Kurve?

Alternativen sind die Präzisions-Recall-Kurve für unausgewogene Datensätze und der F1-Score, der Präzision und Recall ausgleicht und eher eine punktuelle Bewertung als eine Gesamtbewertung der Leistung bietet.

Themen

Lerne Python und Statistik mit DataCamp

Zertifizierung verfügbar

Kurs

Einführung in die Statistik in Python

4 hr
115K
Erweitere deine statistischen Fähigkeiten und lerne, wie du mit Python Daten sammelst, analysierst und genaue Schlussfolgerungen daraus ziehst.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Mehr anzeigenMehr anzeigen