Когда Accuracy не хватает, используем две другие метрики/
Precision (Точность предсказаний)
Вопрос: Из тех, кого модель назвала положительными (класс 1), сколько действительно положительные?
Precision = TP / (TP + FP)
Простыми словами: Когда модель говорит "да", как часто она права?
Пример: Спам-фильтр отправил 100 писем в спам. Из них реально спама — 90, а 10 — нормальные письма.
Precision = 90 / (90 + 10) = 90 / 100 = 0.9 = 90%
Когда фильтр говорит "это спам", он прав в 90% случаев.
Recall (Полнота, Чувствительность)
Вопрос: Из всех реально положительных объектов, сколько модель нашла?
Recall = TP / (TP + FN)
Простыми словами: Из всех "да", сколько модель смогла найти?
Пример: Пришло 200 спам-писем. Спам-фильтр поймал 150, а 50 пропустил.
Recall = 150 / (150 + 50) = 150 / 200 = 0.75 = 75%
Фильтр находит 75% всего спама.
Как запомнить?
Precision — про качество положительных предсказаний
"Когда я говорю 'да', как часто я прав?"
Recall — про количество найденных положительных
"Сколько всех 'да' я смог найти?"
Медицинский пример
Тест на болезнь проверил 100 больных и 100 здоровых:
- Нашёл 80 больных (TP = 80)
- Пропустил 20 больных (FN = 20)
- Правильно определил 90 здоровых (TN = 90)
- Ошибочно "нашёл болезнь" у 10 здоровых (FP = 10)
Precision = 80 / (80 + 10) = 80 / 90 = 88.9%
Когда тест говорит "болен", он прав в 89% случаев
Recall = 80 / (80 + 20) = 80 / 100 = 80%
Тест находит 80% всех больных
Компромисс между Precision и Recall
Проблема: обычно нельзя одновременно улучшить обе метрики!
- Хочешь повысить Recall (найти больше больных)? → будет больше FP (ложных тревог) → упадёт Precision
- Хочешь повысить Precision (меньше ошибаться)? → будешь осторожнее → пропустишь больше (FN) → упадёт Recall