Что такое ROC-AUC?

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

Ответ

ROC-AUC (Receiver Operating Characteristic — Area Under Curve) — это метрика для оценки качества бинарного классификатора, которая показывает, насколько хорошо модель разделяет два класса независимо от выбранного порога классификации.

  • ROC-кривая строится, откладывая True Positive Rate (Recall) по оси Y против False Positive Rate по оси X для разных пороговых значений.
  • AUC (Area Under Curve) — это площадь под ROC-кривой. Значение 0.5 соответствует случайному угадыванию, а 1.0 — идеальному разделению.

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

Пример расчета:

from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt

y_true = [0, 1, 0, 1, 1]
y_scores = [0.1, 0.9, 0.3, 0.8, 0.65] # вероятности или score

auc = roc_auc_score(y_true, y_scores)
print(f'AUC: {auc:.3f}') # Например, 0.917

# Построение кривой
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
plt.plot(fpr, tpr, label=f'ROC curve (AUC = {auc:.2f})')
plt.plot([0, 1], [0, 1], 'k--') # Линия случайного классификатора
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()

Важный нюанс: Для сильно несбалансированных данных более информативной может быть Precision-Recall AUC, так как ROC-AUC может давать оптимистичную оценку.