Условие
Объясните метрику 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 основана на относительном ранжировании скорингов, не на абсолютных значениях. Изменение пропорции классов не меняет внутри-классовых рангов.
Сравните с Accuracy — она зависит от пропорций: при 99% negative класс «всё negative» даёт 99% accuracy.
При этом AUC не учитывает «цену» FP vs FN — для сильно несбалансированных данных лучше смотреть Precision-Recall AUC (PR-AUC), которая чувствительнее к редкому классу.
Что произойдёт при умножении предсказаний на 3
Ничего. AUC зависит только от порядка, не от значений. Любая монотонная трансформация (умножение на положительную константу, log, sigmoid) не меняет AUC.
Это важное свойство: AUC не калибрована — два модели с разными «уверенностями» могут иметь одинаковый AUC, но одна откалибрована к probabilities, а другая нет.
Когда AUC вводит в заблуждение
- Сильный дисбаланс + интерес к редкому классу. AUC=0.95 может казаться отличным, но среди топ-100 предсказаний только 5% positive — PR-AUC говорит честнее.
- Костёр FP vs FN неравный. AUC не отражает стоимость ошибок. Лучше expected cost или F-beta с конкретным β.
- Корреляция features с label слабая. AUC может казаться 0.6 — это «полезная» модель или «случайная»? Зависит от base rate и стоимости.
- Для ранжирования внутри запросов (recsys) AUC агрегированно неинформативна — нужен NDCG или per-query AUC.
- Калибровка. 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)Подводные камни
- «AUC = 0.95 → отличная модель». Зависит от задачи. Для CTR-предсказания 0.7 — хороший результат, для медицинского триажа 0.95 может быть недостаточно.
- AUC одного теста. Считайте CI бутстрепом (доверительный интервал ширины ~0.02–0.05 при N=10k).
- Сравнение AUC двух моделей. Используйте DeLong-test или paired bootstrap.
- AUC на лонгитюде. Если данные не перемешаны и есть concept drift, train/test AUC может быть оптимистично завышен.
- AUC на калиброванной модели не различимо от некалиброванной — AUC ≠ калибровка. Для калибровки — Brier score, calibration plot.
Эталонный ответ
ROC-AUC = вероятность, что случайно выбранный positive получит более высокий скор, чем случайный negative. Устойчива к дисбалансу — зависит от рангов. Любая монотонная трансформация (×3, log) не меняет AUC. Не отражает стоимость ошибок и калибровку — для сильного дисбаланса смотрите PR-AUC, для бизнес-решений добавляйте expected cost.