Ответ
Если передать бинарные предсказания (жесткие классы 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 теряет смысл, если модель не выдает вероятности или скоринговые оценки.