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ście | ROC AUC | PR AUC | PR AUC losowego modelu | PR AUC, 5.–95. percentyl |
|---|---|---|---|---|
| 38,3% (oryginał) | 0,834 | 0,812 | 0,383 | — |
| 10% (31 ocalałych) | 0,838 | 0,575 | 0,10 | 0,455–0,675 |
| 2% (6 ocalałych) | 0,846 | 0,378 | 0,02 | 0,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:]iy_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