Ответ
Теоретически — нет, практически — может проявляться косвенная зависимость.
Почему теоретически не зависит: 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
Практические нюансы при дисбалансе:
- Малое количество positive примеров приводит к высокой дисперсии оценки AUC
- Business-метрики могут расходиться с AUC при сильном дисбалансе
- Требуется больше данных для стабильной оценки
Сравнение с 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 классов, но при интерпретации результатов на несбалансированных данных нужно быть осторожным и использовать дополнительные метрики.