ML Atlas

04 · Ocena · 4 min czytania · Interaktywne · aktualizacja

Czym różni się macro, micro i weighted F1 w klasyfikacji wieloklasowej?

W skrócie

W klasyfikacji wieloklasowej precyzję, recall i F1 liczy się dla każdej klasy osobno i uśrednia. Sposób uśredniania decyduje, czy liczą się rzadkie klasy.

Co to jest

Metryki wieloklasowe to sposoby oceny klasyfikatora, który wybiera jedną z K > 2 klas. Precyzja, recall i F1 są z natury binarne, więc liczy się je dla każdej klasy w schemacie „ta klasa przeciw reszcie”, a potem łączy w jedną liczbę przez uśrednianie makro, mikro lub ważone. Do tego dochodzą trafność, zbalansowana trafność, macierz pomyłek K × K oraz metryki rankingowe, jak trafność top-k i ROC AUC jeden-przeciw-reszcie.

Uśrednianie makro liczy metrykę osobno dla każdej klasy i bierze zwykłą średnią — każda klasa waży tyle samo, niezależnie od liczności. Mikro najpierw sumuje TP, FP i FN ze wszystkich klas, a dopiero potem liczy metrykę — każdy przykład waży tyle samo. Ważone (weighted) to średnia z metryk klas ważona ich licznością.

Mechanizm — dlaczego tak działa

Różnica między makro a mikro sprowadza się do pytania: co jest jednostką sprawiedliwości — klasa czy przykład? Przy uśrednianiu mikro klasa licząca 90% danych dominuje wynik; model, który ignoruje rzadkie klasy, nadal wypada świetnie. Przy uśrednianiu makro rzadka klasa, w której model zawodzi, ciągnie średnią w dół tak samo jak klasa najliczniejsza. Jeśli wszystkie klasy są równie ważne biznesowo, makro jest uczciwsze; jeśli liczy się ogólna liczba poprawnych decyzji, lepsze jest mikro.

W klasyfikacji jednoetykietowej (każdy przykład ma dokładnie jedną klasę) każdy błąd jest jednocześnie fałszywym pozytywem dla klasy przewidzianej i fałszywym negatywem dla klasy prawdziwej. Dlatego suma FP równa się sumie FN i mikro-precyzja = mikro-recall = mikro-F1 = trafność. To częste źródło nieporozumień: mikro-F1 nie wnosi tu nic nowego. Makro-recall z kolei jest dokładnie zbalansowaną trafnością.

Gdy klasy są w przybliżeniu równoliczne, wszystkie trzy średnie dają podobne liczby, a różnice ujawniają się dopiero w wynikach dla poszczególnych klas. Dlatego warto zawsze patrzeć na raport per klasa i macierz pomyłek, a nie tylko na średnią: ta sama średnia może kryć model równomiernie dobry albo świetny w ośmiu klasach i bezużyteczny w dwóch.

Zastrzeżenie dotyczące makro-F1: istnieją dwie definicje — średnia z F1 klas albo F1 policzone ze średniej precyzji i średniego recall. Dają różne liczby. scikit-learn stosuje pierwszą. Przy porównywaniu z literaturą warto sprawdzić, której użyto.

Metryki rankingowe ratują sytuację, gdy klas jest dużo i podobne klasy łatwo pomylić: trafność top-5 w rozpoznawaniu obrazów pyta, czy prawidłowa klasa jest wśród pięciu najbardziej prawdopodobnych. ROC AUC dla wielu klas liczy się jako średnią z krzywych jeden-przeciw-reszcie lub jeden-przeciw-jednemu.

Na przykładzie

