За что отвечают точки на графике ROC AUC
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Точки на графике ROC AUC
ROC AUC (Receiver Operating Characteristic Area Under Curve) — это метрика оценки качества классификационных моделей. Каждая точка на ROC-кривой представляет производительность модели при определённом пороге классификации (threshold).
Структура ROC-кривой
График ROC показает зависимость:
-
По оси Y: True Positive Rate (TPR) = TP / (TP + FN)
- Доля положительных случаев, которые модель правильно определила
- "Чувствительность" или "Recall"
-
По оси X: False Positive Rate (FPR) = FP / (FP + TN)
- Доля отрицательных случаев, которые модель неправильно классифицировала как положительные
- "1 - Specificity"
Что представляет каждая точка
Каждая точка на ROC-кривой соответствует одному значению порога классификации (от 0 до 1):
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
# Вероятности предсказания модели
y_true = [0, 0, 1, 1, 1, 0, 1]
y_proba = [0.1, 0.2, 0.4, 0.7, 0.9, 0.3, 0.8]
# Рассчёт ROC-кривой
fpr, tpr, thresholds = roc_curve(y_true, y_proba)
# Каждый порог даёт одну точку
print("Пороги (thresholds):")
for i, threshold in enumerate(thresholds):
print(f"Порог {threshold:.2f}: FPR={fpr[i]:.2f}, TPR={tpr[i]:.2f}")
# Визуализация
plt.plot(fpr, tpr, marker="o", markersize=8)
plt.xlabel("False Positive Rate (FPR)")
plt.ylabel("True Positive Rate (TPR)")
plt.title("ROC-кривая")
plt.show()
Пример: как меняются метрики при разных порогах
# Допустим, модель выдала вероятности:
y_true = [0, 0, 1, 1, 1]
y_proba = [0.2, 0.4, 0.5, 0.7, 0.9]
# Порог = 0.5
# Предсказания: [0, 0, 1, 1, 1]
# TP=3, FP=0, FN=0, TN=2
# TPR = 3/3 = 1.0, FPR = 0/2 = 0.0 → Точка (0.0, 1.0)
# Порог = 0.3
# Предсказания: [0, 1, 1, 1, 1]
# TP=3, FP=1, FN=0, TN=1
# TPR = 3/3 = 1.0, FPR = 1/2 = 0.5 → Точка (0.5, 1.0)
# Порог = 0.8
# Предсказания: [0, 0, 0, 0, 1]
# TP=1, FP=0, FN=2, TN=2
# TPR = 1/3 = 0.33, FPR = 0/2 = 0.0 → Точка (0.0, 0.33)
Интерпретация положения точек
Точки в левом верхнем углу (FPR низкий, TPR высокий):
- Модель хорошо различает классы
- Мало ложных срабатываний
- Высокая recall и precision
Точки на диагонали (FPR ≈ TPR):
- Модель не лучше случайного гадания
- Нет дискриминирующей способности
Точки в правом нижнем углу (FPR высокий, TPR низкий):
- Модель имеет негативную предсказательную способность
- Много ложных срабатываний
- Мало верных положительных
AUC (Area Under Curve)
AUC — это площадь под ROC-кривой:
from sklearn.metrics import roc_auc_score
auc_score = roc_auc_score(y_true, y_proba)
print(f"AUC: {auc_score:.3f}")
# Интерпретация:
# AUC = 1.0 → идеальная классификация
# AUC = 0.5 → случайное гадание
# AUC = 0.0 → полностью неверная классификация
Выбор оптимального порога
import numpy as np
# Найти оптимальный порог (максимизировать TPR - FPR)
optimal_idx = np.argmax(tpr - fpr)
optimal_threshold = thresholds[optimal_idx]
print(f"Оптимальный порог: {optimal_threshold:.3f}")
print(f"При этом пороге: TPR={tpr[optimal_idx]:.3f}, FPR={fpr[optimal_idx]:.3f}")
Практическое применение
ROC-кривая помогает:
- Сравнивать модели: модель с более высокой AUC лучше
- Выбирать порог классификации: в зависимости от задачи (precision vs recall)
- Оценивать stability: кривая должна быть "гладкой", без скачков
- Работать с дисбалансом классов: ROC менее чувствительна к дисбалансу, чем accuracy
Заключение
Каждая точка на ROC-кривой — это пара (FPR, TPR) для конкретного порога классификации. Перемещая порог от 0 до 1, мы получаем множество точек, которые образуют кривую. AUC — это интегральная характеристика качества модели, независимая от выбора порога. ROC-анализ особенно полезен при необходимости баланса между чувствительностью и специфичностью.