Как подбирать порог вероятности для классификации?
Что проверяют
Понимаете ли вы, что 0,5 это не закон природы, а значение по умолчанию, и что порог выбирается под цену ошибок конкретной задачи. Следом почти всегда спрашивают, на каких данных вы порог подбирали и что будет, если доля классов в проде изменится.
Как отвечать
Начните с механики: predict_proba отдаёт оценку, а predict в scikit-learn режет её по 0,5. Снижение порога поднимает recall ценой precision, повышение работает наоборот. Порог подбирается отдельно от обучения, на валидации или кросс-валидацией, а тест используется один раз в самом конце.
Способы выбора, от сильного к слабому:
- по стоимости ошибок: если известны цены ложного срабатывания и пропуска, для откалиброванной модели порог равен
C_fp / (C_fp + C_fn), для некалиброванной его находят перебором по ожидаемым потерям на валидации; - по ограничению: максимальный recall при precision не ниже заданного уровня или наоборот. Так задачу обычно ставит бизнес: «среди заблокированных не больше 5% честных клиентов»;
- по метрике: максимум F1 или F-beta на PR-кривой, статистика Юдена (TPR минус FPR) на ROC. Удобно, но это компромисс по умолчанию, а не решение задачи;
- готовыми средствами: в scikit-learn с версии 1.5 есть
TunedThresholdClassifierCV, который подбирает порог кросс-валидацией под выбранную метрику, иFixedThresholdClassifierдля заданного вручную.
Отдельно скажите про калибровку. Бустинги и модели, обученные с весами классов или на undersampling, дают смещённые вероятности. Если порог выводится формулой, а не перебором, сначала нужна калибровка, например CalibratedClassifierCV. И порог пересматривают при сдвиге доли классов: модель та же, а оптимальная точка уже другая.
Где спотыкаются
Подбирают порог на тестовой выборке и там же отчитываются о качестве. Оценка выходит завышенной: тест уже участвовал в настройке.
Предлагают выбрать порог по ROC-AUC. Эта метрика от порога не зависит, она описывает качество ранжирования, а решение принимается по конкретной точке кривой.
Максимизируют F1, не спросив о цене ошибок. В антифроде пропуск бывает в сотни раз дороже ложной тревоги, и порог по F1 окажется далеко от выгодного.