Как работает 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-кривая

  1. Модель возвращает вероятности принадлежности к положительному классу (например, 0.73, 0.61, 0.21 и т.д.).

  2. Выбираются разные пороги (thresholds) — от 0 до 1. Для каждого порога:

    • Все объекты с вероятностью выше порога считаются положительными.

    • Остальные — отрицательными.

  3. Для каждого порога вычисляются:

    • TPR (ось Y)

    • FPR (ось X)

  4. Результирующие точки (FPR, TPR) соединяются в график.

  5. Всегда есть две крайние точки:

    • (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, тем лучше модель в целом отличает классы.