Главная
#Математика и ML #Classification #Data Science

Precision, recall и F1: как понять метрики классификации в Data Science в 2026 году.

Когда студенты впервые видят accuracy, им кажется, что задача оценки классификатора уже решена. Если модель угадала 95% ответов, значит она хорошая. На практике именно в этот момент и начинается путаница. В Data Science модель почти никогда не оценивают одной цифрой, потому что не все ошибки стоят одинаково. Иногда опаснее пропустить мошенника, чем по ошибке остановить честную транзакцию. Иногда, наоборот, важнее не тревожить врача лишним ложным сигналом. Поэтому precision, recall и F1 не являются декоративными метриками. Они показывают, как именно модель ошибается.

Содержание
  1. С чего начинается понимание метрик классификации
  2. Precision: когда важна чистота положительных предсказаний
  3. Recall: когда опасно что-то пропустить
  4. Почему precision и recall тянут модель в разные стороны
  5. F1: когда нужен баланс между двумя режимами
  6. Где эти метрики используются в Machine Learning
  7. Почему одной метрики мало
  8. Пример на Python
  9. Как читать эти метрики на практике
  10. Kaggle notebook по теме:

Интуитивно classification model можно представить как фильтр. На вход поступают объекты, а на выходе модель говорит: положительный класс или отрицательный. Но любой фильтр можно сделать либо более строгим, либо более мягким. Если он слишком строгий, он почти не допускает ложных срабатываний, но начинает пропускать настоящие положительные объекты. Если слишком мягкий, он находит почти всех нужных, но вместе с ними захватывает много лишнего. Именно в этой развилке рождаются precision и recall.

С чего начинается понимание метрик классификации

Сначала нужно посмотреть не на формулу, а на таблицу ошибок. В машинном обучении она называется confusion matrix. Это не отдельный алгоритм, а способ разложить все прогнозы модели на четыре типа.

Положительный класс означает событие, которое мы хотим обнаружить: спам, мошенничество, болезнь, отток клиента. Дальше возникают четыре исхода:

TP — модель предсказала положительный класс и оказалась права.

FP — модель предсказала положительный класс, но ошиблась.

FN — модель предсказала отрицательный класс, хотя положительный объект был.

TN — модель предсказала отрицательный класс и оказалась права.

Уже здесь видно, что одна и та же accuracy может скрывать совершенно разные режимы работы модели. Если положительный класс редкий, модель может почти всегда говорить «нет» и получать высокий процент правильных ответов только за счет большого числа (TN). Для бизнеса такая модель может быть бесполезной.

Именно поэтому первым естественным продолжением здесь становится confusion matrix как разбор структуры ошибок: она помогает увидеть, где модель реально ошибается, а не просто сколько ответов угадала.

Precision: когда важна чистота положительных предсказаний

Эта формула относится к математической статистике и теории вероятностей, потому что мы оцениваем долю корректных событий среди найденных моделью положительных объектов.

(Precision = \frac{TP}{TP + FP})

Что означает каждый символ:
(Precision) — точность положительного предсказания, то есть доля действительно положительных объектов среди всех объектов, которые модель пометила как положительные;
(TP) — true positives, верно найденные положительные объекты;
(FP) — false positives, ложные срабатывания модели.

Числитель берется из правильных положительных ответов, потому что именно они представляют ценность. В знаменателе стоит все, что модель назвала положительным. Поэтому precision отвечает на вопрос: если модель сказала «да», насколько ей можно доверять.

Численный пример: пусть модель выделила 10 подозрительных транзакций. Из них 8 действительно мошеннические, а 2 оказались обычными. Тогда (TP = 8), (FP = 2), и

(Precision = \frac{8}{8 + 2} = \frac{8}{10} = 0.8).

Это значит, что 80% положительных сигналов модели были полезными. Высокий precision особенно важен там, где ложная тревога дорого стоит: ручная проверка заявок, блокировка платежей, модерация контента с участием человека.

Recall: когда опасно что-то пропустить

Эта формула тоже относится к математической статистике. Здесь нас уже интересует не чистота найденных объектов, а полнота обнаружения положительного класса.

