Урок по треку Классический ML 6 мин

Несбалансированные классы и калибровка за 6 минут

Порог, веса классов, семплирование, калибровка вероятностей и выбор метрики при редком классе.

Мошенничество, отток, дефолты, поломки оборудования: почти все реальные задачи классификации несбалансированы. Вопрос «что вы делаете при дисбалансе» проверяет, не бросаетесь ли вы сразу в SMOTE.

Сначала метрика и порог

Многие модели (бустинг, логрегрессия) нормально учатся на данных 1:99. Проблема обычно в оценке: accuracy и порог 0.5. Первые шаги:

  • метрика: PR-AUC, recall при фиксированной precision или доле тревог, precision в топ-N;
  • порог по стоимости ошибок и ёмкости проверки;
  • стратифицированное разбиение;
  • валидация и тест с реальным распределением классов, ведь precision и PR-AUC от него зависят.

Веса классов

class_weight="balanced" умножает потерю объектов класса c на n / (K·n_c). При 1 000 объектах и 50 положительных вес положительных 10, отрицательных около 0.53. Граница сдвигается в пользу редкого класса, но вероятности перестают быть откалиброванными.

Семплирование

  • Oversampling: повторить объекты редкого класса.
  • Undersampling: выбросить часть частого. Полезен на огромных данных, чтобы ускорить обучение.
  • SMOTE: синтетическая точка на отрезке между объектом редкого класса и его соседом того же класса. Плохо работает с категориями, высокой размерностью и перекрытием классов.

Главное правило: семплирование только на трейне внутри фолда (imblearn Pipeline). SMOTE до кросс-валидации создаёт почти копии валидационных объектов в трейне, и recall «вырастает» с 0.4 до 0.9.

Калибровка

Калибровка важна, когда вероятность используется как число: ожидаемые потери, ставки, ценообразование.

Проверка: калибровочная кривая (средняя предсказанная вероятность против доли положительных в бинах), ECE, Brier score, log loss.

Что ломает калибровку: веса классов, семплирование, бустинг с большим числом деревьев, переуверенные нейросети, случайный лес (вероятности сжаты к середине).

Как чинить на отложенной выборке с реальным балансом:

  • Platt scaling: сигмоида поверх скора, хорош при малых данных;
  • Isotonic regression: монотонная ступенчатая функция, гибче, нужна большая выборка;
  • Temperature scaling для нейросетей: делим логиты на одно число.

Все методы монотонны и не меняют AUC.

Поправка на приор

Если из отрицательных оставили долю β, шансы положительного класса завышены в 1/β раз. Поправка:

p' = β·p / (β·p + 1 - p)

При β = 0.1 вероятность 0.5 на самом деле около 0.09.

Focal loss

В детекции объектов огромное число лёгких фоновых примеров. Focal loss умножает кросс-энтропию на (1 - p)^γ, и уверенно верные примеры почти не влияют на градиент. В табличных задачах обычно хватает весов классов.

Частые ошибки

  • Начинать с SMOTE до 50:50.
  • Делать семплирование до разбиения.
  • Считать precision на сбалансированной валидации.
  • Использовать вероятности после undersampling без поправки.

Что спросят на собесе

  • Ваша стратегия при дисбалансе от метрики до порога.
  • Как работают веса классов и SMOTE, где утечка при SMOTE.
  • Что такое калибровка, как проверить и исправить.
  • Как поправить вероятности после undersampling.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.