Nawet wzorcowo przeprowadzony proces uczenia nie jest jeszcze gwarantem sukcesu w modelowaniu. Tym na co warto zwrócić uwagę, jest poziom cut-off, który bezpośrednio przekłada się na miary jakości osiągane przez nasze rozwiązanie.
Z tego artykułu dowiesz się: 1. Czemu warto w sposób manualny dobierać cut-off? 2. W jakich sytuacjach manualny dobór punktu odcięcia jest konieczny? 3. Jaki jest prosty i skuteczny sposób na optymalizację punktu odcięcia?
Punkt odcięcia jest granicą w prawdopodobieństwie klasyfikacji, pomiędzy klasą dobra i złą. Powinniśmy zachować szczególną ostrożność przy wybieraniu cut-off, zwłaszcza gdy defaultów jest relatywnie mało w zbiorze. Czemu? O tym poniżej.
Skąd wiemy, że „zły” jest naprawdę zły?
W przypadku większości algorytmów klasyfikacyjnych i ich implementacji w najpularniejszych bibliotekach uczenia maszynowego tym, co zwraca nam predykcja, jest prawdopodobieństwo przynależności obserwacji do danej klasy.
Prawdopodobieństwo przyjmuje wartości ciągłe z przedziału <0, 1> i w zależności od analizowanego problemu mówi, że np. prawdopodobieństwo niewywiązania się ze zobowiązania do spłaty kredytu przez Jana Kowalskiego jest równe 0.35, a więc 35% (gdzie: 0 – idealny kredytobiora, 1 – idealnie zły kredytobiorca).
Wbrew pozorom, prawdopodobieństwo na poziomie 35% wcale nie musi oznaczać, że dany klient będzie terminowo spłacać wszystkie zobowiązania. Wiele tu zależy od przyjętych założeń, przebiegu procesu uczenia oraz doboru próby uczącej.
Reguła kciuka jest następująca: im mniej „jedynek” w zbiorze, tym mniejszy od 0.5 powinien być punkt odcięcia.
Naiwnie działające algorytmy uczenia maszynowego
Typowy algorytm ML działa dobrze przy próbach, z jakimi spotykamy się w 95% kursów i tutoriali dostepnych w internecie: podział pomiędzy klasy zmiennej celu jest niemal równy (np. 43:57, 55:45). Mówimy wtedy o próbach zbalansowanych.
W rzeczywistości rzadko kiedy mamy tak komfortową sytuację. Większość przypadków w pracy zawodowej spotykamy się z próbami niezbalansowanymi.
Nie ma jednoznacznej definicji próby niezbalansowanej, lecz dla uproszczenia możemy przyjąć, że będzie to próba, w której jedna z klas stanowi więcej niż 80% wszystkich obserwacji. Z takimi próbami możemy się zetknąć m.in. w:
- skoringu kredytowym (źli kredytobiorcy stanowią mniej niż 10% populacji),
- problemie churnu (odchodzący klienci, to w zależności od branży mniej niż 20-10%),
- automatycznej kontroli jakości (produkty wadliwe stanowią mniej niż 0.1% wszystkich produktów).
Typowy „klasyfikator” optymalizuje swe działanie pod kątem dokładności predykcji (ang. accuracy), a domyślny punkt odcięcia wynosi 0.5. W każdym z trzech wyżej wymienionych problemów algorytm bardzo szybko dokona optymalizacji i osiągnie „dobry” wynik.
Jeśli dla zbioru o rozkładzie obserwacji wg zmiennej celu równej 95:5 wskażemy w predykjci, że wszystkie obserwacje są zerami, to osiągniemy dokładność na poziomie 95%. Nie to jest jednak naszym celem. Straty dla naszego biznesu z tytułu pominięcia tych 5% „jedynek” mogą być większe niż zysk z 95% poprawnie sklasyfikowanych „zer” (abstrahując od sensu budowania tak banalnego modelu).
Obiektywna miara jakości
W problemach klasyfikacji dwuklasowej obiektywną miarą jakości (niezależną od punktu odciącia) jest AUC (ang. Area Under Curve). Odnosi się ona do pola pod krzywą ROC powstałej w wyniku badania macierzy pomyłek dla różnych punktów odcięcia. To na niej warto skupić swoją uwagę zwłaszcza w przypadku modelowania na próbach niezbalansowanych.
Krzywa ROC jest rysowana w przestrzeni dwuwymiarowej. Zgodnie z powyższych przykładem, oś y, to TPR (ang. True Positives Rate), a więc czułość. Oś x, to FPT (ang. False Positives Rate), lub 1 – specyficzność.
Upraszczając, krzywa ROC powstaje poprzez weryfikację wspomnianych miar (TPR, FPR) i naniesienie ich wartości na wykres dla kolejnych punktów odcięcia w przedziale <0, 1>. Rozmiar pola pod krzywą mówi o ogólnej jakości modelu – im większe pole, tym lepszy model.
Gdzie na krzywej ROC leży „idealny” punkt odcięcia?
W ogólnych przypadku (jeśli przyjmiemy, że na czułości i specyficzności zależy nam w podobnym stopniu) idealny punkt odcięcia będzie leżeć możliwie najbliżej lewego, górnego krańca wykresu (zaznaczony na powyższy. Jest to punkt, w którym TPR wynosi 1, a FPR 0. Chcemy więc maksymalizować jedną miarę, przy minimalizacji drugiej poprzez manipulowanie punktem odcięcia.
Alternatywnie możemy skupić się na maksymalizacji czułości (TPR – Recall) i maksymalizacji specyficzności (FPR = 1 – specyficzność).
W Python cała operacja sprowadza się do 3 linii kodu. 🙂
fpr, tpr, threshold = roc_curve(target, predicted) m = np.argmax(tpr - fpr) cut_off = threshold[m]
Metody modelowania w próbach niezbalansowanych
Jak już pewnie zauważyłeś problemem nie jest tyle sam punkt odcięcia, co balans pomiędzy klasami w zbiorze uczącym i sposób w jaki została zaimplementowana część algorytmów uczenia maszynowego. Dobór cut-off należy zatem traktować nie jako problem, lecz jego rozwiązanie. Poniżej wymieniam przykładowe metody, którymi można się posłużyć:
- zmiana algorytmu – na mniej wrażliwy na rozkład zmiennej celu, np. uśrednianie prognoz poprzez ensembling,
- zmiana metryki,
- oversampling,
- undersampling,
- zastosowanie innych metod z dziedziny wykrywania zjawisk rzadkich (ang. anomaly detection).
Podsumowanie
W kolejnym wpisie pokażę, jak może w praktyce wyglądać podejście do wyznaczania punktu odcięcia z użyciem powyższej metody.
Jeśli masz jakieś pytania, to proszę podziel się nimi w komentarzu pod wpisem – zapraszam do dyskusji. Jeśli artykuł przypadł Ci do gustu, to proszę, podziel się nim w mediach społecznościowych ze swoimi znajomymi. Będę bardzo wdzięczny. 🙂
Linki:
photo: pixabay.com (stux)
PODOBAŁ CI SIĘ TEN ARTYKUŁ?
Jeśli tak, to zarejestruj się, by otrzymywać informacje o nowych wpisach.
Dodatkowo w prezencie wyślę Ci bezpłatny poradnik :-)
„próbami nieznalansowanymi” ?
Dzięki Michał. 🙂 Poprawione.