Собесов

Хабр ML — ROC-AUC: смысл, расчёт и устойчивость к дисбалансу классов

ML / Data ScienceМетрикиСредняяMiddle

Условие

Объясните метрику ROC-AUC. Почему она устойчива к дисбалансу классов? Что произойдёт с AUC, если умножить все предсказания модели на 3? Когда AUC может вводить в заблуждение?

Решение

Определение

ROC-кривая — график (FPR, TPR) при изменении порога классификации.

  • TPR (sensitivity, recall) = TP / (TP + FN);
  • FPR = FP / (FP + TN).

AUC — площадь под ROC, ∈ [0, 1]. Геометрически: пропорция пар (positive, negative), где модель присваивает positive больший score, чем negative.

AUC=P(s^(x+)>s^(x))\text{AUC} = P(\hat s(x^+) > \hat s(x^-))

Почему устойчива к дисбалансу классов

AUC основана на относительном ранжировании скорингов, не на абсолютных значениях. Изменение пропорции классов не меняет внутри-классовых рангов.

Сравните с Accuracy — она зависит от пропорций: при 99% negative класс «всё negative» даёт 99% accuracy.

При этом AUC не учитывает «цену» FP vs FN — для сильно несбалансированных данных лучше смотреть Precision-Recall AUC (PR-AUC), которая чувствительнее к редкому классу.

Что произойдёт при умножении предсказаний на 3

Ничего. AUC зависит только от порядка, не от значений. Любая монотонная трансформация (умножение на положительную константу, log, sigmoid) не меняет AUC.

Это важное свойство: AUC не калибрована — два модели с разными «уверенностями» могут иметь одинаковый AUC, но одна откалибрована к probabilities, а другая нет.

Когда AUC вводит в заблуждение

  1. Сильный дисбаланс + интерес к редкому классу. AUC=0.95 может казаться отличным, но среди топ-100 предсказаний только 5% positive — PR-AUC говорит честнее.
  2. Костёр FP vs FN неравный. AUC не отражает стоимость ошибок. Лучше expected cost или F-beta с конкретным β.
  3. Корреляция features с label слабая. AUC может казаться 0.6 — это «полезная» модель или «случайная»? Зависит от base rate и стоимости.
  4. Для ранжирования внутри запросов (recsys) AUC агрегированно неинформативна — нужен NDCG или per-query AUC.
  5. Калибровка. AUC=0.9 при плохой калибровке полезности для бизнеса меньше, чем AUC=0.85 с хорошей калибровкой (если бизнес принимает решения по абсолютному скору).

Связь AUC с другими метриками

  • AUC = (Wilcoxon-Mann-Whitney U) / (n_pos · n_neg).
  • Случайная модель: AUC = 0.5.
  • Идеальная: AUC = 1.0.
  • AUC < 0.5 → инвертируйте предсказания.
from sklearn.metrics import roc_auc_score
auc = roc_auc_score(y_true, y_scores)

Подводные камни

  1. «AUC = 0.95 → отличная модель». Зависит от задачи. Для CTR-предсказания 0.7 — хороший результат, для медицинского триажа 0.95 может быть недостаточно.
  2. AUC одного теста. Считайте CI бутстрепом (доверительный интервал ширины ~0.02–0.05 при N=10k).
  3. Сравнение AUC двух моделей. Используйте DeLong-test или paired bootstrap.
  4. AUC на лонгитюде. Если данные не перемешаны и есть concept drift, train/test AUC может быть оптимистично завышен.
  5. AUC на калиброванной модели не различимо от некалиброванной — AUC ≠ калибровка. Для калибровки — Brier score, calibration plot.

Эталонный ответ

ROC-AUC = вероятность, что случайно выбранный positive получит более высокий скор, чем случайный negative. Устойчива к дисбалансу — зависит от рангов. Любая монотонная трансформация (×3, log) не меняет AUC. Не отражает стоимость ошибок и калибровку — для сильного дисбаланса смотрите PR-AUC, для бизнес-решений добавляйте expected cost.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти