Дисбаланс классов: когда ROC обманывает
Мошенничество — 0.2% операций. Болезнь — 1% пациентов. Когда нужный класс редкий, привычные метрики начинают врать, а ROC/AUC выглядят обманчиво хорошо. Разберём, как честно оценивать классификатор на редком классе. Уменьшайте долю редкого класса и меняйте разделимость — следите за PR-кривой и AUC.
Уменьшайте долю класса: ROC-AUC почти не меняется (выглядит «хорошо»), а PR-кривая и precision при фиксированном recall обваливаются. На редком классе смотрят PR, а не ROC/accuracy.
Сначала повторим ловушку accuracy на дисбалансе: если мошенничества 0.2%, модель «всё честно» права в 99.8% случаев — accuracy почти идеальна, а пользы ноль (не поймали ни одного мошенника). На редком классе accuracy бессмысленна — это мы уже видели в матрице ошибок.
Первый вопрос на классификации: насколько класс редкий? Если редкий и важный (фрод, болезнь) — accuracy и голый ROC-AUC откладывают в сторону и смотрят precision/recall, PR-AUC, F1, а порог настраивают под цену пропуска vs ложного срабатывания.
Высокий AUC на сильном дисбалансе — повод не радоваться, а проверить precision при рабочем пороге: часто оказывается, что 95% срабатываний — ложные и система захлёбывается.
Антифрод и медицинский скрининг — классический дисбаланс: реальных случаев горстка, поэтому всё крутится вокруг precision/recall и стоимости ошибок, а не вокруг общей точности.
Модерация и спам: при редком нарушении важно не завалить пользователей ложными блокировками — это прямой контроль precision при нужном recall.
Определения
Accuracy и ROC-AUC информативны на сбалансированных классах; на сильном дисбалансе они систематически приукрашивают — нужны PR-метрики.
Ре-сэмплинг и веса меняют базовую ставку, поэтому выдаваемые моделью «вероятности» после них смещены и требуют калибровки, если их трактуют как настоящие вероятности.