Что такое recall (полнота)?

Ответ

Recall (полнота или чувствительность) — это метрика классификации, которая отвечает на вопрос: «Какую долю всех реальных положительных объектов модель смогла правильно обнаружить?».

Формула: [ Recall = frac{TP}{TP + FN} ] где:

  • TP (True Positive) — верно предсказанные положительные классы.
  • FN (False Negative) — ложноотрицательные, т.е. реальные положительные объекты, которые модель пропустила (ошибка 2-го рода).

Практический пример: В задаче поиска дефектных товаров на производстве, если в партии из 1000 единиц брака действительно 50, а наша система нашла только 40 из них, то recall = 40/50 = 0.8. Мы пропустили 10 бракованных товаров (FN).

Код для расчета:

from sklearn.metrics import recall_score

# Пример: диагностика заболевания
y_true = [1, 0, 1, 1, 0, 1]  # 4 больных пациента
# Модель предсказала 3-го пациента здоровым (FN)
y_pred = [1, 0, 0, 1, 0, 1]

recall = recall_score(y_true, y_pred)
print(f'Recall: {recall:.2f}') # 0.75 (3 TP из 4 реальных положительных)

Когда recall критически важен? В задачах, где пропуск положительного случая (FN) имеет высокую стоимость:

  • Скрининг заболеваний: Пропустить больного пациента — опасная ошибка.
  • Поиск угроз безопасности: Не обнаружить реальную угрозу.
  • Поисковые системы: Пользователь хочет найти все релевантные документы.

Для повышения recall часто приходится жертвовать precision, снижая порог классификации. Это приводит к увеличению FP (ложных срабатываний). Оптимальный баланс между precision и recall определяется бизнес-требованиями и часто оценивается с помощью F1-score (среднее гармоническое) или Precision-Recall кривой.

Ответ 18+ 🔞

Давай разжую тебе эту тему про recall, а то смотрю, у тебя глаза уже стекленеют. Представь, что ты начальник цеха, и у тебя на конвейере полная жопа — то брак проскакивает, то ещё какая-нибудь хрень. Ты ставишь систему, которая должна ловить все эти косяки. Так вот, recall — это как раз ответ на вопрос: «А эта твоя умная система, блядь, сколько реального брака она вообще нашла? Или она, как мартышлюшка, половину просмотрела?»

Если по-человечески: это доля реальных косяков, которые твоя модель не пропустила. Формула проще пареной репы, хоть и выглядит страшно:

[ Recall = frac{TP}{TP + FN} ]

Расшифровываю:

  • TP (True Positive) — это когда модель кричит «Ага, брак!» — и это правда брак. Молодец, пизда рулю.
  • FN (False Negative) — а вот это уже пиздец. Это когда товар на самом деле бракованный, а твоя умная железяка посмотрела на него и сказала: «Всё ок, проходи». Вот эти вот пропущенные дефекты — они и есть самые опасные косяки, ошибка второго рода, ёпта.

Пример из жизни, чтобы вообще всё встало на свои места: Допустим, на твоём заводе из 1000 бутылок 50 — с трещинами, то есть реальный брак. Твоя система, похваставшись перед директором, нашла 40 из них. Казалось бы, молодцы? А вот хуй там! Recall будет считаться так: 40 (найденный брак, TP) делим на все 50 реальных трещин (TP + FN). Получается 40/50 = 0.8. То есть ты словил 80% брака, но 10 хреновых бутылок всё равно утекли к покупателю. Вот эти 10 — они и есть твои FN, из-за которых потом приедет разъярённый клиент и будет ебать тебя в сраку.

Вот тебе код, чтобы не быть голословным:

from sklearn.metrics import recall_score

# Допустим, проверяем пациентов. 1 — болен, 0 — здоров.
y_true = [1, 0, 1, 1, 0, 1]  # Всего 4 больных чувака.
# А наша модель третьего пациента проглядела, посчитала здоровым (FN).
y_pred = [1, 0, 0, 1, 0, 1]

recall = recall_score(y_true, y_pred)
print(f'Recall: {recall:.2f}') # Выведет 0.75

Считаем: модель правильно идентифицировала 3 больных из 4 (TP=3, FN=1). 3 / (3+1) = 0.75. Recall 75%. Один бедолага остался без диагноза — волнение ебать, да?

Так когда же на recall надо забивать хуй, а когда паниковать? Паниковать нужно тогда, когда пропуск цели стоит дороже ложной тревоги. То есть когда цена FN — овердохуища.

  • Медицинская диагностика: Пропустить рак у пациента — это пиздец и потенциальный труп. Лучше десять раз ошибиться и отправить здорового на допобследование (FP), чем один раз пропустить.
  • Поиск угроз в аэропорту: Не найти бомбу в багаже — это тебе не хитрая жопа, это катастрофа. Ложные срабатывания у охраны — да похуй, пускай всех обыскивают.
  • Поисковик: Если человек ищет «как починить смеситель», ему нужно ВСЕ релевантные статьи, а не три самые точные. Пропустить хорошую инструкцию (FN) — плохо.

Запомни главную дилемму: чтобы повысить recall (ловить больше реальных угроз), почти всегда приходится снижать порог срабатывания модели. Это значит, что она станет параноиком и начнёт орать на каждую тень. Precision (точность) при этом просядет, потому что вырастет количество ложных срабатываний (FP). Балансировать между «ничего не пропустить» и «не орать на каждого голубя» помогает F1-score (среднее гармоническое) или Precision-Recall кривая. Но это уже, как говорится, совсем другая история, ёперный театр.