Что такое recall
Полнота (recall) — это метрика качества классификационной модели, которая показывает, какую долю объектов из всех истинно положительных случаев модель смогла правильно определить как положительные. Она вычисляется как отношение числа истинно положительных результатов (True Positives, TP) к сумме истинно положительных и ложно отрицательных результатов (False Negatives, FN): Recall = TP / (TP + FN). Эта метрика критически важна в задачах, где пропуск положительного случая (например, болезни или мошеннической транзакции) обходится дороже, чем ложная тревога.
Как это работает
Recall отвечает на вопрос: «Из всех объектов, которые действительно относятся к положительному классу, какую долю модель нашла?». Высокое значение recall означает, что модель редко пропускает истинные положительные случаи, но при этом может давать много ложных срабатываний (False Positives). Низкий recall, наоборот, говорит о том, что модель пропускает значительную часть положительных объектов.
Метрика тесно связана с точностью (precision) — долей правильно предсказанных положительных объектов среди всех объектов, которые модель отнесла к положительному классу. Эти две метрики часто находятся в конфликте: увеличение recall обычно снижает precision, и наоборот. Для поиска баланса используют F-меру (F1-score), которая является гармоническим средним precision и recall.
Пример
Рассмотрим задачу медицинской диагностики. Пусть в группе из 100 человек 30 действительно больны. Модель (тест) правильно определила 25 из них как больных. Тогда:
- TP = 25 (больные, которых модель выявила)
- FN = 5 (больные, которых модель пропустила)
- Recall = 25 / (25 + 5) = 25 / 30 ≈ 0.83
Это означает, что модель обнаружила 83% всех реальных случаев заболевания. Оставшиеся 17% больных остались без диагноза, что может быть критично.
В Python для расчёта recall используется функция recall_score из библиотеки sklearn.metrics:
from sklearn.metrics import recall_score
# Истинные метки: 1 — болен, 0 — здоров
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 1]
# Предсказанные метки модели
y_pred = [1, 0, 1, 0, 0, 1, 0, 1, 0, 1]
# Расчёт полноты
recall = recall_score(y_true, y_pred)
print("Recall:", recall)В этом примере истинных положительных случаев (единиц) — 6, из них модель предсказала 4, поэтому recall = 4/6 ≈ 0.67.
Подводные камни
- Дисбаланс классов: recall может быть высоким, даже если модель просто предсказывает положительный класс для всех объектов. Поэтому его всегда нужно рассматривать вместе с precision.
- Порог классификации: recall зависит от порога вероятности, при котором объект относится к положительному классу. Снижение порога увеличивает recall, но снижает precision.
- Контекст применения: в одних задачах (например, поиск редких заболеваний) важнее максимизировать recall, в других (например, спам-фильтры) — precision.
Когда использовать
Recall — ключевая метрика в областях, где пропуск положительного случая имеет серьёзные последствия:
- Медицинская диагностика — важно не пропустить болезнь.
- Обнаружение мошенничества — пропущенная транзакция может привести к финансовым потерям.
- Поиск информации — полнота показывает, сколько релевантных документов найдено.
В таких случаях модель настраивают на максимизацию recall, даже ценой увеличения ложных срабатываний.
Коротко
- Recall = TP / (TP + FN) — доля найденных истинно положительных объектов.
- Высокий recall означает мало пропущенных положительных случаев, но возможны ложные срабатывания.
- Всегда анализируйте recall вместе с precision и F1-мерой.
- В Python используйте
recall_scoreизsklearn.metrics.
