ML Atlas

04 · Ocena · 4 min czytania · aktualizacja

ROC AUC czy PR AUC — której metryki użyć przy niezbalansowanych klasach?

W skrócie

ROC AUC nie zależy od częstości klasy pozytywnej i ocenia cały ranking. PR AUC spada razem z częstością i pokazuje, ile warte są alarmy przy rzadkiej klasie.

Co to jest

ROC AUC mierzy, jak dobrze model porządkuje przypadki pozytywne przed negatywnymi, niezależnie od proporcji klas; PR AUC (average precision) mierzy, jak czyste są alarmy modelu przy kolejnych poziomach wykrywalności, i zależy od tego, jak rzadka jest klasa pozytywna. Gdy pozytywy są rzadkie, a interesuje Cię głównie góra rankingu — wybierz PR AUC; gdy obie klasy są równie ważne albo porównujesz modele na zbiorach o różnej częstości klas — ROC AUC.

ROC AUC ma prostą interpretację: to prawdopodobieństwo, że losowo wybrany przypadek pozytywny dostanie wyższy wynik niż losowo wybrany negatywny. Losowy model ma 0,5, idealny — 1.

PR AUC nie ma tak eleganckiej interpretacji, za to ma uczciwą linię odniesienia: losowy model osiąga PR AUC równe częstości klasy pozytywnej. Przy 1% pozytywów wynik 0,30 jest trzydzieści razy lepszy od losowego.

Mechanizm — dlaczego tak działa

Z czego zbudowane są krzywe. Krzywa ROC zestawia recall (TPR = TP / wszystkie pozytywy) z odsetkiem fałszywych alarmów (FPR = FP / wszystkie negatywy). Obie wielkości liczy się wewnątrz jednej klasy, więc zmiana proporcji klas ich nie rusza. Krzywa PR zestawia recall z precyzją = TP / (TP + FP), która miesza obie klasy. Gdy negatywów przybywa, FP rośnie proporcjonalnie, a precyzja spada.

Co ukrywa ROC. Przy 100 000 negatywów i 100 pozytywach FPR równe 1% oznacza 1000 fałszywych alarmów na najwyżej 100 trafień. Na krzywej ROC to punkt bardzo blisko lewej krawędzi i dobrze wyglądające pole. Na krzywej PR ta sama sytuacja to precyzja poniżej 10%, czyli widoczny problem.

Co ukrywa PR. PR AUC zależy od częstości klasy, więc nie porównasz go między zbiorami ani między okresami, w których częstość się zmieniła. Przy kilku pozytywach w teście jest też bardzo zaszumione: pojedynczy przypadek na szczycie lub dnie rankingu zmienia wynik o dziesiątki punktów. Do tego PR AUC mocniej nagradza poprawki na samej górze rankingu, co może faworyzować podgrupy o wyższej częstości klasy — na to zwrócili uwagę McDermott i in. (2024).

Jak liczyć PR AUC. Interpolacja liniowa między punktami krzywej PR zawyża pole (Davis i Goadrich, 2006). Standardem jest average precision: średnia precyzji w punktach, w których recall rośnie, ważona przyrostem recall. W scikit-learn to average_precision_score.

Na przykładzie

Titanic, klasa pozytywna = przeżył, regresja logistyczna ze standaryzacją. Najpierw jeden model z jednymi wynikami, a zmieniam tylko skład zbioru testowego: losowo usuwam część ocalałych, żeby uzyskać 10% albo 2% pozytywów (200 losowań, trening na połowie danych, random_state=0).

Częstość pozytywów w teścieROC AUCPR AUCPR AUC losowego modeluPR AUC, 5.–95. percentyl
38,3% (oryginał)0,8340,8120,383—
10% (31 ocalałych)0,8380,5750,100,455–0,675
2% (6 ocalałych)0,8460,3780,020,140–0,641

Ten sam model, ten sam ranking. ROC AUC stoi w miejscu, PR AUC spada z 0,81 do 0,38 — bo przy rzadszej klasie te same fałszywe alarmy ważą więcej. Jednocześnie przedział od 0,14 do 0,64 przy 6 pozytywach pokazuje, że PR AUC z tak małego testu jest prawie bezwartościowe.

Druga część: dwa modele trenowane i testowane na danych o tej samej częstości (50 losowań). Przy oryginalnych 38% regresja logistyczna ma ROC AUC 0,851, naiwny Bayes 0,818, czyli 0,03 różnicy. Przy 2% pozytywów: 0,787 wobec 0,639 w ROC AUC i 0,244 wobec 0,128 w PR AUC — PR AUC pokazuje, że alarmy naiwnego Bayesa są prawie dwa razy mniej warte.

Dane: Titanic

W praktyce

Reguła wyboru:

  • Pozytywy rzadkie (poniżej ok. 10%), liczy się jakość alarmów → PR AUC: average_precision_score(y_test, p); zawsze podawaj obok częstość klasy jako punkt odniesienia.
  • Obie klasy ważne albo porównujesz zbiory o różnej częstości → ROC AUC: roc_auc_score(y_test, p).
  • Znasz budżet alarmów (np. 100 kontroli dziennie) → zamiast pola policz precyzję przy tym budżecie: top = np.argsort(p)[-100:] i y_test[top].mean().
  • Mało pozytywów w teście → podawaj przedział z bootstrapu, a modele porównuj na tych samych próbkach.
  • Obie metryki oceniają tylko ranking. Nie powiedzą, czy prawdopodobieństwa są skalibrowane, ani który próg wybrać — do tego krzywa kalibracji i analiza kosztów.

Najczęstsze pytania

Czy ROC AUC jest „zbyt optymistyczne” przy niezbalansowanych danych?
Nie kłamie, tylko odpowiada na inne pytanie: jak dobrze model porządkuje pary pozytyw–negatyw. Mylące staje się wtedy, gdy wysoki wynik bierze się za obietnicę dobrej precyzji. Przy 1% pozytywów nawet ROC AUC 0,95 może oznaczać, że większość alarmów jest fałszywa.
Czym jest average precision i czy to to samo co PR AUC?
Average precision to najczęstszy sposób liczenia pola pod krzywą PR: suma precyzji w kolejnych punktach krzywej ważona przyrostem recall. Pole liczone trapezami (`auc(recall, precision)`) daje zwykle nieco wyższy, zbyt optymistyczny wynik.
Która metryka lepiej nadaje się do wyboru modelu?
Ta, która odpowiada decyzji. Jeśli model będzie wskazywał kilka procent najbardziej podejrzanych przypadków spośród rzadkiej klasy, PR AUC lub precyzja przy budżecie. Jeśli ranking ma być dobry w całości (np. do kolejki priorytetów), ROC AUC.

Źródła

  • Davis J., Goadrich M. „The Relationship Between Precision-Recall and ROC Curves”, ICML 2006.
  • Fawcett T. „An introduction to ROC analysis”, Pattern Recognition Letters 27(8), 2006, s. 861–874.
  • Saito T., Rehmsmeier M. „The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets”, PLOS ONE 10(3), 2015, e0118432.
  • McDermott M. B. A. i in. „A Closer Look at AUROC and AUPRC under Class Imbalance”, NeurIPS 2024.
  • Dokumentacja scikit-learn, „Precision, recall and F-measures” i „Receiver operating characteristic (ROC)”: https://scikit-learn.org/stable/modules/model_evaluation.html

Zobacz też