(Recall = \frac{TP}{TP + FN})

Что означает каждый символ:
(Recall) — полнота, то есть доля найденных положительных объектов среди всех реальных положительных объектов;
(TP) — объекты положительного класса, которые модель действительно поймала;
(FN) — false negatives, реальные положительные объекты, которые модель пропустила.

Recall отвечает на другой вопрос: из всех действительно важных случаев сколько модель вообще смогла заметить.

Численный пример: пусть в данных было 12 мошеннических транзакций. Модель нашла 8 из них, а 4 пропустила. Тогда (TP = 8), (FN = 4), и

(Recall = \frac{8}{8 + 4} = \frac{8}{12} \approx 0.667).

То есть модель находит примерно 66.7% всех действительно положительных случаев. Recall особенно важен в медицине, fraud detection, поиске дефектов и информационном поиске, где пропуск нужного объекта может быть дороже лишнего сигнала.

Почему precision и recall тянут модель в разные стороны

В задачах классификации модель часто выдает не жесткий класс, а вероятность положительного исхода. Далее мы сами выбираем порог решения.

(\hat{y} = 1, \text{ если } \hat{p}(x) ge t)

Что означает каждый символ:
(\hat{y}) — итоговый предсказанный класс;
(\hat{p}(x)) — оценка вероятности положительного класса для объекта (x);
(t) — threshold, порог принятия решения.

Если уменьшить (t), модель чаще говорит «положительный класс». Recall обычно растет, потому что мы пропускаем меньше настоящих положительных объектов. Но одновременно часто растет и число ложных тревог, а precision падает. Если же увеличить порог, модель становится осторожнее: precision растет, recall снижается. Это и есть геометрический смысл метрик. Мы двигаемся по пространству решений между агрессивным поиском и осторожным подтверждением.

F1: когда нужен баланс между двумя режимами

Формула F1 приходит из математической статистики как гармоническое среднее двух метрик. Здесь важно не просто усреднить precision и recall, а сделать так, чтобы слабое значение сильнее тянуло итог вниз.

(F1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall})

Что означает каждый символ:
(F1) — итоговая метрика баланса между precision и recall;
(Precision) — точность положительных предсказаний;
(Recall) — полнота обнаружения положительного класса.

Если одна из двух метрик высока, а другая низка, F1 не позволит замаскировать проблему. Поэтому в задачах с дисбалансом классов F1 часто полезнее, чем accuracy.

Это особенно хорошо видно на редких событиях: материал про классовый дисбаланс показывает, почему одна только accuracy в таких задачах быстро вводит в заблуждение.

Продолжим тот же пример. У нас уже получилось (Precision = 0.8) и (Recall \approx 0.667). Тогда

(F1 = 2 \cdot \frac{0.8 \cdot 0.667}{0.8 + 0.667} \approx 0.727).

Итоговое значение меньше, чем precision, потому что recall заметно слабее. Именно в этом смысл F1: модель не получает слишком высокой оценки только за одну сильную сторону.

Где эти метрики используются в Machine Learning

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

С точки зрения оптимизации эти метрики редко оптимизируют напрямую в обучении, потому что они недифференцируемы как функции пороговых решений. Модель обычно обучается по гладкой loss function, например по log loss, а уже после обучения мы выбираем threshold и оцениваем precision, recall и F1 на validation или test выборке. Это важная связь между математикой и практикой ML: одна функция отвечает за обучение, другие метрики — за принятие решения о пригодности модели.

Почему одной метрики мало

Представим две модели. Первая очень осторожная: она срабатывает редко, зато почти без ложных тревог. Вторая более агрессивная: она находит больше положительных случаев, но тревожит систему чаще. Если смотреть только на precision, победит первая. Если только на recall, победит вторая. Если задача бизнес-критична, выбор между ними зависит не от вкуса, а от цены ошибки.

Поэтому в хорошем анализе classification model почти всегда смотрят на несколько вещей сразу: confusion matrix, precision, recall, F1, а иногда еще precision-recall curve и ROC-AUC. Это не избыточность, а попытка увидеть модель с разных сторон.

