Kurs uczenia maszynowego od zera · Lekcja 2.2 · 9 z 33 gotowych lekcji · 10 min
Ocena klasyfikatora: więcej niż trafność
W skrócie
Trafność ukrywa, jakie pomyłki popełnia model. Macierz pomyłek, precyzja i czułość pokazują kompromis, który tworzy próg, na danych o guzach piersi.
Rozgrzewka Dwa pytania z wcześniejszych lekcji. Minuta, a lekcji nie blokuje.
Czujnik dymu, który nigdy nie piszczy, nigdy nie podnosi fałszywego alarmu. Czujnik, który wyje przy każdym przypieczonym toście, nigdy nie przegapi prawdziwego pożaru. Który jest lepszy? Żaden — a pojedyncza liczba trafności nie powie ci nawet, który z nich masz. Ta lekcja jest o liczeniu pomyłek tak, żeby było widać ich rodzaj, a nie tylko liczbę.
Wybierz odpowiedź i pewność.
Odpowiedz, żeby odblokować lab.
Eksperyment
Ten interaktywny eksperyment działa w przeglądarce z włączonym JavaScriptem. Tekst wokół opisuje, co w nim widać.
Pokaż odpowiedź
Poprawna odpowiedź: 0,1
Przy progu 0,1 czułość wynosi 96,9% (62 z 64 złośliwych guzów wykryte), przy 0,2 już tylko 92,2%, a przy 0,5 82,8%. Płacisz fałszywymi alarmami: 20 zdrowych biopsji oznaczonych jako złośliwe przy progu 0,1 wobec 3 przy progu 0,5.
Spróbuj
- Przesuń suwak progu w lewo. Zobacz, jak w macierzy pomyłek kurczą się fałszywie negatywne, a rosną fałszywie pozytywne, i jak czułość z precyzją idą w przeciwne strony.
- Przesuń suwak progu w prawo i obserwuj odwrotny ruch. Zerkaj na trafność: czy mówi ci, jaki rodzaj pomyłek popełniasz?
- Znajdź najwyższy próg, przy którym żaden guz złośliwy nie zostaje przeoczony. Odczytaj, ile guzów łagodnych jest wtedy fałszywie oznaczonych.
- Wybierz próg dla badania przesiewowego i powiedz w jednym zdaniu, dlaczego ten.
Gdy już sprawdzisz to w labie, zobaczmy, co się tam właściwie działo.
Pomysł w prostych słowach
Wracamy do 569 guzów piersi z lekcji 1. Model daje każdemu guzowi wynik: im wyższy, tym bardziej prawdopodobne, że guz jest złośliwy. Próg zamienia wynik w decyzję. Każda decyzja ląduje w jednej z czterech szufladek:
| przewidziany złośliwy | przewidziany łagodny | |
|---|---|---|
| naprawdę złośliwy | prawdziwie pozytywny (TP) | fałszywie negatywny (FN) |
| naprawdę łagodny | fałszywie pozytywny (FP) | prawdziwie negatywny (TN) |
Ta tabela to macierz pomyłek. Na przekątnej są decyzje trafne. W dwóch pozostałych polach siedzą dwa bardzo różne rodzaje błędów: fałszywie pozytywny to fałszywy alarm (zdrowa pacjentka wysłana na dodatkowe badania), fałszywie negatywny to przeoczenie (nowotwór odesłany do domu).
Czujnik dymu dobrze to pokazuje. Milczący czujnik nie ma fałszywych alarmów, za to ma mnóstwo przeoczeń. Czujnik od tostów — odwrotnie. Dobry czujnik równoważy jedno i drugie według tego, ile kosztuje każda pomyłka. W medycynie te koszty są bardzo nierówne: przeoczony nowotwór może kosztować życie, a fałszywy alarm — stres i dodatkową biopsję. Dlatego ta sama macierz pomyłek może być do przyjęcia w jednym zastosowaniu, a w innym nie.
Dlaczego to działa
Dwie liczby streszczają macierz dużo lepiej niż trafność:
precyzja = TP / (TP + FP) czułość = TP / (TP + FN)
Czułość (ang. recall) odpowiada na pytanie: jaką część wszystkich guzów złośliwych wyłapaliśmy? Precyzja odpowiada: jaka część guzów, które nazwaliśmy złośliwymi, naprawdę taka była? Czułość dotyczy nieprzeoczenia, precyzja — niepodnoszenia fałszywego alarmu.
Próg steruje kompromisem między nimi. Obniż próg, a więcej guzów zostanie oznaczonych jako złośliwe: wyłapiesz więcej nowotworów (czułość rośnie), ale oznaczysz też więcej łagodnych (precyzja zwykle spada). Podnieś go, a stanie się odwrotnie. Żaden próg nie da maksimum obu naraz, chyba że model rozdziela klasy idealnie. Wybór progu nie jest więc techniczną drobnostką, tylko decyzją o wartościach: ile fałszywych alarmów jesteś gotów przyjąć, żeby nie przeoczyć jednego nowotworu?
Trafność miesza wszystkie cztery pola w jedną liczbę i ten wybór ukrywa. Ukrywa też niezrównoważenie klas. Skoro 357 z 569 guzów jest łagodnych, model, który wszystko nazywa łagodnym, ma rację w niemal dwóch trzecich przypadków i nie wyłapuje ani jednego nowotworu — czułość równa zeru. To paradoks trafności: model może wyglądać przyzwoicie pod względem trafności i być bezużyteczny w tym, do czego go zbudowano.
Gdy potrzeba jednej liczby, która nie ukrywa żadnej ze stron, często sięga się po miarę F1, czyli średnią harmoniczną precyzji i czułości. Jest wysoka tylko wtedy, gdy obie są wysokie. Model, który każdy guz nazywa złośliwym, ma pełną czułość, ale marną precyzję — i F1 pokaże to bezlitośnie.
Częsty błąd
Najczęstszy błąd to podawanie samej trafności, zwłaszcza na danych niezrównoważonych, gdzie jedna klasa jest dużo rzadsza od drugiej. Drugi to zostawienie domyślnego progu 0,5 bez pytania, ile kosztują pomyłki. Badanie przesiewowe, w którym przeoczenie może być śmiertelne, a fałszywy alarm oznacza dodatkowe badanie, powinno zwykle mieć niższy próg niż test, po którym idzie się na operację. Trzecia pułapka to mylenie precyzji z czułością; pamiętanie pytań, na które odpowiadają — „spośród tych, które oznaczyłem” kontra „spośród tych, które istnieją” — pomaga bardziej niż wkuwanie wzorów.
Do tej pory ocenialiśmy modele na jednym ustalonym zbiorze testowym. Ale model może błyszczeć na danych, na których się uczył, i zawodzić na wszystkich innych. W następnej lekcji wywołamy to celowo: przeuczenie.
Złap błąd AI
Tak odpowiedział chatbot. Jedno zdanie jest merytorycznie błędne. Które?
Pytanie: Przy progu 0,1 mój klasyfikator guzów wykrywa 62 z 64 złośliwych guzów, ale oznacza też 20 łagodnych. Jak to odczytać?
Pokaż błędne zdanie
Błędne zdanie: A ponieważ precyzja to odsetek wszystkich złośliwych guzów, które model wyłapuje, jest tu równie wysoka.
To jest definicja czułości. Precyzja odpowiada na inne pytanie — ile spośród oznaczonych guzów jest naprawdę złośliwych — i przy progu 0,1 obniża ją 20 fałszywych alarmów, podczas gdy przy progu 0,5 są tylko 3.
Quiz
Trzy pytania na sprawdzenie się. Wybierz odpowiedź albo rozwiń odpowiedź pod pytaniem. Z klawiatury: strzałki wybierają, Enter albo spacja zatwierdza.
Najważniejsze wnioski
- Macierz pomyłek dzieli decyzje na prawdziwie i fałszywie pozytywne oraz negatywne.
- Czułość to odsetek wyłapanych prawdziwych przypadków; precyzja to odsetek trafnych wśród oznaczonych.
- Próg wymienia czułość na precyzję, a właściwa równowaga zależy od kosztu każdej pomyłki.
- Trafność ukrywa rodzaj pomyłek i na niezrównoważonych danych może wyglądać dobrze przy zerowej czułości.
Głębiej: wzór, kod, praktyka
Matematyka
Próg t zamienia wynik na decyzję: przewiduj „złośliwy”, gdy wynik ≥ t. Zliczenie czterech pól daje miary:
- trafność,
accuracy = (TP + TN) / n, czyli odsetek wszystkich trafnych decyzji; - precyzja,
precision = TP / (TP + FP), czyli odsetek prawdziwych alarmów; - czułość,
recall = TP / (TP + FN), czyli odsetek wykrytych prawdziwych przypadków; F1 = 2 · precision · recall / (precision + recall), średnia harmoniczna obu, która jest niska, gdy któraś z nich jest niska.
Obniżenie t może tylko dodać alarmy, więc TP i FP nigdy nie maleją, a FN nigdy nie rośnie. Dlatego czułość nie spada, gdy próg maleje, a precyzja zwykle spada. Model, który zawsze odpowiada „łagodny”, ma TP = 0, więc jego czułość wynosi 0, a trafność to po prostu udział klasy większościowej: 357 / 569.
W kodzie (Python)
569 guzów z lekcji, 10 cech „mean” z laba, regresja logistyczna ze skalowaniem i stratyfikowany podział z 30% na test (171 biopsji, random_state=1). Liczby z laba (TP / FN / FP) to 53 / 11 / 3 przy progu 0,5 i 62 / 2 / 20 przy 0,1. Ten podział nie jest labowy, więc liczby trochę się różnią:
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, b = load_breast_cancer(return_X_y=True, as_frame=True)
X = X.filter(like="mean ") # 10 cech „mean”, jak w labie
y = 1 - b # w sklearn 0 = złośliwy; odwracamy, żeby 1 = złośliwy
print(f"tumours {len(y)}, benign {(y == 0).sum()}, always-benign accuracy {(y == 0).mean():.3f}")
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, stratify=y, random_state=1)
score = make_pipeline(StandardScaler(), LogisticRegression()).fit(Xtr, ytr).predict_proba(Xte)[:, 1]
for t in (0.5, 0.1):
flag = score >= t
tp, fp, fn = (flag & (yte == 1)).sum(), (flag & (yte == 0)).sum(), (~flag & (yte == 1)).sum()
print(f"t={t}: TP {tp} FN {fn} FP {fp} precision {tp / (tp + fp):.3f} recall {tp / (tp + fn):.3f}")
Wynik
tumours 569, benign 357, always-benign accuracy 0.627
t=0.5: TP 53 FN 11 FP 2 precision 0.964 recall 0.828
t=0.1: TP 61 FN 3 FP 13 precision 0.824 recall 0.953
Przy 0,5 czułość wynosi tu 0,828, tak jak w labie, ale przy 0,1 jest to 0,953 wobec labowych 96,9%, a fałszywych alarmów jest 13 zamiast 20. Czułość zmienia się między podziałami, i o tym jest lekcja 2. Obniżenie progu z 0,5 do 0,1 nadal podnosi czułość i obniża precyzję, tak jak mówi lekcja. Punkt odniesienia „zawsze łagodny” wygląda przyzwoicie pod względem trafności i nie wykrywa ani jednego raka.
Pobierz notebook (.ipynb). Otwórz go w Jupyterze albo wgraj do Google Colab; brakujące dane pobierze sam.
Dla praktyka
- Obok trafności podawaj precyzję i czułość (albo całą macierz pomyłek) i zawsze mów, która klasa jest „pozytywna”.
- Próg wybieraj na danych walidacyjnych, według kosztu każdego błędu, a nie z przyzwyczajenia. Domyślne 0,5 to tylko konwencja.
- Zawsze licz punkt odniesienia: odpowiedź klasą większościową. Jeśli twoja trafność jest bliska, model nauczył się niewiele.
- Czułość i precyzja przy jednym progu to jeden punkt krzywej. Żeby uczciwie porównać dwa modele, porównaj je przy tej samej czułości albo spójrz na całą krzywą precyzja–czułość.
- Wynik to tylko ranking, dopóki nie jest skalibrowany. Nie czytaj 0,3 jako „30% szans” bez sprawdzenia kalibracji.
Czy to było pomocne?
Dzięki! To pomaga nam poprawiać Atlas.
Więcej w Atlasie
Hasła encyklopedii o pojęciach z tej lekcji: