11 · Prawa i prawdy · 3 min czytania · aktualizacja
Co to jest paradoks dokładności i dlaczego accuracy wprowadza w błąd?
W skrócie
Przy niezbalansowanych klasach model, który zawsze przewiduje klasę większościową, ma wysoką dokładność i jest bezużyteczny. Dlaczego i czym to mierzyć.
Co to jest
Gdy jedna klasa dominuje w danych, model o wyższej dokładności (accuracy) może być bezużyteczny, a model o niższej dokładności — znacznie bardziej wartościowy. To nie jest twierdzenie z jedną datą odkrycia, tylko znana od dawna obserwacja z oceny klasyfikatorów; szeroko opisali ją m.in. Haibo He i Edwardo Garcia w przeglądzie uczenia z niezbalansowanych danych z 2009 roku.
Najprostsza ilustracja: jeśli 99% transakcji jest uczciwych, „model” odpowiadający zawsze „uczciwa” ma 99% dokładności. Nie wykrywa ani jednego oszustwa, więc dla zadania, dla którego go zbudowano, jest wart zero. Każdy prawdziwy model, który wykrywa oszustwa kosztem paru fałszywych alarmów, może mieć dokładność niższą — i być nieporównanie lepszy.
Paradoks nie oznacza, że dokładność kłamie. Oznacza, że odpowiada na pytanie, którego zwykle nie zadajemy: „jaki odsetek wszystkich decyzji był trafny?”, a nie „czy znajdujemy to, czego szukamy?”.
Mechanizm — dlaczego tak działa
Dokładność to średnia ważona trafności w każdej klasie, z wagami równymi częstości klas: accuracy = p · czułość + (1 − p) · swoistość, gdzie p to odsetek klasy pozytywnej. Gdy p jest małe, czułość — trafność na rzadkiej klasie — prawie nie wpływa na wynik. Model może ją całkowicie poświęcić i stracić tylko p punktów dokładności.
Dlatego każdą dokładność trzeba porównać z punktem odniesienia: dokładnością klasyfikatora, który zawsze wybiera klasę większościową, czyli 1 − p. Przy 5% przypadków pozytywnych próg „bezużyteczności” to 95%. Wynik 96% brzmi świetnie, ale jest tylko o punkt lepszy od zgadywania.
Druga przyczyna: dokładność traktuje oba rodzaje błędów jednakowo. W praktyce przeoczenie nowotworu lub oszustwa kosztuje zwykle znacznie więcej niż fałszywy alarm. Model optymalizowany pod dokładność wybiera kompromis, który dla użytkownika jest zły.
Lekarstwem są miary, które patrzą na każdą klasę osobno: czułość (recall), precyzja, F1, zbalansowana dokładność (średnia czułości i swoistości) oraz krzywe precision–recall. Zbalansowana dokładność klasyfikatora „zawsze większość” wynosi dokładnie 50%, niezależnie od proporcji klas.
Na przykładzie
Breast Cancer Wisconsin ma 37,3% guzów złośliwych, więc klasyfikator „zawsze łagodny” osiąga 62,7% dokładności. Zróbmy wersję bardziej niezbalansowaną, jak w badaniach przesiewowych: wszystkie 357 łagodnych i losowe 18 złośliwych (ziarno 0), razem 375 przypadków, 4,8% złośliwych. „Zawsze łagodny” ma teraz 95,2% dokładności i czułość 0 — nie znajduje żadnego nowotworu.
Prosta reguła „alarm, gdy worst area > 800” ma dokładność tylko 90,4%, niższą od zgadywania, ale wykrywa 15 z 18 nowotworów kosztem 33 fałszywych alarmów. Regresja logistyczna (5-krotna walidacja krzyżowa) ma 99,5% dokładności i wykrywa 16 z 18 (czułość 0,89, zbalansowana dokładność 0,94); z wagami klas class_weight='balanced' — 17 z 18 (zbalansowana dokładność 0,97). Ranking według dokładności postawiłby bezużyteczne „zawsze łagodny” wyżej niż regułę, która znajduje 83% nowotworów.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)
W praktyce
- Zawsze zaczynaj od punktu odniesienia:
DummyClassifier(strategy='most_frequent')i jego wynik. - Przy niezbalansowanych klasach raportuj
balanced_accuracy_score,recall_score,precision_score,f1_scorealboaverage_precision_scorezamiast samej dokładności. - Oglądaj macierz pomyłek (
ConfusionMatrixDisplay) — od razu widać, czy model nie ignoruje rzadkiej klasy. - W walidacji krzyżowej używaj
StratifiedKFold, żeby każdy fold miał rzadką klasę. - Dobierz próg decyzji (
predict_proba+ własny próg) pod koszt błędów, a nie domyślne 0,5. - Nie „naprawiaj” metryki przez przetasowanie zbioru testowego do proporcji 50/50 — test ma odzwierciedlać prawdziwe proporcje.
Najczęstsze pytania
- Kiedy dokładność jest dobrą miarą?
- Gdy klasy są w miarę zbalansowane, a oba rodzaje błędów kosztują podobnie. Wtedy dokładność jest prosta i czytelna. Przy rzadkich klasach lub różnych kosztach błędów potrzebne są inne miary.
- Czym zastąpić dokładność przy niezbalansowanych danych?
- Zbalansowaną dokładnością, czułością i precyzją (oraz F1 lub średnią precyzją, czyli polem pod krzywą precision–recall). Wybór zależy od tego, który błąd jest droższy.
- Czy wysoka dokładność może oznaczać zły model?
- Tak. Jeśli dokładność jest bliska odsetkowi klasy większościowej, model może po prostu zawsze ją przewidywać. Zawsze porównuj wynik z klasyfikatorem „zawsze większość”.
Źródła
- Haibo He, Edwardo A. Garcia, „Learning from Imbalanced Data”, IEEE Transactions on Knowledge and Data Engineering 21(9), 2009, s. 1263–1284.
- Takaya Saito, Marc Rehmsmeier, „The precision-recall plot is more informative than the ROC plot when evaluating binary classifiers on imbalanced datasets”, PLoS ONE 10(3), 2015, e0118432.
- Kay H. Brodersen, Cheng Soon Ong, Klaas E. Stephan, Joachim M. Buhmann, „The balanced accuracy and its posterior distribution”, Proceedings of ICPR 2010, IEEE.
- Dokumentacja scikit-learn, „Metrics and scoring: quantifying the quality of predictions”, https://scikit-learn.org/stable/modules/model_evaluation.html