Kurs
Algorithmen des Machine Learnings (ML) werden immer häufiger eingesetzt, um Routineaufgaben zu automatisieren und verborgene Muster in Daten zu erkennen. Sie sind jedoch inhärent probabilistisch, ihre Vorhersagen also nicht immer korrekt. Du brauchst daher eine Möglichkeit, die Güte deines ML-Modells einzuschätzen, um Vertrauen in solche Systeme aufzubauen.
Bewertungsmetriken wie Accuracy, Precision, Recall, Mean Squared Error (MSE), Mean Absolute Percentage Error (MAPE) und ähnliche werden häufig genutzt, um die Modellleistung zu messen. Verschiedene Metriken beleuchten die Performance aus unterschiedlichen Blickwinkeln.
Diese Metriken stellen außerdem sicher, dass das Modell seine Aufgabe kontinuierlich besser lernt. Denn: Wenn du nicht misst, kannst du die Leistung deines ML-Systems nicht verbessern.
Accuracy ist eine solche Metrik, die leicht zu verstehen ist und bei ausgewogenen Datensätzen gut funktioniert, also wenn alle Klassen ähnlich stark vertreten sind. In der Praxis sind Phänomene jedoch selten gleich verteilt; entsprechend sind ausgewogene Datensätze schwer zu finden. Accuracy betrachtet vor allem, ob die Mehrheit der Instanzen korrekt identifiziert wird – unabhängig von ihrer Klasse. Bei seltenen, aber wichtigen Ereignissen wie betrügerischen Transaktionen oder Klicks auf Werbeeinblendungen führt Accuracy in die Irre, weil ein Modell, das alles als negative Klasse vorhersagt (kein Betrug, keine Klicks), vermeintlich gut abschneidet. Aufgrund solcher Einschränkungen ist Accuracy nicht die passendste Metrik. Welche Metrik sollten wir stattdessen zur Leistungsbewertung unserer Modelle nutzen?
Precision und Recall sind weit verbreitete Metriken zur Bewertung von Modellen mit unausgewogenen Klassen, zum Beispiel beim Vorhersagen von Kundenabwanderung.
Precision und Recall, kurz erklärt
Precision beschreibt, mit welcher Zuverlässigkeit eine positive Klasse als positiv vorhergesagt wird, während Recall misst, wie gut das Modell die Anzahl der positiven Instanzen im Datensatz erkennt. Die positive Klasse ist dabei die Klasse von Interesse.
Am anschaulichsten werden Precision und Recall über die Confusion-Matrix, die aus vier zentralen Begriffen besteht:
- True Positive (TP): Anzahl korrekt als positiv erkannter Instanzen
- False Positive (FP): Anzahl negativer Instanzen, die fälschlich als positiv erkannt wurden
- True Negative (TN): Anzahl korrekt als negativ erkannter Instanzen
- False Negative (FN): Anzahl positiver Instanzen, die fälschlich als negativ erkannt wurden

Darstellung von der Autorin/dem Autor erstellt
Precision und Recall lassen sich mathematisch aus diesen vier Größen ausdrücken:
Precision ist der Anteil von TP an allen als positiv vorhergesagten Instanzen (TP+FP). Recall ist der Anteil von TP an allen tatsächlich positiven Instanzen (TP+FN).
Mit der folgenden Notation wird der Unterschied weiter verdeutlicht. Beide Metriken haben denselben Zähler: den Schnitt von tatsächlichen positiven Instanzen und positiv vorhergesagten Instanzen, also TP.

Grafik von Shruti Saxena
Der Unterschied liegt im Nenner: Precision bezieht sich auf alle positiv vorhergesagten Instanzen (TP+FP), während Recall auf alle tatsächlich positiven Instanzen (TP+FN) abzielt.
Die Intuition hinter Precision und Recall
Nicht ohne Grund heißt es Confusion-Matrix – die Konzepte sind anfangs tatsächlich verwirrend.
Verinnerlichen wir das mit einem Beispiel: Stell dir vor, du betreibst ein Stahlwerk, in dem aus Eisenerz Eisen gewonnen und mit anderen Mineralien und Elementen vermischt wird (teils unbeabsichtigt). Mit Blick auf die Extraktion hast du mehrere Optionen hinsichtlich Reinheit des gewonnenen Metalls und anfallender Verluste:
Szenario 1: Du priorisierst die Reinheit des gewonnenen Eisens – egal, wie viel Metall dabei verloren geht.
Szenario 2: Du maximierst die Effizienz, also die Menge an gewonnenem Eisen pro Einheit Erz – die Reinheit spielt keine Rolle.
Szenario 3: Du willst beides: hohe Reinheit und möglichst geringe Verluste (maximales Eisen pro Einheit Erz).
Denk an Hochofen oder Elektrolichtbogenofen als Modellierungsoptionen, die unterschiedliche Ergebnisse liefern (Reinheit und Verluste). Nehmen wir an, ein Verfahren liefert 97,5% reines Eisen und 4% des Eisens gehen im Schlamm verloren. Dann entspricht Precision dem Anteil reinen Eisens im gewonnenen Metall, also 97,5%, während Recall dem Anteil des tatsächlich aus dem Erz extrahierten Eisens entspricht – 96% (4% des gesamten Eisens gehen verloren).

