Ответ
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), наглядно показывает этот компромисс.
Ответ 18+ 🔞
Э, слушай, давай разберём эту тему, а то у некоторых от этих терминов уже глаза на лоб лезут, как у совы. TPR и FPR — это, по сути, две стороны одной и той же дохлой кошки, которую мы пытаемся оживить, то есть нашей модели.
TPR (он же Полнота, Recall, Чувствительность) — это ответ на вопрос: «А не проебал ли я чего важного?». Если проще: из всех реально больных чуваков, сколько моя модель правильно опознала и сказала «да, ты болен»? Если TPR низкий — значит, ты кучу больных отправил домой с миром, а они потом, простите за выражение, сдохнут. Это пиздец как важно, например, в медицине. Высокий TPR — это когда ты почти ни одного реального случая не пропустил.
FPR (Ложноположительная частота) — это уже про другую жопу. Он отвечает на вопрос: «Сколько здоровых людей я, сука, попутал и заставил переживать и тратить деньги на ненужные анализы?». Если FPR высокий — твоя модель истеричка, которая орет «КАРАУЛ!» на каждого второго здорового. Здоровые люди начинают тебя ненавидеть, а врачи тратят время впустую.
Вот смотри на пальцах, ёпта:
| Метрика | Формула | Что значит на человеческом? |
|---|---|---|
| TPR (Recall) | TP / (TP + FN) |
Какую кучу реально больных я нашёл? Если он 1 — ты молодец, всех выцепил. Если 0 — ты слепой крот, нихуя не видишь. |
| FPR | FP / (FP + TN) |
Сколько здоровых лбов я обосрал понапрасну? Если он 0 — ты ясновидящий, ни разу не ошибся. Если 1 — ты объявил войну всему здоровому населению, пидарас шерстяной. |
А теперь практика, мать его. Вот код, тут всё чётко:
from sklearn.metrics import confusion_matrix
# Допустим, 1 — это больной (пиздец), 0 — здоровый (ура)
y_true = [1, 0, 1, 1, 0, 0]
# А это наша гениальная модель понаделала предсказаний
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 (ни одного здорового не задела). В реальности это хуй с горы. Чем выше TPR ты выжимаешь, тем обычно выше лезет и FPR. Вся эта ебушки-воробушки с ROC-кривой как раз про этот вечный компромисс: «Готов ли ты ошибаться на здоровых, лишь бы ни один больной не ушёл?». Выбор за тобой, сам от себя охуей, но теперь-то ты хоть понимаешь, что выбираешь.