Зависит ли значение ROC AUC от распределения классов в данных?

«Зависит ли значение ROC AUC от распределения классов в данных?» — вопрос из категории Метрики и функции потерь, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Теоретически — нет, практически — может проявляться косвенная зависимость.

Почему теоретически не зависит: ROC AUC оценивает ранжирующую способность модели: насколько хорошо модель упорядочивает объекты, а не точность абсолютных предсказаний. Метрика вычисляется как вероятность того, что случайно выбранный положительный пример получит более высокий скор, чем случайно выбранный отрицательный:

import numpy as np
from sklearn.metrics import roc_auc_score

# Пример с сильным дисбалансом (99% negative, 1% positive)
n_samples = 10000
n_pos = 100  # 1%
n_neg = 9900  # 99%

y_true = np.array([1]*n_pos + [0]*n_neg)

# Идеальная модель: все positive имеют скор > 0.5, все negative < 0.5
y_scores = np.concatenate([
    np.random.uniform(0.6, 1.0, n_pos),    # positive
    np.random.uniform(0.0, 0.4, n_neg)     # negative
])

print(f"ROC AUC: {roc_auc_score(y_true, y_scores):.4f}")  # ~1.0

Практические нюансы при дисбалансе:

  1. Малое количество positive примеров приводит к высокой дисперсии оценки AUC
  2. Business-метрики могут расходиться с AUC при сильном дисбалансе
  3. Требуется больше данных для стабильной оценки

Сравнение с Precision-Recall AUC:

from sklearn.metrics import precision_recall_curve, auc

# PR-AUC чувствительна к дисбалансу
precision, recall, _ = precision_recall_curve(y_true, y_scores)
pr_auc = auc(recall, precision)

print(f"ROC AUC: {roc_auc_score(y_true, y_scores):.4f}")
print(f"PR AUC: {pr_auc:.4f}")  # Более информативна при дисбалансе

Рекомендации на практике:

  • При сильном дисбалансе (например, 1:1000) дополняйте ROC-AUC PR-кривой
  • Используйте стратифицированную кросс-валидацию для оценки
  • Учитывайте стоимость ошибок (False Positive vs False Negative) в вашей предметной области

Вывод: ROC AUC формально инвариантна к prior probability классов, но при интерпретации результатов на несбалансированных данных нужно быть осторожным и использовать дополнительные метрики.