04 · Ocena · 3 min czytania · aktualizacja
Czym jest balanced accuracy i kiedy używać jej zamiast accuracy?
W skrócie
Balanced accuracy to średnia z recalli wszystkich klas. Przy niezbalansowanych klasach nie nagradza modelu, który zawsze wybiera klasę najczęstszą.
Co to jest
Balanced accuracy (BA, zbalansowana trafność) to średnia arytmetyczna recalli wszystkich klas: dla każdej klasy liczymy, jaki odsetek jej prawdziwych przykładów model rozpoznał, i uśredniamy po klasach. Dla dwóch klas to średnia czułości i swoistości.
Zwykła accuracy liczy odsetek poprawnych wierszy, więc gdy jedna klasa stanowi 90% danych, model „zawsze klasa częsta” ma 90%. BA daje mu 1/K, czyli 0,5 przy dwóch klasach. Dlatego BA stosuje się w klasyfikacji z niezbalansowanymi klasami — niezależnie od tego, czy model to sieć, drzewo czy boosting.
Mechanizm — dlaczego tak działa
Accuracy = poprawne wiersze / wszystkie wiersze. Każdy wiersz waży tyle samo, więc klasa częsta dominuje: pomyłki na klasie, która ma 5% wierszy, obniżą accuracy najwyżej o 5 punktów. Model może tę klasę całkowicie ignorować i wciąż wyglądać dobrze — to paradoks trafności.
BA = (1/K) · Σ recallₖ, gdzie recallₖ = poprawnie rozpoznane przykłady klasy k / wszystkie prawdziwe przykłady klasy k. Każda klasa dostaje wagę 1/K bez względu na liczność, więc zignorowanie rzadkiej klasy kosztuje tyle samo co zignorowanie częstej. Przy stałym przewidywaniu jedna klasa ma recall 1, pozostałe 0, stąd BA = 1/K: 0,5 dla dwóch klas, 0,33 dla trzech. To ten sam poziom, który daje losowe zgadywanie — naturalny punkt odniesienia „model nic nie wie”.
Równoważnie: BA to accuracy policzona tak, jakby wszystkie klasy były równie liczne, czyli z wierszami ważonymi odwrotnością częstości klasy. Dlatego optymalizacja pod BA oznacza, że model powinien decydować tak, jakby prior klas był jednostajny — co uzasadnia korektę progu decyzji albo wagi klas w treningu.
Zastrzeżenie: BA ignoruje precyzję. Model, który klasę rzadką wskazuje przy każdej wątpliwości, ma na niej wysoki recall, a fałszywe alarmy obniżają tylko recall dużej klasy, i to nieznacznie. F1 albo jawne koszty pomyłek ukarzą to mocniej. Wybór metryki powinien wynikać z kosztów błędów, nie z nawyku.
Na przykładzie
Breast Cancer Wisconsin ma 569 guzów, z czego 212 (37%) złośliwych. Model, który zawsze mówi „łagodny”, ma na teście (30% danych, random_state=0) accuracy 0,63 i BA dokładnie 0,5.
Silniejszy efekt widać po sztucznym niezbalansowaniu: zostawiliśmy wszystkie 357 guzów łagodnych i losowe 40 złośliwych (seed 0), czyli 10% klasy rzadkiej. Regresja logistyczna na dwóch słabych cechach (średnia tekstura i gładkość), oceniana 5-krotną walidacją krzyżową, osiągnęła accuracy 0,90 — tyle samo, co „zawsze łagodny” — przy BA 0,54, bo rozpoznała tylko 10% guzów złośliwych. Ten sam model z class_weight="balanced" ma accuracy zaledwie 0,73, ale BA 0,73: rozpoznaje 73% złośliwych i 73% łagodnych. Accuracy wskazałaby gorszy model jako lepszy.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)
W praktyce
- scikit-learn:
balanced_accuracy_score(y_true, y_pred); w walidacji krzyżowejscoring="balanced_accuracy";adjusted=Trueprzeskalowuje wynik tak, by zgadywanie dawało 0. - To metryka oceny, nie strata: model trenuje się entropią krzyżową, a BA poprawia się wagami klas (
class_weight="balanced") lub przesunięciem progu po treningu. - Konkursy z niezbalansowanymi klasami często używają BA lub macro-F1 właśnie po to, by leniwy model nie wygrał.
- Raportuj też macierz pomyłek — ta sama BA 0,7 może oznaczać bardzo różne rozkłady błędów.
- Typowy błąd: raportowanie accuracy 95% na zbiorze, w którym klasa większościowa ma 95%.
Najczęstsze pytania
- Czym różni się balanced accuracy od accuracy?
- Accuracy liczy odsetek poprawnych wierszy, więc dominuje klasa częsta. Balanced accuracy liczy trafność w każdej klasie osobno i uśrednia, więc każda klasa waży tyle samo. Przy zbalansowanych klasach obie są prawie równe; przy niezbalansowanych BA jest niższa i uczciwsza.
- Jaka wartość balanced accuracy jest dobra?
- Punkt odniesienia to 1/K (0,5 dla dwóch klas, 0,33 dla trzech) — tyle ma model, który nic nie wie. Wartość „dobra” zależy od zadania: w trudnych problemach 0,7 bywa świetnym wynikiem, w łatwych 0,95 to minimum. Zawsze porównuj z prostym modelem bazowym.
- Balanced accuracy czy F1?
- BA patrzy tylko na recall klas — wybierz ją, gdy przeoczenie każdej klasy kosztuje podobnie. Macro-F1 łączy precyzję i recall — wybierz je, gdy fałszywe alarmy też są kosztowne. Przy dwóch klasach i nieustalonym progu rozważ też ROC AUC.
Źródła
- Brodersen, K. H., Ong, C. S., Stephan, K. E., Buhmann, J. M. (2010). "The balanced accuracy and its posterior distribution". ICPR, 3121–3124. doi:10.1109/ICPR.2010.764
- He, H., Garcia, E. A. (2009). "Learning from imbalanced data". IEEE Transactions on Knowledge and Data Engineering 21(9), 1263–1284. doi:10.1109/TKDE.2008.239
- Géron, A. (2022). Hands-On Machine Learning, 3rd ed., O'Reilly, rozdz. 3 "Classification" (performance measures).
- scikit-learn:
balanced_accuracy_score. https://scikit-learn.org/stable/modules/model_evaluation.html#balanced-accuracy-score