Когда положительный класс редкий, особенно полезно отдельно открыть precision-recall curve, а затем сравнить её с ROC-AUC и PR-AUC, чтобы понять, какая кривая действительно лучше отражает качество именно в вашей задаче.

Пример на Python

Ниже показан минимальный пример на Python. Он специально короткий: сначала вручную задаем истинные ответы и прогнозы модели, а затем считаем confusion matrix, precision, recall и F1.

from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score
# Импортируем функции для матрицы ошибок и трех ключевых метрик классификации.

y_true = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
# Здесь записаны истинные классы: шесть положительных объектов и шесть отрицательных.

y_pred = [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0]
# Здесь записаны предсказания модели: она нашла четыре истинно положительных случая,
# один раз ошибочно сработала на отрицательном объекте и два положительных случая пропустила.

cm = confusion_matrix(y_true, y_pred)
# Строим confusion matrix, чтобы увидеть TP, FP, FN и TN в табличной форме.

precision = precision_score(y_true, y_pred)
# Считаем precision: насколько чистыми оказались положительные предсказания модели.

recall = recall_score(y_true, y_pred)
# Считаем recall: какую долю реальных положительных объектов модель нашла.

f1 = f1_score(y_true, y_pred)
# Считаем F1: баланс между precision и recall.

print("Confusion matrix:")
# Печатаем заголовок перед матрицей ошибок.

print(cm)
# Выводим саму матрицу ошибок.

print("Precision:", round(precision, 3))
# Печатаем precision, округляя значение до трех знаков.

print("Recall:", round(recall, 3))
# Печатаем recall, чтобы увидеть полноту обнаружения положительного класса.

print("F1:", round(f1, 3))
# Печатаем F1 как итоговую согласованную оценку двух метрик.

Если разобрать этот пример вручную, получится (TP = 4), (FP = 1), (FN = 2), (TN = 5). Тогда:

(Precision = \frac{4}{4 + 1} = 0.8),

(Recall = \frac{4}{4 + 2} = \frac{4}{6} \approx 0.667),

(F1 = 2 \cdot \frac{0.8 \cdot 0.667}{0.8 + 0.667} \approx 0.727).

Этот пример хорошо показывает мост между математикой, ML и Python: confusion matrix дает структуру ошибок, формулы переводят эту структуру в измеримые метрики, а библиотека scikit-learn позволяет считать их на реальных данных и подбирать порог под конкретную задачу.

А когда модель уже выдаёт вероятности, следующим практическим шагом становится выбор рабочего порога, потому что именно он двигает баланс между precision и recall из формулы в реальный бизнес-процесс.

Как читать эти метрики на практике

Если моделью будут пользоваться люди, которым дорого обходится ложный сигнал, сначала смотрят на precision. Если бизнес страдает от пропуска важных событий, сначала смотрят на recall. Если важно держать рабочий баланс без ухода в крайности, часто начинают с F1. Но правильный порядок все равно зависит от задачи. У хорошего Data Scientist не бывает привычки выбирать метрику автоматически. Он сначала понимает цену ошибки, а уже потом выбирает число, которое эту цену отражает.

В этом и состоит зрелое понимание classification metrics. Precision, recall и F1 не конкурируют друг с другом. Они описывают разные стороны одной и той же модели. Пока не видно, какие именно ошибки делает модель, нельзя говорить, что она действительно хорошая.

Именно поэтому полезно держать рядом и более базовый материал про разницу между классификацией и регрессией: он помогает не путать задачи, в которых нужна структура ошибок по классам, с задачами, где модель обязана предсказывать число.


Kaggle notebook по теме:

https://www.kaggle.com/code/tiwaris436/how-to-calculate-precision-recall-f1-and-more/notebook

Что читать дальше

Связанные статьи по этой теме

Инструменты Python в 2026 году: современный стек для профессиональной разработки Что должен знать Junior Data Scientist в 2026 году? Как собрать GitHub-портфолио для Data Science
Вернуться в блог