Как работает ROC-кривая?
ROC-кривая (Receiver Operating Characteristic curve) — это графический способ оценки качества бинарной классификации. Она показывает, насколько хорошо модель может различать два класса при различных порогах классификации.
📌 Основные понятия
Перед тем как понять, как работает ROC-кривая, важно разобраться с ключевыми терминами:
True Positive Rate (TPR) — также называется Recall или чувствительность.
Показывает долю правильно предсказанных положительных объектов от всех реальных положительных:
TPR = TP / (TP + FN)
False Positive Rate (FPR) — доля отрицательных объектов, которые были ошибочно отнесены к положительным:
FPR = FP / (FP + TN)
Где:
-
TP (True Positive) — правильно предсказанные положительные;
-
FP (False Positive) — отрицательные, ошибочно предсказанные как положительные;
-
FN (False Negative) — положительные, ошибочно предсказанные как отрицательные;
-
TN (True Negative) — правильно предсказанные отрицательные.
📈 Как строится ROC-кривая
-
Модель возвращает вероятности принадлежности к положительному классу (например, 0.73, 0.61, 0.21 и т.д.).
-
Выбираются разные пороги (thresholds) — от 0 до 1. Для каждого порога:
-
Все объекты с вероятностью выше порога считаются положительными.
-
Остальные — отрицательными.
-
-
Для каждого порога вычисляются:
-
TPR (ось Y)
-
FPR (ось X)
-
-
Результирующие точки (FPR, TPR) соединяются в график.
-
Всегда есть две крайние точки:
-
(0, 0) — если порог = 1.0: всё считается отрицательным;
-
(1, 1) — если порог = 0: всё считается положительным.
-
📉 Что показывает ROC-кривая
ROC-кривая позволяет понять, как модель ведет себя при разных порогах, и как соотносятся ошибки двух типов:
-
Высокий TPR — модель хорошо находит положительные случаи.
-
Низкий FPR — модель редко путает отрицательные с положительными.
🧮 Площадь под ROC-кривой (AUC)
AUC (Area Under Curve) — площадь под ROC-кривой:
-
Значение AUC ∈ [0, 1]
-
1.0 — идеальная модель.
-
0.5 — случайное угадывание.
-
< 0.5 — модель «перепутала» классы (можно инвертировать предсказания и получить > 0.5).
-
AUC измеряет вероятность того, что модель поставит более высокую вероятность положительному примеру, чем отрицательному.
📘 Пример
Предположим, у нас есть модель, которая оценила вероятности 6 объектов:
Истинный класс | Предсказанная вероятность |
---|---|
1 | 0.95 |
--- | --- |
0 | 0.90 |
--- | --- |
1 | 0.80 |
--- | --- |
0 | 0.65 |
--- | --- |
1 | 0.60 |
--- | --- |
0 | 0.30 |
--- | --- |
Рассчитаем TPR и FPR при разных порогах (например, 0.9, 0.8, 0.6, 0.3), построим кривую по точкам и получим значение AUC.
📊 Использование в Python (sklearn)
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
# Пример:
y_true = [0, 0, 1, 1]
y_scores = [0.1, 0.4, 0.35, 0.8]
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], 'k--') # Диагональ
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC-кривая')
plt.legend()
plt.show()
🛠 Преимущества ROC-кривой
-
Независима от дисбаланса классов.
В отличие от accuracy, ROC и AUC фокусируются на вероятностях, а не просто на точности. -
Можно анализировать модель на разных порогах.
Это важно, если цена ошибки FP и FN различается.
⚠ Когда ROC-кривая может быть недостаточной
-
В случае сильно несбалансированных данных:
-
Даже при высоком FPR, абсолютное число FP может быть низким, и ROC-кривая может «обманывать» нас.
-
В этом случае лучше использовать Precision-Recall кривую.
-
📎 Сводка метрик, связанных с ROC
Метрика | Формула | Назначение |
---|---|---|
TPR | TP / (TP + FN) | Доля правильно найденных положит. |
--- | --- | --- |
FPR | FP / (FP + TN) | Доля ложно найденных положит. |
--- | --- | --- |
AUC | Площадь под ROC-кривой | Обобщённая метрика качества |
--- | --- | --- |
🔁 Сравнение моделей по ROC
Если у вас есть несколько моделей, вы можете:
-
Построить их ROC-кривые на одном графике.
-
Сравнить их AUC: чем выше AUC, тем лучше модель в целом отличает классы.