Menu
CoddyTech

Precyzja i czułość

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 22 z 58.

Dwa pytania oceniają odpowiedzi testu na grypę. Ile spośród alarmów dotyczących grypy było prawdziwych? Ile spośród rzeczywistych przypadków grypy test wykrył?

Macierz pomyłek testu na grypę narysowana dwukrotnie. Po lewej stronie, z tytułem Precyzja 42 / 45 = 0.933, podświetlona jest kolumna grypy: 3 fałszywe alarmy i 42 wykryte przypadki. Po prawej stronie, z tytułem Czułość 42 / 47 = 0.894, podświetlony jest wiersz grypy: 5 przeoczonych przypadków i 42 wykryte

Precyzja odpowiada na pierwsze pytanie: 42 z 45 alarmów. Czułość odpowiada na drugie: 42 z 47 przypadków.

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 zawsze pokazuje 3 miejsca po przecinku, więc 0.9 zostałoby wyświetlone jako 0.900. To wyświetla:

0.933
0.894

Wybierz w zależności od tego, która pomyłka jest bardziej kosztowna. Przeoczenie przypadku grypy może doprowadzić do jej rozprzestrzenienia, więc ten test wymaga wysokiej czułości. Filtr antyspamowy, który ukrywa prawdziwe wiadomości, wymaga wysokiej precyzji.

challenge icon

Wyzwanie

Średni

Filtr sklepu ukrywa recenzje, które wyglądają na fałszywe. Kod początkowy tworzy dwie wersje jednego modelu: strict_pred i eager_pred, a także odczytuje, który błąd jest gorszy: missed (fałszywa recenzja pozostaje widoczna) czy hidden (prawdziwa recenzja znika).

  1. Wyświetl precyzję i czułość każdego filtra z dokładnością do 3 miejsc po przecinku.
  2. Wyświetl filtr, który popełnia mniej błędów tego rodzaju, jak poniżej (dla missed: Fewer fakes missed: ...).

Dla innego sklepu i hidden:

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

Spróbuj swoich sił

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

# Która pomyłka jest bardziej szkodliwa: przeoczenie (fałszywa opinia pozostaje widoczna) czy ukrycie (prawdziwa opinia zostaje ukryta)
worse = input()

# Jeden wiersz na opinię: 1 w fake oznacza, że opinia została napisana na zamówienie
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]

# Dwa filtry oparte na tym samym modelu: strict ukrywa opinię przy prawdopodobieństwie 0.7, że jest fałszywa, a eager przy 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online