Zbiór Digits to 1797 obrazków cyfr 8 × 8 pikseli, około 180 na klasę. Po podziale warstwowym 75/25 (random_state=0, 450 przykładów testowych) naiwny klasyfikator bayesowski (GaussianNB) uzyskał trafność 83,6%, a więc i mikro-F1 = 0,836. Makro-F1 = 0,835 i ważone F1 = 0,836 są prawie takie same, bo klasy są niemal równoliczne. Średnie ukrywają jednak duże różnice między klasami. Recall cyfry 2 wynosi tylko 0,50 przy precyzji 1,0: model rzadko mówi „2”, ale gdy już mówi, ma rację. Cyfra 8 ma odwrotny problem — precyzja 0,52, bo model wrzuca do niej cudze przykłady.

Macierz pomyłek wyjaśnia, skąd to się bierze: aż 15 z 44 dwójek zaklasyfikowano jako ósemki, a kolejne 7 jako jedynki. Dla porównania regresja logistyczna ze standaryzacją ma trafność 96,9%, makro-F1 0,969, a jej najczęstsza pomyłka to 3 ósemki uznane za jedynki. Z samej średniej nie dało się dowiedzieć, że pierwszy model ma w zasadzie problem z dwiema konkretnymi klasami.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: sieć 64→32→10 uczy się rozpoznawać ręcznie pisane cyfry 8×8 w przeglądarce; po 10 epokach trafia w około 95% cyfr testowych, a macierz pomyłek pokazuje, które cyfry myli.

Dane: Digits (ręcznie pisane cyfry 8×8)

W praktyce

  • classification_report(y_true, y_pred, digits=3) wypisuje precyzję, recall i F1 dla każdej klasy oraz średnie makro i ważoną.
  • f1_score(y_true, y_pred, average='macro' | 'micro' | 'weighted' | None); average=None zwraca wynik dla każdej klasy.
  • balanced_accuracy_score = makro-recall; dobra domyślna metryka przy niezbalansowanych klasach.
  • top_k_accuracy_score(y_true, proba, k=5) i roc_auc_score(y_true, proba, multi_class='ovr') wymagają prawdopodobieństw dla wszystkich klas.
  • W walidacji krzyżowej stosuj StratifiedKFold, by rzadkie klasy pojawiały się w każdym foldzie; inaczej makro-metryki stają się nieokreślone.
  • Typowy błąd: raportowanie mikro-F1 jako „metryki odpornej na niezbalansowanie” — w zadaniach jednoetykietowych to po prostu trafność.

Najczęstsze pytania

Którą średnią wybrać?
Makro, gdy każda klasa jest tak samo ważna, zwłaszcza przy rzadkich klasach. Ważoną, gdy chcesz uwzględnić liczność, ale zachować informację o F1 klas. Mikro ma sens głównie w zadaniach wieloetykietowych, gdzie przykład może mieć wiele klas naraz.
Dlaczego micro-F1 równa się trafności?
Bo w zadaniu jednoetykietowym każdy błędnie sklasyfikowany przykład liczy się raz jako FP (dla przewidzianej klasy) i raz jako FN (dla prawdziwej). Sumy FP i FN są równe, więc mikro-precyzja i mikro-recall są równe trafności.
Co zrobić, gdy jakaś klasa nie pojawia się w zbiorze testowym?
Precyzja lub recall tej klasy są nieokreślone (dzielenie przez zero) i scikit-learn ostrzega oraz wstawia 0, co zaniża makro-średnią. Rozwiązaniem jest warstwowy podział, a przy bardzo rzadkich klasach — raportowanie ich osobno.

Źródła

  • Sokolova M., Lapalme G. (2009). A systematic analysis of performance measures for classification tasks. Information Processing & Management, 45(4).
  • Géron A. „Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow”, 3rd ed., O’Reilly 2022, rozdz. 3 (Classification — Multiclass Classification, Error Analysis).
  • Murphy K. P. „Probabilistic Machine Learning: An Introduction”, MIT Press 2022, rozdz. 5.1 (Bayesian decision theory).
  • Dokumentacja scikit-learn: Multiclass and multilabel classification metrics — https://scikit-learn.org/stable/modules/model_evaluation.html#multiclass-and-multilabel-classification

Zobacz też