Ответ
ROC-AUC является более информативной и надежной метрикой, чем accuracy, по нескольким ключевым причинам:
- Независимость от порога классификации: Accuracy оценивает качество бинарных предсказаний (0 или 1) при одном, часто произвольно выбранном пороге (обычно 0.5). ROC-AUC же оценивает способность модели разделять классы по всем возможным порогам, что дает более полную картину.
- Устойчивость к несбалансированным данным: На сильно несбалансированных выборках (например, 99% негативных, 1% позитивных) accuracy вводит в заблуждение. Модель, всегда предсказывающая мажоритарный класс, получит accuracy 99%, но будет бесполесной. ROC-AUC корректно оценит, что модель не умеет разделять классы.
- Оценка вероятностей: ROC-AUC работает с вероятностями (
y_score), а не с жесткими предсказаниями, что позволяет сравнивать модели на более глубоком уровне.
Наглядный пример:
import numpy as np
from sklearn.metrics import accuracy_score, roc_auc_score
# Сильно несбалансированные данные
n_samples = 1000
y_true = np.array([0] * 990 + [1] * 10) # 1% положительных
# Модель-«угадыватель», всегда предсказывающая 0
y_pred = np.zeros(n_samples)
y_proba = np.random.uniform(0, 0.1, n_samples) # Случайные низкие вероятности
print("Accuracy (всегда 0):", accuracy_score(y_true, y_pred)) # 0.99 - отличный, но ложный результат
print("ROC-AUC (случайные вероятности):", roc_auc_score(y_true, y_proba)) # ~0.5 - показывает отсутствие разделения
Таким образом, ROC-AUC — это метрика разделимости классов, в то время как accuracy — это метрика правильности классификации при конкретном пороге.