AUC – Area under curve – czyli co kryje się pod krzywą?

AUC mapa myśli

AUC – Area under curve – to kolejny krok po tym, jak już narysowaliśmy sobie krzywą ROC. Już samo przetłumaczenie na polski podpowiada, czego powinniśmy szukać. Obszar pod krzywą podpowie nam, jaka jest całkowita zdolność klasyfikatora do rozróżnienia między klasami. Spróbujmy więc to wszystko sobie narysować i odkryć, co tak naprawdę kryje się pod krzywą…

Ten atykuł jest bezpośrednią kontynuacją artykułu o krzywej ROC. Jeśli go nie przeczytaliście (lub sami z siebie nie wiecie, czym jest ROC), to warto to nadrobić, żeby łatwiej było zrozumieć, co piszę. Przypomnę jednym zdaniem, że ROC to taka krzywa, która pomaga nam ocenić zdolność klasyfikatora binarnego do rozróżnienia między dwoma klasami. I jak już mamy tę krzywą ROC narysowaną, to możemy pójść krok dalej i zobaczyć, jakie jest pole powierzchni pod nią. A ponieważ wartości FPR i TPR (czyli to co mamy na osiach) znajdują się w przedziale 0-1, to również nasze AUC powinno znaleźć się dokładnie w tym samym przedziale. I im bliżej jedynki, tym lepiej.

Jak obliczyć AUC, kiedy mamy już krzywą ROC?

Jeden z przykładów ROC wyglądał następująco:

ROC curve - jabłka pomidory

Jak wyliczyć dla niego AUC? Oczywiście, możemy spojrzeć na wykres i obliczyć pole powierzchni pod krzywą. Dla powyższego przykładu zrobiłabym to tak. Cały „obrazek” podzieliłabym na 16 małych kwadracików (czyli narysowałabym sobie linie w górę od 0.25, 0.5 i 0.75). Można zobaczyć, że 6 z tych kwadracików znajduje się „powyżej” wykresu, a 10 z nich „poniżej”. Oznacza to, że dla tego przykładu AUC wynosi 10/16 czyli 0.625.

Na dłuższą metę nie sugeruję jednak takich rozwiązań i takiego podejścia do obliczeń AUC. Proponuję skorzystać z biblioteki sklearn w Pythonie. Dla powyższego przypadku wystarczy, że podamy poszczególne wartości TPR i FPR, i już po chwili możemy się cieszyć wynikiem AUC.

AUC - obliczenia w Pythonie

Liczymy AUC dla pozostałych przykładów

Kolejna krzywa ROC, którą rysowałam w poprzednim artykule, wygląda następująco:

ROC curve - jabłka pomidory

W jej przypadku mamy tylko 3 „kwadraciki” powyżej krzywej. Przeprowadzone obliczenia pokazują wynik AUC=0.8125.

AUC - obliczenia w Pythonie

Dla przykładów „idealnego” (czyli jabłka mają największe prawdopodobieństwo bycia jabłkami) i „odwróconego” (czyli jabłka mają największe prawdopodobieństwo bycia pomidorami) odpowiednio będziemy mieć AUC 1 i 0.

AUC - obliczenia w Pythonie

Przy czym przypominam, że tak naprawdę AUC równe 0 jest tak samo dobre jak AUC wynoszące 1. Wystarczy tylko zamienić kategorie, do których jest przypisywany obiekt i już będzie idealnie. Podobnie jest dla wszystkich przypadków, kiedy AUC jest mniejsze od 0.5. Możemy zamienić kategorie i uzyskać wynik odpowiednio większy od 0.5.

Podsumowanie

Krzywa ROC i obszar pod nią to takie narzędzia, które wspomagają nas w doborze odpowiednich klasyfikatorów. Podpowiadają również, w jakim miejscu najlepiej jest ustawić punkt odcięcia (czyli miejsce, w którym owoce i warzywa przestają być uważane za jabłka, a zaczynają być traktowane jak pomidory). Warto pamiętać, że teoretycznie im wyższe AUC, tym lepszy algorytm klasyfikujący. Ale tylko teoretycznie, bo czasem musimy się zastanowić, czy większym problemem są dla nas FP czy FN. Jeśli większym problemem będą FP to skupimy się na tych algorytmach, które raczej nie przypiszą błędnie obiektu z negatywnej klasy do pozytywnej. Nawet jeśli kosztem będzie nadmierne przypisywanie obiektów z klasy pozytywnej do negatywnej. Jeśli natomiast większym problemem jest FN, to będziemy szukać tych algorytmów, które mają mniejsze prawdopodobieństwo przypisania obiektu z klasy pozytywnej do negatywnej. Kształt krzywej ROC może nam dużo w tym temacie podpowiedzieć.


Artykuł ten jest kontynuacją nieoficjalnego cyklu na tematy powiązane z Machine Learningiem, klasyfikacją oraz z macierzą błędów. Mam nadzieję, że ułatwiam Wam zrozumienie tych pojęć i dzięki temu lektura bardziej ambitnych artykułów naukowych staje się łatwiejsza i przyjemniejsza. Taki jest mój cel. Dajcie znać, czy rzeczywiście pomaga. Możecie łapać mnie na facebooku albo napisać maila na adres [email protected].

Zapraszam też do lektury spisu treści i wybrania sobie innych ciekawych tekstów do przeczytania. Niektóre z nich są mi naprawdę bliskie. A Wy? Macie jakieś ulubione?

Jeśli uważacie, że to co piszę jest wartościowe i chcielibyście w zamian podarować mi „kawkę” (herbatę, czekoladę, soczek…), to macie taką możliwość.

Postaw mi kawę na buycoffee.to

Pozdrawiam Was serdecznie! Życzę Wam miłego dnia! Dbajcie o siebie!

Krystyna Piątkowska