Menu
CoddyTech

Präzision und Trefferquote

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 22 von 58.

Zwei Fragen bewerten die Antworten des Tests auf Grippe. Wie viele der Grippealarme waren richtig? Wie viele der tatsächlichen Grippefälle hat er erkannt?

Die Konfusionsmatrix des Grippetests ist zweimal dargestellt. Links, mit dem Titel Präzision 42 / 45 = 0.933, ist die Spalte „Grippe gemeldet“ hervorgehoben: 3 Fehlalarme und 42 erkannte Fälle. Rechts, mit dem Titel Trefferquote 42 / 47 = 0.894, ist die Grippezeile hervorgehoben: 5 übersehene und 42 erkannte Fälle

Präzision beantwortet die erste Frage: 42 von 45 Alarmen. Recall beantwortet die zweite: 42 von 47 Fällen.

from sklearn.metrics import precision_score, recall_score

print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}")

:.3f zeigt immer 3 Nachkommastellen an, daher würde 0.9 als 0.900 ausgegeben. Dies gibt Folgendes aus:

0.933
0.894

Wähle danach, welcher Fehler teurer ist. Ein übersehener Grippefall kann sich ausbreiten, daher braucht dieser Test eine hohe Trefferquote. Ein Spamfilter, der echte E-Mails im Spamordner verschwinden lässt, braucht eine hohe Präzision.

challenge icon

Aufgabe

Mittel

Der Filter eines Shops blendet Rezensionen aus, die gefälscht wirken. Der Starter erstellt aus einem Modell zwei Versionen, strict_pred und eager_pred, und liest ein, welcher Fehler schwerer wiegt: missed (eine gefälschte Rezension bleibt sichtbar) oder hidden (eine echte Rezension wird ausgeblendet).

  1. Gib die Präzision und den Recall jedes Filters mit 3 Dezimalstellen aus.
  2. Gib den Filter aus, der weniger Fehler dieser Art macht, wie unten gezeigt (für missed: Fewer fakes missed: ...).

Für einen anderen Shop und hidden:

Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strict

Probier es selbst

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score

# Welcher Fehler ist schlimmer: übersehen (eine gefälschte Bewertung bleibt sichtbar) oder verborgen (eine echte Bewertung wird ausgeblendet)?
worse = input()

# Eine Zeile pro Bewertung: 1 in fake bedeutet, dass die Bewertung auf Bestellung geschrieben wurde
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]

# Zwei Filter aus demselben Modell: strict blendet eine Bewertung bei einer Wahrscheinlichkeit von 0.7 für eine Fälschung aus, eager schon bei 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler