Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Metriken | Modelle Vergleichen
Klassifikation mit Python

Metriken

Swipe um das Menü anzuzeigen

Bis zu diesem Punkt haben wir Accuracy als Hauptmetrik zur Bewertung der Modellleistung verwendet. Allerdings weist Accuracy einige Einschränkungen auf. Im Folgenden werden die Schwächen dieser Metrik erläutert und mehrere zusätzliche Metriken – basierend auf TP, TN, FP und FN – vorgestellt, die helfen, diese Probleme zu adressieren.

ConfusionMatrix

Accuracy

Accuracy bezeichnet den Anteil der korrekten Vorhersagen:

accuracy=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{accuracy} = \frac{\text{correct}}{\text{correct} + \text{incorrect}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Die Genauigkeit hat jedoch ihre Schwächen. Stellen Sie sich zum Beispiel vor, Sie möchten vorhersagen, ob ein Patient an einer seltenen Krankheit leidet. Der Datensatz enthält 99,9 % gesunde Patienten und nur 0,1 % mit der Krankheit. In diesem Fall würde eine ständige Vorhersage, dass der Patient gesund ist, zu einer Genauigkeit von 0,999 führen – obwohl ein solches Modell völlig nutzlos ist.

Solche Datensätze werden als unausgewogen bezeichnet, und in solchen Fällen ist die balancierte Genauigkeit eine bessere Kennzahl.

Balancierte Genauigkeit

Die balancierte Genauigkeit berechnet den Anteil der korrekt vorhergesagten positiven Fälle und den Anteil der korrekt vorhergesagten negativen Fälle jeweils separat und mittelt diese anschließend. Dieser Ansatz gibt jeder Klasse das gleiche Gewicht, unabhängig davon, wie unausgewogen der Datensatz ist.

balanced_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Dabei gilt:

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} – Gesamtanzahl der positiven Instanzen (Klasse 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} – Gesamtanzahl der negativen Instanzen (Klasse 0).

Im Beispiel mit der seltenen Krankheit hätte ein Modell, das immer "gesund" vorhersagt, eine balancierte Genauigkeit von 0,5 – was das Problem deutlich macht. Das Problem wird also erkannt.

Allerdings unterscheidet die balancierte Genauigkeit weiterhin nicht zwischen Fehlern vom Typ 1 und Fehlern vom Typ 2 – genau wie die normale Genauigkeit. Hier kommen Präzision und Recall ins Spiel.

Präzision

Die Metrik Präzision gibt an, wie viele der vom Modell als positiv vorhergesagten Werte tatsächlich positiv waren. Sie ist der Anteil der tatsächlich positiven Vorhersagen an allen positiven Vorhersagen, die das Modell gemacht hat:

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Durch die Verwendung der Präzisionsmetrik kann verstanden werden, wie häufig ein Fehler 1. Art auftritt. Eine hohe Präzision bedeutet, dass Fehler 1. Art selten sind, während eine niedrige Präzision darauf hinweist, dass Fehler 1. Art häufig vorkommen.

Sensitivität

Die Metrik Sensitivität zeigt den Anteil der tatsächlich positiven Fälle, die vom Modell korrekt vorhergesagt wurden:

recall=TPTP+FN\text{recall} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

Die Recall-Metrik hilft dabei zu verstehen, wie häufig ein Fehler 2. Art auftritt. Ein hoher Recall bedeutet, dass Fehler 2. Art selten sind, während ein niedriger Recall auf häufige Fehler 2. Art hinweist.

Sowohl Precision als auch Recall haben jedoch Einschränkungen. Ein Modell, das nur die positive Klasse (1) vorhersagt, erreicht beispielsweise einen perfekten Recall, aber seine Precision ist schlecht. Umgekehrt hat ein Modell, das nur eine positive Instanz korrekt vorhersagt und alles andere als negativ klassifiziert, eine perfekte Precision, aber einen katastrophalen Recall.

Dies zeigt, dass es zwar einfach ist, ein Modell mit perfekter Precision oder perfektem Recall zu erstellen, aber viel schwieriger, eines zu entwickeln, das in beiden Metriken gut abschneidet. Deshalb ist es wichtig, beide Metriken zu berücksichtigen – und glücklicherweise gibt es eine Metrik, die beide kombiniert.

F1-Score

Der F1-Score ist das harmonische Mittel von Precision und Recall. Das harmonische Mittel wird dem gewöhnlichen (arithmetischen) Mittel vorgezogen, da es Situationen bestraft, in denen einer der Werte (entweder Precision oder Recall) niedrig ist, und somit eine ausgewogenere Messung der Modellleistung bietet.

F1=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

Der F1-Score kombiniert sowohl Precision als auch Recall in einer einzigen Metrik. Er ist nur dann hoch, wenn sowohl Precision als auch Recall relativ hoch sind, und ist daher ein nützliches Maß, wenn beide Fehlertypen ausgewogen berücksichtigt werden sollen.

Die Wahl der richtigen Metrik hängt von der jeweiligen Aufgabe ab. Accuracy (oder balanced accuracy bei unausgeglichenen Datensätzen) ist intuitiv und liefert einen allgemeinen Eindruck von der Gesamtleistung des Modells. Wenn detailliertere Einblicke in die Fehlerarten des Modells benötigt werden, hilft precision bei der Identifikation von Fehlern vom Typ 1, während recall Fehler vom Typ 2 hervorhebt. Der F1-Score zeigt, wie ausgewogen das Modell in Bezug auf Fehler vom Typ 1 und Typ 2 ist.

MetricsSummary
Note
Mehr erfahren

Eine weitere häufig verwendete Metrik ist ROC/AUC, über die Sie in diesem Artikel mehr lesen können.

Metriken in Python

Scikit-learn stellt Implementierungen für all diese Metriken im Modul sklearn.metrics bereit:

from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score

accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

Wenn alle Metriken wie Precision, Recall und F1-Score gleichzeitig benötigt werden, bietet sklearn die Funktion classification_report() an:

12345678910111213
import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
Note
Hinweis

Support bezeichnet die Anzahl der tatsächlichen Vorkommen jeder Klasse im Testdatensatz. Macro avg berechnet den Durchschnitt jeder Metrik (Precision, Recall, F1) über alle Klassen hinweg gleichgewichtet, ohne Klassenungleichgewicht zu berücksichtigen. Weighted avg mittelt die Metriken ebenfalls über alle Klassen, gewichtet jedoch Klassen mit mehr Instanzen stärker (basierend auf deren Support).

question mark

Welcher Bewertungsmetriker bietet ein Gleichgewicht zwischen Präzision und Recall und liefert einen einzelnen Wert, der beide widerspiegelt?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 5. Kapitel 2
some-alt