Illustration von der Autorin/dem Autor erstellt
Angenommen, du entscheidest dich für das zweite Verfahren, weil du noch reineres Eisen willst – was wiederum mehr Verluste bedeutet. Erhöht sich die Reinheit um 0,5% auf 98%, steigen die Verluste um 11%. Der zugehörige Recall zu einer Precision von 98% sinkt also auf 85%. Dieser Tausch von Recall gegen höhere Precision (und umgekehrt) zeigt die inverse Beziehung zwischen beiden.
Wäre es nicht ideal, alle Precision-Werte mitsamt der jeweils zugehörigen Recall-Werte zu kennen, um die Entscheidung passend zu deinem Ziel zu treffen?
Genau dabei hilft die Precision-Recall-Kurve. In den nächsten Abschnitten tauchen wir tiefer ein. Zuvor klären wir noch das wichtige Konzept des Schwellenwerts, das der PR-Kurve zugrunde liegt.
Das Konzept des Schwellenwerts
Nutzen wir zur Veranschaulichung die Erkennung betrügerischer Transaktionen. Die folgende Tabelle zeigt vier Transaktionen mit den IDs 1 bis 4; jede Transaktion ist entweder betrügerisch oder regulär. Das Betrugserkennungsmodell gibt die Wahrscheinlichkeit aus, dass eine Transaktion betrügerisch ist (gelb markierte Spalte) – daraus ergibt sich implizit auch die Wahrscheinlichkeit für eine reguläre Transaktion.
Eine Transaktion gilt als betrügerisch vorhergesagt, wenn die ausgegebene Wahrscheinlichkeit größer ist als der gewählte Schwellenwert in der Spalte Probability of Fraud transaction; ansonsten wird sie als regulär eingestuft.
|
Transaction ID |
Probability of Fraud transaction |
Probability of regular transaction |
Is fraudulent? (Threshold = 0.9) |
Is fraudulent? (Threshold = 0.5) |
Is fraudulent? (Threshold = 0.4) |
|
1 |
0.3 |
0.7 |
No |
No |
No |
|
2 |
0.4 |
0.6 |
No |
No |
Yes |
|
3 |
0.6 |
0.4 |
No |
Yes |
Yes |
|
4 |
0.95 |
0.05 |
Yes |
Yes |
Yes |
Bei einem strengen Schwellenwert von 0,9 werden die ersten drei Transaktionen als regulär markiert, die letzte als betrügerisch. Ein so hoher Schwellenwert vermittelt große Sicherheit in den Vorhersagen – ein Fall hoher Precision. Im Gegenzug opferst du Recall, weil einige Betrugsfälle durchrutschen.
So ein Szenario ist trotz hoher Precision unerwünscht. Warum?
Weil dem Unternehmen hohe Kosten entstehen, wenn Betrug unentdeckt bleibt – genau das, was das Modell eigentlich verhindern soll. Die Kosten einer betrügerischen Transaktion sind deutlich höher als die Kosten einer fälschlich blockierten regulären Transaktion, also FP.
Am anderen Ende des Spektrums führt ein niedriger Schwellenwert von 0,4 dazu, dass die unteren drei Transaktionen als betrügerisch markiert werden. Ein so großzügiger Schwellenwert blockiert den Großteil der Transaktionen, verärgert Kundinnen und Kunden und belastet zusätzlich das Team, das die Fälle prüfen und die echten Betrugsfälle herausfiltern muss.
Das Unternehmen muss daher Zielmetriken und Zielwerte definieren, um die Balance zu finden – unter Berücksichtigung folgender Kosten:
- Kosten, eine betrügerische Transaktion als regulär einzustufen (False Negatives)
- Kosten, eine reguläre Transaktion als betrügerisch einzustufen (False Positives)
Siehst du dir die Definition von Precision an, erkennst du: False Positives stehen im Nenner – werden sie minimiert, steigt die Precision. Analog gilt: Minimierst du False Negatives, steigt der Recall.
Ob eine Transaktion als betrügerisch oder regulär vorhergesagt wird, hängt also maßgeblich vom Schwellenwert ab.
Was ist eine Precision-Recall-Kurve?
Eine Precision-Recall-Kurve hilft dir, den Schwellenwert anhand gewünschter Precision- und Recall-Werte festzulegen. Außerdem eignet sie sich zum Vergleich verschiedener Modellleistungen über die “Area Under the Precision-Recall Curve” (AUC).
Wie über die Confusion-Matrix erklärt, liefert ein binäres Klassifikationsmodell für verschiedene Schwellenwerte TP, FP, TN und FN; jeder Schwellenwert ergibt ein entsprechendes Precision-Recall-Paar.
Trägst du Recall auf der x-Achse und die zugehörige Precision auf der y-Achse auf, erhältst du eine PR-Kurve mit fallender Tendenz. Sie zeigt den Trade-off zwischen Precision (FPs reduzieren) und Recall (FNs reduzieren) für ein gegebenes Modell. Aufgrund der inversen Beziehung ist die Kurve meist nicht linear: Erhöht sich die eine Metrik, sinkt die andere – allerdings nicht zwingend proportional.

