← Назад к вопросам

В каких случаях ROC AUC плохо оценивает качество классификатора

3.0 Senior🔥 141 комментариев
#Машинное обучение#Метрики и оценка моделей

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Когда ROC AUC неподходящая метрика

ROC AUC — это мощная метрика для оценки классификаторов, но она имеет серьёзные ограничения в определённых сценариях.

1. Крайний дисбаланс классов

Когда один класс составляет менее 1% от выборки, ROC AUC может быть неинформативна.

Почему? ROC кривая строится на основе всех threshold значений, и при экстремальном дисбалансе:

  • Модель может быть практически бесполезна (точность 99.5%), но иметь высокий ROC AUC
  • Алгоритм может всех классифицировать как мажоритарный класс и получить хороший AUC
# Пример: 1 позитивный случай на 10000
from sklearn.metrics import roc_auc_score, precision_recall_curve

y_true = [0]*9999 + [1]
y_pred = [0.1]*9999 + [0.9]

# ROC AUC может быть высоким даже при плохой модели
roc_auc = roc_auc_score(y_true, y_pred)  # ~0.9

# А вот PR AUC более честная метрика для дисбаланса
from sklearn.metrics import average_precision_score
pr_auc = average_precision_score(y_true, y_pred)

Решение: используй Precision-Recall AUC или PR curve вместо ROC для дисбалансированных наборов.

2. Разные стоимости ошибок (Cost-sensitive классификация)

Не все ошибки одинаковы:

  • Ложный позитив (FP) при диагностике может стоить дешевле, чем ложный негатив (FN)
  • Или наоборот: FP дороже, чем FN

Почему ROC неподходящa? ROC AUC не учитывает стоимость ошибок и рассчитывает важность FP и FN одинаково.

# Пример: при обнаружении мошенничества
# Ложный негатив (пропустили мошенника) — большой убыток
# Ложный позитив (заблокировали честного пользователя) — раздражение

# ROC AUC не знает об этом дисбалансе стоимостей
from sklearn.metrics import confusion_matrix

cost_matrix = {
    FP: 100,   # Стоимость ложного срабатывания
    FN: 10000  # Стоимость пропуска мошенничества
}

# Лучше использовать взвешенные метрики:
# weighted_accuracy, или custom cost функцию

Решение: используй взвешенные метрики или F-beta score (например, F2 для приоритета recall).

3. Мультиклассовая классификация

Когда классов больше 2, ROC AUC становится менее интуитивной (нужны OvR или OvO стратегии).

# Для 3+ классов ROC строится сложнее
from sklearn.metrics import roc_auc_score

y_true = [0, 1, 2, 0, 1, 2]
y_pred_proba = [
    [0.7, 0.2, 0.1],
    [0.1, 0.8, 0.1],
    [0.2, 0.3, 0.5],
    [0.9, 0.05, 0.05],
    [0.1, 0.7, 0.2],
    [0.05, 0.1, 0.85]
]

# One-vs-Rest подход
roc_auc = roc_auc_score(y_true, y_pred_proba, multi_class=ovr)

# Но часто удобнее смотреть на weighted F1, macro avg и т.д.
from sklearn.metrics import f1_score
f1 = f1_score(y_true, [0,1,2,0,1,2], average=weighted)

Решение: для мультикласса используй Macro F1, Weighted F1 или Confusion Matrix.

4. Когда нужна оптимизация конкретного порога (threshold)

ROC AUC рассчитывается для всех порогов, но на практике ты используешь только один.

# Модель выдаёт вероятность
y_pred_proba = [0.2, 0.6, 0.4, 0.8, 0.5]

# По умолчанию threshold = 0.5
# Но может быть оптимален threshold = 0.3 для recall или 0.7 для precision

from sklearn.metrics import precision_recall_curve

precisions, recalls, thresholds = precision_recall_curve(y_true, y_pred_proba)

# Выбираем threshold с максимальным F1
f1_scores = 2 * (precisions * recalls) / (precisions + recalls + 1e-10)
best_threshold = thresholds[np.argmax(f1_scores)]

Решение: используй PR curve или калибровку модели для поиска оптимального threshold.

5. Регрессия вместо классификации

Если ты пытаешься оценивать регрессионную модель через ROC AUC — это ошибка.

6. Когда важна интерпретируемость

ROC AUC — абстрактная метрика (что такое 0.87?).

Лучше использовать:

  • Precision и Recall — понятные бизнесу
  • Confusion Matrix — наглядна
  • Accuracy — просто и понятно

Итоговые рекомендации

СценарийВместо ROC AUC используй
Дисбаланс классовPR AUC, F1, Precision-Recall curve
Cost-sensitiveWeighted metrics, F-beta score
МультиклассовMacro/Weighted F1, Confusion Matrix
Нужен thresholdPR curve, Calibration curve
Важна интерпретируемостьPrecision/Recall, Confusion Matrix
Почти идеальная модельУход в детали, PR curve

Практический совет

Не полагайся на один ROC AUC! Всегда смотри на:

  • Confusion Matrix
  • Precision и Recall отдельно
  • PR curve для дисбаланса
  • Бизнес-метрики (стоимость ошибок, доход)

Добавив эти метрики, ты получишь полную картину качества модели.

В каких случаях ROC AUC плохо оценивает качество классификатора | PrepBro