Precision, recall, F1 и ROC-AUC: как выбрать метрику для ML-модели
Разбираем precision, recall, F1, ROC-AUC и PR-AUC на одной задаче: как цена ошибки, дисбаланс классов и порог решения меняют вывод о качестве модели.
Содержание статьи
У вопроса “какая метрика лучше?” нет ответа вне контекста. Для антифрода пропущенная мошенническая транзакция может стоить дорого, а для службы поддержки слишком много false positive быстро превратит модель в источник лишней работы. Поэтому качество классификатора нужно читать через матрицу ошибок, цену решения и выбранный порог, а не через одну красивую цифру.
Коротко
Precision отвечает на вопрос “какая доля найденных моделью позитивных объектов действительно позитивна”, recall — “какую долю всех позитивных объектов модель нашла”. F1 объединяет их в одно гармоническое среднее. ROC-AUC показывает, насколько хорошо модель ранжирует позитивные объекты выше негативных по всем порогам, но при сильном дисбалансе PR-AUC часто лучше отражает полезное качество.
- Начни с определения positive class и стоимости false positive/false negative.
- Не выбирай порог по умолчанию 0.5 без проверки бизнес-сценария.
- Смотри на precision и recall вместе: рост одного часто покупается падением другого.
- Для редкого positive class добавь PR-AUC и таблицу качества по сегментам.
- Разделяй discrimination модели и calibration вероятностей.
Матрица ошибок — общий словарь
Любая бинарная классификация начинается с четырёх исходов. True positive — модель нашла объект нужного класса. False positive — модель сработала, но ошиблась. False negative — важный объект пропущен. True negative — негативный объект правильно оставлен без действия. Пока эти четыре клетки не названы, обсуждение метрик будет расплывчатым.
positive class + threshold + cost of errorОдна и та же модель может иметь разное практическое качество при разных positive class и порогах.
| Факт / прогноз | Позитивный прогноз | Негативный прогноз |
|---|---|---|
| Позитивный факт | TP · нашли нужный объект | FN · пропустили объект |
| Негативный факт | FP · ложная тревога | TN · корректно не сработали |
Precision и recall отвечают на разные вопросы
Precision = TP / (TP + FP). Он важен, когда каждое срабатывание запускает дорогую ручную проверку, блокирует клиента или отправляет сообщение, которому нельзя часто ошибаться. Высокий precision означает, что среди найденных моделью объектов мало ложных тревог.
Recall = TP / (TP + FN). Он нужен, когда пропуск позитивного объекта опаснее лишней проверки. В антифроде это может быть пропущенная мошенническая операция, в медицинском скрининге — пропущенный риск, а в поиске документов — не найденный релевантный материал.
Обычно нельзя максимизировать обе метрики одновременно. Если снизить порог, модель начнёт находить больше позитивных объектов: recall вырастет, но вместе с ним может вырасти число FP и упасть precision. Поэтому правильный вопрос звучит не “какая метрика выше”, а “какой компромисс выдерживает процесс”.
Иллюстративные значения: порог выбирается после оценки стоимости ошибок и пропускной способности процесса.
F1 полезен, когда нужен баланс
F1 = 2 × precision × recall / (precision + recall). Это гармоническое среднее, поэтому одна очень низкая компонента заметно тянет итог вниз. F1 удобен как компактная метрика для сравнения моделей при сопоставимом positive class и одинаковой стратегии выбора порога.
Но F1 не знает, какая ошибка дороже. Он одинаково относится к FP и FN. Если пропуск в пять раз опаснее ложной тревоги, лучше задать минимальный recall, а среди подходящих порогов выбрать вариант с лучшим precision или считать взвешенную F-бету. Не превращай F1 в универсальный KPI только потому, что его легко показать в таблице.
from sklearn.metrics import precision_score, recall_score, f1_score
for threshold in (0.2, 0.4, 0.6, 0.8):
predicted = (proba >= threshold).astype(int)
print({
'threshold': threshold,
'precision': precision_score(y_true, predicted),
'recall': recall_score(y_true, predicted),
'f1': f1_score(y_true, predicted),
})ROC-AUC: качество ранжирования, а не готового решения
ROC-AUC измеряет, насколько часто случайный positive получает от модели больший score, чем случайный negative. Порог не фиксирован: график проходит по возможным уровням чувствительности и false positive rate. Это делает ROC-AUC удобным для сравнения способности моделей разделять классы до выбора операционного порога.
Высокий ROC-AUC не гарантирует, что выбранный порог даст приемлемые precision и recall. Модель может хорошо ранжировать объекты, но быть плохо откалибрована или давать слишком много ложных срабатываний при редком positive class. Для редких событий посмотри PR-кривую: она напрямую показывает precision и recall по порогам.
| Метрика | Что показывает | Чего не показывает |
|---|---|---|
| Precision | точность найденных позитивных объектов | сколько позитивов пропущено |
| Recall | долю найденных позитивных объектов | сколько ложных тревог внутри найденных |
| F1 | сбалансированное сочетание precision и recall | разную стоимость FP и FN |
| ROC-AUC | способность ранжировать классы | качество конкретного порога |
| PR-AUC | качество precision-recall при дисбалансе | калибровку вероятностей |
Порог выбирается после модели
Порог — это часть продукта, а не случайная настройка в ноутбуке. Сначала получи score или вероятность на валидационной выборке, затем посмотри кривые и стоимость решений. Если у команды есть ограничение “не больше 500 проверок в день”, threshold можно подобрать под этот бюджет. Если есть SLA для recall, сначала зафиксируй минимальный recall, а потом оптимизируй precision.
Важно выбирать порог на данных, которые не использовались для обучения и подбора гиперпараметров. Иначе качество окажется завышенным. После запуска отдельно контролируй распределение score, долю срабатываний и фактическое качество по подтверждённым исходам.
AUC помогает сравнить ranking, но решение всегда живёт в конкретной точке кривой. Покажи эту точку и её бизнес-последствия.
- Определи, какое действие запускает позитивный прогноз.
- Назови допустимое число false positive и false negative.
- Подбери threshold на validation, финально проверь на test.
- Проверь стабильность precision и recall по сегментам.
- Зафиксируй порог и причину его выбора в model card.
Дисбаланс классов меняет интерпретацию
При positive class в 1% даже 99% accuracy может означать, что модель всегда отвечает “нет” и не находит ни одного нужного объекта. Поэтому accuracy почти никогда не должна быть единственной метрикой для редкого события. Добавь baseline, confusion matrix, precision, recall и PR-AUC.
Сравнивай модели на одинаковом временном срезе и одинаковом positive class. Если поменялся sampling, class weight или правило разметки, числа могут стать несопоставимыми. В отчёте рядом с метрикой покажи support: сколько фактических positive и negative вошло в проверку.
support + confusion matrix + precision/recall + thresholdБез размера классов и порога одна метрика не даёт достаточного контекста.
Как ответить на ML-кейс на собеседовании
Сильный ответ начинается с уточняющего вопроса: что считается positive и какое действие следует за прогнозом. Затем назови стоимость FP и FN, предложи набор метрик и объясни, как выберешь threshold. Наконец, добавь проверку по сегментам и план мониторинга после запуска. Такой ответ показывает, что ты понимаешь не только формулы, но и место модели в процессе.
Не говори “возьмём ROC-AUC, потому что это стандарт”. Скажи, что ROC-AUC полезен для сравнения ranking, но для принятия решения нужны precision/recall на выбранном пороге, PR-AUC при дисбалансе и проверка calibration, если score интерпретируется как вероятность.
Материалы по теме
Собеседование Data Scientist и ML-аналитика: метрики, модели и кейсы
Объёмный разбор задач на собеседовании Data Scientist и ML-аналитика: валидация, leakage, imbalance, ROC-AUC, threshold, эксперименты и связь модели с бизнесом.
Читать материалRAG для бизнеса: как оценить качество поиска и ответа
Практический гайд по оценке RAG-системы: отдельно проверяем retrieval и генерацию, собираем тестовый набор, считаем groundedness и не путаем красивый ответ с полезным.
Читать материалСобеседование аналитика данных: 30 задач и как решать их вслух
Большой практический гайд по собеседованию аналитика данных: SQL, Python, метрики, статистика, кейсы, дашборды и ответы, которые показывают ход мышления.
Читать материал