ROC-кривая

Что измеряет
Definition
ROC-кривая показывает, как меняется соотношение между true positive rate и false positive rate бинарного классификатора при изменении порога принятия решения.
ROC расшифровывается как Receiver Operating Characteristic.
ROC-кривая используется для анализа бинарных классификаторов, которые выдают не только класс, но и score:
- вероятность положительного класса;
- расстояние до разделяющей границы;
- confidence score;
- decision function.
Главная идея: классификатор можно сделать более строгим или более мягким, меняя threshold. ROC-кривая показывает поведение модели при разных thresholds.
Формула
ROC-кривая строится по двум величинам.
True Positive Rate
True Positive Rate, TPR, или recall положительного класса:
TPR показывает, какую долю настоящих положительных объектов модель нашла.
False Positive Rate
False Positive Rate, FPR:
FPR показывает, какую долю настоящих отрицательных объектов модель ошибочно назвала положительными.
На ROC-графике:
- ось X — FPR;
- ось Y — TPR.
Каждая точка на кривой соответствует одному threshold.
ROC-AUC
ROC-AUC — площадь под ROC-кривой:
Интерпретация:
- — идеальное ранжирование;
- — примерно случайное угадывание;
- — хуже случайного, возможно, score направлен наоборот.
Интуиция
Представим модель, которая выдаёт вероятность положительного класса.
Если threshold высокий, например 0.9, модель будет редко говорить «положительный класс». Тогда:
- false positives будет мало;
- но часть настоящих positives будет пропущена;
- FPR низкий;
- TPR тоже может быть не очень высоким.
Если threshold низкий, например 0.1, модель будет часто говорить «положительный класс». Тогда:
- она найдёт почти все positives;
- но ошибочно захватит много negatives;
- TPR высокий;
- FPR тоже высокий.
ROC-кривая показывает весь диапазон таких компромиссов.
Хорошая модель располагает положительные объекты выше отрицательных по score. Поэтому её ROC-кривая идёт ближе к верхнему левому углу.
Как интерпретировать
Главные ориентиры:
- чем выше ROC-кривая, тем лучше;
- верхний левый угол — идеальная область;
- диагональ от до соответствует случайному классификатору;
- ROC-AUC измеряет качество ранжирования положительных объектов выше отрицательных.
Пример интерпретации ROC-AUC:
| ROC-AUC | Интерпретация |
|---|---|
| 0.5 | Случайное качество |
| 0.6–0.7 | Слабое качество |
| 0.7–0.8 | Умеренное качество |
| 0.8–0.9 | Хорошее качество |
| 0.9–1.0 | Очень хорошее качество |
Важно: эти границы условные. В реальной задаче качество нужно оценивать с учётом стоимости ошибок и предметной области.
ROC-AUC не выбирает threshold. Он оценивает, насколько хорошо модель ранжирует объекты.
Когда использовать
ROC-кривую стоит использовать, когда:
- задача бинарной классификации;
- модель выдаёт score или вероятность;
- нужно сравнить модели без фиксации threshold;
- классы не слишком экстремально несбалансированы;
- важен общий trade-off между TPR и FPR;
- нужно понять, как модель ведёт себя при разных порогах.
Типичные случаи:
- сравнение логистической регрессии, SVM и случайного леса;
- оценка медицинского классификатора;
- скоринговые модели;
- бинарная классификация материалов или экспериментов;
- предварительный анализ качества ранжирования.
Когда метрика обманывает
ROC-AUC может вводить в заблуждение при сильном дисбалансе классов.
Например, если положительный класс очень редкий, модель может иметь высокий ROC-AUC, но при выбранном threshold давать слишком много false positives.
Причина: FPR считается относительно всех отрицательных объектов:
Если отрицательных объектов очень много, даже небольшой FPR может означать большое абсолютное число ложных срабатываний.
В задачах с редким положительным классом часто полезнее смотреть:
- precision;
- recall;
- F1-score;
- PR-AUC;
- confusion matrix при конкретном threshold.
ROC-AUC также может быть не лучшей метрикой, если:
- важен конкретный рабочий threshold;
- разные типы ошибок имеют разную стоимость;
- вероятности должны быть хорошо откалиброваны;
- положительный класс очень редкий;
- нужна интерпретация качества в терминах precision.
Связанные метрики
Связанные метрики и инструменты:
| Метрика | Что показывает |
|---|---|
| Accuracy | Долю правильных ответов |
| Precision | Долю правильных среди предсказанных positives |
| Recall / TPR | Долю найденных настоящих positives |
| FPR | Долю ошибочно поднятых negatives |
| F1-score | Баланс precision и recall |
| PR-AUC | Площадь под precision-recall curve |
| Confusion matrix | Полную таблицу TP, FP, TN, FN |
Подробнее: Метрики качества классификаторов.
ROC-кривая особенно связана с recall и false positive rate, а PR-кривая — с precision и recall.
Минимальный пример
from sklearn.metrics import roc_auc_score, roc_curve
y_true = [0, 0, 1, 1]
y_score = [0.1, 0.4, 0.35, 0.8]
auc = roc_auc_score(y_true, y_score)
fpr, tpr, thresholds = roc_curve(y_true, y_score)
print("AUC:", auc)
print("FPR:", fpr)
print("TPR:", tpr)
print("thresholds:", thresholds)В этом примере y_score — не итоговые классы, а score модели для положительного класса. ROC строится именно по score, потому что нужно проверить разные thresholds.