Ответ
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 может давать оптимистичную оценку.
Ответ 18+ 🔞
А, ну это ж классика, ёпта! Сидишь такой, настраиваешь очередную модельку, а она тебе вместо людей и не-людей одних мартышлюшек на выходе рисует. И как понять, работает она или просто как обезьяна с гранатой — результат случайный? Вот тут-то на сцену и выходит наш спаситель — ROC-AUC.
Представь себе, блядь, ёперный театр. У тебя есть два стакана: в одном — чистая вода (это наши «хорошие» объекты, класс 1), в другом — говно (класс 0). Задача модели — не перепутать, где что. ROC-кривая — это как раз история её метаний. По одной оси смотрим, сколько воды из правильного стакана мы успешно нацедили (True Positive Rate), а по другой — сколько говна случайно зачерпнули, приняв за воду (False Positive Rate). И мы перебираем все пороги от «слишком бдительный» до «похуй совсем».
А AUC — это просто площадь под этой кривой. Объясняю на пальцах: если площадь 0.5 — твоя модель ничем не лучше, чем подбросить монетку, доверия ебать ноль. Если 1.0 — идеал, она каждую каплю воды отделила от тонны дерьма, не промахнувшись ни разу. Всё, что между — твоя степень просветления.
Чем это, блядь, полезно? Да тем, что эта метрика смотрит не на какой-то один жёсткий порог, а на то, как модель ранжирует объекты. То есть насколько в среднем «положительные» примеры получают от неё более высокий «скор», чем «отрицательные». Дисбаланс классов её не смущает, что часто бывает охуенно удобно.
Вот, смотри, как это в коде выглядит, тут всё просто:
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()
Но есть, сука, и подводный камень, ядрёна вошь! Если у тебя данных, где «говна» овердохуища, а «воды» — три капли, ROC-AUC может нарисовать приличную картинку, даже если модель — пизда рулю. Потому что мало False Positive при куче Negative — и метрика уже довольна. В таких случаях надо смотреть на Precision-Recall AUC, она более придирчивая и покажет, что твоя «хорошая» модель на самом деле хитрая жопа, которая всех подряд помечает как «говно», и поэтому почти не ошибается. Вот так-то, чувак.