Урок курса

Precision, Recall и F1-score: как выбрать метрику

Data Scientist: от данных до деплоя моделей

Для бинарной классификации confusion matrix содержит true positive, false positive, true negative и false negative. Precision отвечает: какая доля предсказанных положительных действительно положительна. Recall: какую долю всех реальных положительных мы нашли.

Precision = rac{TP}{TP + FP}

Recall = rac{TP}{TP + FN}

Высокий precision важен, когда ложное срабатывание дорого. Высокий recall — когда опасно пропустить положительный объект. Метрику выбирают по цене ошибок, а не по тому, какая выглядит выше.

F1 и дисбаланс классов

F1 — гармоническое среднее precision и recall. Оно высоко только тогда, когда обе величины достаточно высоки. Но F1 не учитывает true negatives и предполагает примерно равную важность precision и recall.

При редком классе accuracy может быть бесполезной: модель, всегда отвечающая «нет», получит 99% при одном проценте positives. Показывайте baseline, confusion matrix и метрики по каждому важному классу.

Для multiclass-задачи macro average одинаково взвешивает классы, micro суммирует решения по объектам, weighted учитывает размер классов. Выбор агрегации тоже является продуктовым решением.

Порог и PR-кривая

Классификатор часто выдаёт score или вероятность, а метка получается после порога. Снижение порога обычно повышает recall и снижает precision. Поэтому сравнивать модели только при пороге 0,5 необязательно разумно.

Порог выбирают на validation по стоимости FP и FN, ограничениям мощности ручной проверки или целевому recall. На test применяют уже зафиксированный порог. PR-кривая особенно информативна при редком положительном классе; ROC AUC может выглядеть хорошо, хотя рабочая область precision неудовлетворительна.

После запуска следите за метриками и калибровкой: доля классов и цена ошибок меняются. Одна offline F1 не описывает работу системы во всех режимах.

Рассчитаем метрики для фильтра спама

Классификатор пометил 40 писем как спам: 30 действительно спам, 10 — нормальные письма. Ещё 20 спам-писем он пропустил. Положительный класс здесь — спам, поэтому TP=30, FP=10, FN=20. Отдельно выберите класс: если положительным объявить нормальное письмо, формулы будут считать другой смысл.

tp, fp, fn = 30, 10, 20
precision = tp / (tp+fp)
recall = tp / (tp+fn)
f1 = 2*tp / (2*tp+fp+fn)
print(round(precision, 3), round(recall, 3), round(f1, 3))
assert precision == 0.75 and recall == 0.6

Precision=0,75: четверть блокировок ошибочна. Recall=0,60: система нашла только 60% спама. F1 около 0,667 объединяет два показателя, но не выражает денежную цену потерянного делового письма. При выборе порога смотрите precision–recall и количество ошибок. Определения метрик scikit-learn.

Продолжите разбор: Train, validation и test: как разделить данные.

Задача 1

Какая метрика напрямую отвечает на вопрос «какую долю реальных положительных объектов мы нашли»?

Выберите один вариант
Без регистрации · результат не сохраняется

Продолжить с сохранением прогресса

Перейдите к уроку в учебном кабинете.

Перейти к интерактивному уроку