Что будет, если на вход функции, вычисляющей ROC-AUC, дать бинарные предсказания (0 или 1)?

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

Ответ

Если передать бинарные предсказания (жесткие классы 0/1) вместо вероятностей или оценок, ROC-AUC вырождается и становится равной accuracy (доле правильных ответов). Это происходит потому, что ROC-кривая строится для различных пороговых значений, а при бинарных предсказаниях существует только один эффективный порог, разделяющий 0 и 1.

Техническая причина: Кривая будет состоять всего из двух точек: (0,0) и (1,1), и площадь под ней (AUC) будет равна 0.5, если модель не идеальна. Фактически, roc_auc_score(y_true, y_pred_binary) вычисляет площадь под кривой, построенной по единственной точке (FPR, TPR), что эквивалентно accuracy.

Пример и вывод:

from sklearn.metrics import roc_auc_score, accuracy_score

y_true = [0, 1, 0, 1]
y_pred_binary = [0, 1, 1, 0]  # Бинарные предсказания

auc = roc_auc_score(y_true, y_pred_binary)
acc = accuracy_score(y_true, y_pred_binary)
print(f'ROC-AUC: {auc}')   # 0.5
print(f'Accuracy: {acc}')  # 0.5
print('ROC-AUC равна Accuracy?', auc == acc)  # True

Практический совет: Для оценки бинарного классификатора используйте accuracy_score, precision_score, recall_score или f1_score. ROC-AUC теряет смысл, если модель не выдает вероятности или скоринговые оценки.