Bild von StackExchange
Nehmen wir an, eine Organisation legt einen minimal akzeptablen Recall von 98% fest. Am Schnittpunkt, markiert mit dem Stern “Low Threshold, Low Precision, High Recall”, liegt die Precision bei 30%.
Die beiden Extrempunkte stehen für Schwellenwerte, die:
- zu niedrig sind → hoher Recall – mit den Kosten für Personalaufwand und verärgerte Kundschaft
- zu hoch sind → hohe Precision – mit den Kosten durch Betrug und Reputationsschäden
Eine PR-Kurve nutzen
Neben der passenden Schwelle im Einklang mit Business-Zielen lässt sich die Fläche unter der Precision-Recall-Kurve mehrerer Modelle/Algorithmen zum Leistungsvergleich nutzen. Gerade bei unausgewogenen Daten sind PR-Kurven oft aussagekräftiger als einzelne Precision-, Recall- oder selbst F1-Werte (harmonisches Mittel aus Precision und Recall).

Bild von Stackoverflow
Diese Metriken sind schwellenwertabhängig: Eine Änderung des Schwellenwerts verändert die Verteilung von TP, FP und FN. Zwei Modelle können sich bei demselben Schwellenwert unterschiedlich verhalten – die PR-Kurve ist deshalb eine robuste Wahl für Modellvergleiche. Im obigen Plot siehst du zwei PR-Kurven verschiedener Algorithmen auf demselben Datensatz – die AUC von Algorithmus zwei ist größer als die von Algorithmus eins und damit für das Problem die bessere Wahl.
Precision-Recall-Kurve in Python implementieren
Jetzt, da wir wissen, was Precision-Recall-Kurven sind und wofür sie genutzt werden, erstellen wir eine solche Kurve in Python.
Schritt 1: Benötigte Python-Pakete importieren
Wir verwenden ein Datenset zur Brustkrebs-Erkennung, wobei “Klasse 1” eine Krebsdiagnose und “Klasse 0” kein Krebs bedeutet.
Der erste Import lädt den Datensatz aus “sklearn.datasets” mit unabhängigen Variablen und Zielvariable. Da es sich um ein gut lernbares Beispieldatenset handelt, nutzen wir den Naive-Bayes-Algorithmus, importiert als “GaussianNB” aus sklearn.
Der Import “precision_recall_curve” liefert verschiedene Schwellenwerte sowie die zugehörigen Precision- und Recall-Werte.
from sklearn.datasets import load_breast_cancer
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import precision_recall_curve
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
Schritt 2: Trainings- und Testdaten vorbereiten
Die unabhängigen Variablen liegen unter dem Schlüssel “data”, die Zielvariable unter “target” im Dictionary “data”. Anschließend teilen wir die Daten mit test_size=0.3 in Trainings- und Testmenge.
# Load model breast cancer data
data = load_breast_cancer()
X = data['data']
y = data['target']
Schauen wir uns die Verteilung der positiven und negativen Klasse an, also Brustkrebs vs. kein Brustkrebs.
import numpy as np
unique, counts = np.unique(y, return_counts=True)
plt.pie(counts, labels=unique, autopct='%.0f%%');

