В чем разница между TPR (True Positive Rate) и FPR (False Positive Rate)?

«В чем разница между TPR (True Positive Rate) и FPR (False Positive Rate)?» — вопрос из категории Метрики и функции потерь, который задают на 30% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TPR (True Positive Rate, Полнота, Recall, Чувствительность) и FPR (False Positive Rate) — это две фундаментальные метрики, оценивающие разные аспекты ошибок бинарного классификатора. Они являются осями для построения ROC-кривой.

Метрика Формула Интерпретация
TPR (Recall) TP / (TP + FN) Какую долю реальных положительных объектов модель правильно нашла?
Высокий TPR означает, что модель редко пропускает целевые случаи (мало False Negatives).
FPR FP / (FP + TN) Какую долю реальных отрицательных объектов модель ошибочно пометила как положительные?
Низкий FPR означает, что модель редко «взывает тревогу» на негативных примерах (мало False Positives).

Практический расчет и интерпретация:

from sklearn.metrics import confusion_matrix

y_true = [1, 0, 1, 1, 0, 0]  # 1 - положительный класс (например, болезнь)
y_pred = [1, 1, 1, 0, 0, 0]  # предсказания модели

# Расчёт матрицы ошибок
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()

# Расчёт метрик
tpr = tp / (tp + fn)  # = 2 / (2 + 1) ≈ 0.67
fpr = fp / (fp + tn)  # = 1 / (1 + 2) ≈ 0.33

print(f"TPR (Recall): {tpr:.2f}")  # Модель находит 67% всех больных.
print(f"FPR: {fpr:.2f}")           # При этом у 33% здоровых она ошибочно диагностирует болезнь.

Идеальный классификатор имеет TPR = 1 (находит все положительные) и FPR = 0 (не ошибается на отрицательных). На практике мы балансируем между этими метриками, сдвигая порог классификации. ROC-кривая, строящаяся по парам (FPR, TPR), наглядно показывает этот компромисс.