ML Atlas

04 · Ocena · 4 min czytania · Interaktywne · aktualizacja

Czym jest próg decyzji i jak zmienić go bez ponownego treningu?

W skrócie

Próg decyzji to reguła zamiany prawdopodobieństw na klasę. Próg 0,5 jest optymalny tylko przy równych kosztach pomyłek i tych samych proporcjach klas.

Co to jest

Próg decyzji (decision threshold, reguła decyzyjna) to reguła, która z prawdopodobieństw zwróconych przez model wybiera klasę. Domyślna reguła — „wybierz klasę o największej szansie”, czyli dla dwóch klas próg 0,5 — jest optymalna tylko wtedy, gdy wszystkie pomyłki kosztują tyle samo, a proporcje klas w treningu i w zastosowaniu są takie same.

Zmiana progu albo korekta priorów (dzielenie szans przez częstość klasy) to poprawka po treningu, bez ponownego uczenia. Działa dla każdego modelu probabilistycznego: regresji logistycznej, sieci, boostingu.

Mechanizm — dlaczego tak działa

Model uczony entropią krzyżową odtwarza prawdopodobieństwa warunkowe z danych treningowych, a w nich zaszyte są częstości klas (priory): p(k | x) ∝ p(x | k) · p(k). Jeśli klasa rzadka ma p(k) = 0,1, to nawet przy wyraźnych cechach rzadko dostaje największą szansę, więc argmax prawie nigdy jej nie wybiera. To nie błąd modelu — to prawidłowa odpowiedź na pytanie „co jest najbardziej prawdopodobne?”. Błędem jest zadawanie tego pytania, gdy koszty pomyłek albo metryka mówią co innego.

Teoria decyzji bayesowskiej: wybierz decyzję minimalizującą oczekiwany koszt Σₖ p(k | x) · koszt(decyzja, k). Dla dwóch klas, gdy c_FP to koszt fałszywego alarmu, a c_FN koszt przeoczenia, prowadzi to do progu na p(1 | x) równego c_FP / (c_FP + c_FN). Próg 0,5 wychodzi tylko przy równych kosztach; jeśli przeoczenie kosztuje dziesięć razy więcej, optymalny próg to 1/11 ≈ 0,09.

Gdy zmieniają się proporcje klas, poprawna korekta to pomnożenie szans przez stosunek nowego priora do starego i ponowna normalizacja (Saerens i in. 2002). Dzielenie szans przez częstość klasy podniesioną do potęgi α płynnie przechodzi od „bez korekty” (α = 0) do „tak, jakby klasy były równoliczne” (α = 1). To drugie maksymalizuje balanced accuracy, bo BA to trafność przy jednostajnym priorze; w uczeniu z długim ogonem nazywa się to logit adjustment (Menon i in. 2021). Dla dwóch klas α = 1 oznacza po prostu próg równy częstości klasy rzadkiej.

Zastrzeżenie: korekta działa, gdy model jest w miarę skalibrowany. Za mocna (α > 1) zalewa rzadką klasą przypadki, które do niej nie należą — recall klasy rzadkiej rośnie, ale recall pozostałych spada szybciej. Próg dobiera się na walidacji, a ocenia na innych danych, bo wybór najlepszego progu na tych samych wierszach zawyża wynik.

Na przykładzie

Breast Cancer Wisconsin, regresja logistyczna na 30 standaryzowanych cechach, test na 171 guzach (64 złośliwe, random_state=0). Załóżmy, że przeoczenie guza złośliwego kosztuje 10 jednostek, a fałszywy alarm 1. Przy progu 0,5 model popełnił 4 przeoczenia i 4 fałszywe alarmy — koszt 44. Przy progu 0,09 wynikającym z kosztów: 1 przeoczenie i 14 fałszywych alarmów — koszt 24, prawie o połowę mniej, z tego samego modelu.

Korekta priorów działa najmocniej przy słabym modelu i rzadkiej klasie. Na wersji zbioru z 10% guzów złośliwych (357 łagodnych i 40 złośliwych, seed 0) regresja logistyczna na dwóch słabych cechach przy progu 0,5 rozpoznała tylko 10% złośliwych (BA 0,54, walidacja krzyżowa 5-krotna). Próg 0,1, czyli równy częstości klasy, podniósł recall złośliwych do 73% i BA do 0,73.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: regresja logistyczna na biopsjach raka piersi: suwak progu zmienia macierz pomyłek, precision, recall i punkt na krzywej ROC.

Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)

W praktyce

  • scikit-learn: predict_proba plus własny próg zamiast predict; od wersji 1.5 TunedThresholdClassifierCV dobiera próg pod wybraną metrykę w walidacji krzyżowej, a FixedThresholdClassifier ustala go na sztywno.
  • Wieloklasowo: argmax(proba / prior**alpha), z α strojonym na walidacji, typowo między 0,5 a 1.
  • Próg to alternatywa dla wag klas w treningu — robi to samo po treningu; nie stosuj obu naraz bez sprawdzenia.
  • W wykrywaniu oszustw i diagnostyce próg ustala się z krzywej precyzja–recall pod koszty, a nie na 0,5.
  • Typowy błąd: ocena przez predict() z domyślnym 0,5 na niezbalansowanych danych i wniosek „model nie wykrywa rzadkiej klasy”.

Najczęstsze pytania

Jak zmienić próg decyzji w klasyfikacji?
Pobierz prawdopodobieństwa (`predict_proba`) i porównaj z własnym progiem zamiast 0,5; wieloklasowo podziel szanse przez częstości klas (do potęgi α) i weź maksimum. Próg dobierz na walidacji pod metrykę lub koszty, a sprawdź na innych danych.
Dlaczego próg 0,5 nie zawsze jest dobry?
Bo jest optymalny tylko przy równych kosztach pomyłek i takich samych proporcjach klas w treningu i w zastosowaniu. Gdy klasa rzadka ma 5% danych, model rzadko daje jej ponad 0,5, choć jej wykrycie bywa najważniejsze.
Wagi klas czy zmiana progu?
Robią podobną rzecz: przesuwają decyzje w stronę rzadkich klas. Wagi działają w treningu i zmieniają model, próg działa po treningu i model zostawia. Próg jest tańszy i odwracalny; oba naraz zwykle przesuwają decyzje za daleko.

Źródła

  • Bishop, C. M. (2006). Pattern Recognition and Machine Learning, Springer, rozdz. 1.5 "Decision theory".
  • Elkan, C. (2001). "The foundations of cost-sensitive learning". IJCAI, 973–978.
  • Saerens, M., Latinne, P., Decaestecker, C. (2002). "Adjusting the outputs of a classifier to new a priori probabilities: a simple procedure". Neural Computation 14(1), 21–41.
  • Menon, A. K., Jayasumana, S., Rawat, A. S., Jain, H., Veit, A., Kumar, S. (2021). "Long-tail learning via logit adjustment". ICLR. arXiv:2007.07314
  • scikit-learn: "Tuning the decision threshold for class prediction". https://scikit-learn.org/stable/modules/classification_threshold.html

Zobacz też