Nun teilen wir die Daten mit train_test_split aus sklearn.model_selection in Train und Test.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
Schritt 3: Modelltraining
Die Trainingsdaten werden an GaussianNB() übergeben, um das Modell zu trainieren. Das trainierte Modellobjekt dient anschließend dazu, Wahrscheinlichkeitsvorhersagen für Train- und Testdaten zu erzeugen.
# Fit a Naive Bayes model
clf = GaussianNB().fit(X_train, y_train)
Schritt 4: Vorhersagen erzeugen
Erzeuge Vorhersagewahrscheinlichkeiten für Trainings- und Testmenge. Darauf basierend bestimmen wir Precision und Recall für verschiedene Schwellenwerte.
# Predict probability
y_prob_train = clf.predict_proba(X_train)[:,1]
y_prob_test = clf.predict_proba(X_test)[:,1]
Schritt 5: PR-Kurve plotten
Die Funktion precision_recall_curve() erwartet zwei Eingaben – die Wahrscheinlichkeiten aus dem Trainingsdatensatz, also y_prob_train, sowie die Ground-Truth-Werte – und liefert drei Ausgaben: Precision, Recall und Schwellenwerte.
precision, recall, thresholds = precision_recall_curve(y_train, y_prob_train)
plt.fill_between(recall, precision)
plt.ylabel("Precision")
plt.xlabel("Recall")
plt.title("Train Precision-Recall curve");
Die Precision- und Recall-Vektoren werden genutzt, um die PR-Kurve über verschiedene Schwellenwerte zu zeichnen, wie unten gezeigt:

PR-Kurve von der Autorin/dem Autor erstellt
Ist die Precision-Recall-Kurve besser als die ROC-Kurve?
Eine ROC-Kurve ähnelt der PR-Kurve, trägt jedoch die True Positive Rate (TPR) gegen die False Positive Rate (FPR) für unterschiedliche Schwellenwerte auf. TPR kennen wir bereits – es ist ein anderer Name für Recall. Konzentrieren wir uns daher auf FPR, die die Fehlklassifikationen aus der negativen Klasse misst. Im Betrugsbeispiel ist das der Anteil regulärer Transaktionen, die als betrügerisch markiert werden.

Bild von Albert Um
Recall bzw. TPR ist also beiden Kurven gemeinsam; der Hauptunterschied liegt zwischen Precision und FPR. Warum ist die PR-Kurve oft informativer?
Weil die PR-Kurve für die Klasse von Interesse aussagekräftigere Einblicke liefert als die ROC-Kurve. Im Betrugsfall sind True Negatives (TN) bei unausgewogenen Daten meist sehr zahlreich, wodurch FPR extrem klein wird. Sagt das aber etwas darüber aus, wie gut das Modell Betrug erkennt?
Nein. Die Precision hingegen beschreibt die Leistung des Modells auf der positiven Klasse (Betrug) und zeigt, ob das Modell streng oder großzügig beim Markieren betrügerischer Transaktionen ist.
Der zweite Nachteil der ROC-Kurve ist ihre Unempfindlichkeit gegenüber unausgewogenen Klassen. Aus der obigen Abbildung siehst du: FPR bezieht sich nur auf die negative Klasse; Änderungen bei FP skalieren mit FP+TN (allen negativen Instanzen). Ändert sich also die Klassenverteilung, verändert sich die ROC oft kaum. Diese Insensitivität gegenüber der Verteilung macht die PR-Kurve häufig zur besseren Wahl.
Fazit
Precision und Recall sind zentrale Metriken zur Bewertung der Performance von Klassifikationsmodellen im Machine Learning. Der Trade-off zwischen beiden hängt von den Geschäftszielen ab und lässt sich am besten mithilfe der PR-Kurve auflösen. Dieser Beitrag hat gezeigt, wie du die PR-Kurve interpretierst und den passenden Schwellenwert wählst – und Schritt für Schritt, wie du sie in Python plottest. Außerdem haben wir erläutert, warum die PR-Kurve häufig aussagekräftiger ist als die ROC-Kurve.