Prosty sposób na wybór odpowiedniego punktu odcięcia

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 :-)

2 Komentarze

Dodaj komentarz

Twój adres email nie zostanie opublikowany.


*