04 · Ocena · 4 min czytania · Interaktywne · aktualizacja
Co to jest macierz pomyłek (confusion matrix) i jak ją czytać?
W skrócie
Macierz pomyłek zlicza, ile przykładów każdej prawdziwej klasy model przypisał do każdej klasy. Z niej wynikają trafność, precyzja, recall i inne metryki.
Co to jest
Macierz pomyłek (confusion matrix) to tabela, w której wiersze odpowiadają prawdziwym klasom, kolumny klasom przewidzianym przez model, a w komórkach stoi liczba przykładów o danej kombinacji. Na przekątnej leżą trafienia, poza nią — konkretne rodzaje błędów. To najbardziej podstawowy i najbogatszy w informację sposób opisania wyników klasyfikatora.
W klasyfikacji binarnej ma cztery komórki: TP (prawdziwie pozytywne — chory rozpoznany jako chory), TN (prawdziwie negatywne — zdrowy jako zdrowy), FP (fałszywie pozytywne, błąd I rodzaju — fałszywy alarm) i FN (fałszywie negatywne, błąd II rodzaju — przeoczenie). Pojedyncza liczba, jak trafność, zlewa te cztery wartości w jedną i gubi informację, jakie błędy model popełnia.
Mechanizm — dlaczego tak działa
Każda popularna metryka klasyfikacji jest funkcją tych czterech liczb. Trafność = (TP + TN) / wszystkie. Precyzja = TP / (TP + FP) — jaka część alarmów jest prawdziwa. Recall (czułość) = TP / (TP + FN) — jaką część prawdziwych przypadków wykryliśmy. Swoistość = TN / (TN + FP). Odczytując macierz, widzimy od razu, która z nich jest problemem, zamiast zgadywać na podstawie jednej liczby.
Macierz pokazuje też, dlaczego trafność bywa myląca. Gdy pozytywów jest 1%, model mówiący zawsze „negatywny” ma 99% trafności i TP = 0. Macierz ujawnia to od razu: cała kolumna „pozytywny” jest pusta.
Ważne: macierz pomyłek nie jest cechą samego modelu, lecz modelu i progu decyzyjnego. Klasyfikator zwykle zwraca prawdopodobieństwo, a etykietę dostajemy, porównując je z progiem (domyślnie 0,5). Obniżenie progu przesuwa przykłady z kolumny „negatywny” do „pozytywny”: FN maleje, FP rośnie. Nie ma progu, który poprawia wszystko naraz — to wymiana jednych błędów na drugie, a o kursie wymiany decydują koszty błędów w danym zastosowaniu.
Macierz zależy też od proporcji klas w zbiorze, na którym ją liczymy. Te same zdolności modelu dadzą zupełnie inną precyzję w szpitalu onkologicznym i w badaniach przesiewowych, bo zmienia się udział chorych. Recall i swoistość są od tego niezależne, precyzja i trafność — nie.
W problemach wieloklasowych macierz ma wymiar K × K. Komórki poza przekątną pokazują, które klasy są ze sobą mylone, co często podpowiada, czego modelowi brakuje (np. cyfry 3 i 8 różnią się lewą połową).
Na przykładzie
Na zbiorze Breast Cancer Wisconsin (569 guzów, klasa pozytywna = złośliwy) wytrenowałem regresję logistyczną ze standaryzacją cech na 426 przykładach i oceniłem na 143 testowych (podział warstwowy, test_size=0.25, random_state=0). W teście było 53 guzy złośliwe i 90 łagodnych. Przy progu 0,5 macierz wygląda tak: TN = 90, FP = 0, FN = 2, TP = 51. Trafność to 98,6%, precyzja 100%, recall 96,2%: model nie wywołał ani jednego fałszywego alarmu, ale przeoczył dwa nowotwory.
W diagnostyce przeoczenie jest zwykle groźniejsze od fałszywego alarmu, więc obniżmy próg do 0,1. Macierz: TN = 79, FP = 11, FN = 0, TP = 53. Wszystkie złośliwe guzy wykryte, ale 11 łagodnych skierowano by na dodatkową diagnostykę; trafność spadła do 92,3%. Która macierz jest lepsza, zależy od kosztów — i właśnie dlatego warto patrzeć na macierz, a nie tylko na trafność, która wskazałaby pierwszy wariant.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)
W praktyce
confusion_matrix(y_true, y_pred)zsklearn.metrics; w scikit-learn wiersze to klasy prawdziwe, kolumny przewidziane. Dla przypadku binarnegotn, fp, fn, tp = confusion_matrix(...).ravel().- Wizualizacja:
ConfusionMatrixDisplay.from_estimator(model, X_test, y_test)lubfrom_predictions. normalize='true'dzieli przez sumy wierszy (na przekątnej pojawia się recall każdej klasy),normalize='pred'przez sumy kolumn (precyzja).- Sprawdź, która klasa jest „pozytywna”. W
load_breast_canceretykieta 1 oznacza guz łagodny, więc trzeba ją odwrócić, jeśli pozytywem ma być nowotwór. - Typowy błąd: różne konwencje osi w podręcznikach i bibliotekach. Zawsze podpisuj osie.
Najczęstsze pytania
- Dlaczego to się nazywa „macierz pomyłek”?
- Bo pokazuje, z czym model myli każdą klasę. Komórka w wierszu „kot” i kolumnie „pies” mówi, ile kotów uznano za psy, a komórka odwrotna — ile psów za koty. Te dwie liczby zwykle nie są równe, więc macierz nie jest symetryczna.
- Który błąd jest gorszy: FP czy FN?
- To zależy od zastosowania, nie od statystyki. W badaniach przesiewowych zwykle FN, w filtrze antyspamowym raczej FP (zgubiony ważny mail). Koszty warto ustalić przed trenowaniem i dobrać do nich próg.
- Jak czytać macierz dla wielu klas?
- Patrz najpierw na przekątną znormalizowaną po wierszach — to recall każdej klasy. Potem szukaj największych komórek poza przekątną: wskazują pary klas, które model myli najczęściej.
Źródła
- Géron A. „Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow”, 3rd ed., O’Reilly 2022, rozdz. 3 (Classification).
- James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., Springer 2021, rozdz. 4 (Classification).
- Fawcett T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8).
- Dokumentacja scikit-learn: Confusion matrix — https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix