Когда лучше использовать Precision?

«Когда лучше использовать Precision?» — вопрос из категории Метрики и функции потерь, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Precision (точность) я ставлю во главу угла, когда стоимость ложноположительного срабатывания (False Positive) недопустимо высока. Это метрика, отвечающая на вопрос: "Среди всех объектов, которые модель назвала положительными, какую долю составляют настоящие положительные?"

Конкретные примеры из проектов:

  • Рекомендательные системы для дорогих товаров: Если система рекомендует клиенту купить премиум-автомобиль, эта рекомендация должна быть исключительно релевантной. Ложная рекомендация (FP) подорвёт доверие. Здесь я максимизирую Precision, даже ценой снижения Recall (числа всех возможных рекомендаций).
  • Юридический или финансовый скрининг: При автоматическом отборе документов для проверки на соблюдение регуляторных требований (AML/KYC). Отправка на дорогую ручную проверку "чистого" клиента (FP) — это прямые издержки и потеря времени юристов.
  • Поиск информации (Information Retrieval): Когда пользователю важно, чтобы первые 10 результатов поиска (топ-N) были максимально релевантными. Важнее не показать всё (Recall), а не засорять выдачу мусором.

Код для акцента на Precision при подборе порога классификации:

from sklearn.metrics import precision_score, recall_score
import numpy as np

# Допустим, model.predict_proba() возвращает вероятности
probs = model.predict_proba(X_test)[:, 1]

# Перебираем пороги, чтобы найти тот, который даёт Precision > 0.95
thresholds = np.linspace(0.5, 0.99, 50)
for thresh in thresholds:
    y_pred_thresh = (probs > thresh).astype(int)
    current_precision = precision_score(y_test, y_pred_thresh)
    if current_precision >= 0.95:
        current_recall = recall_score(y_test, y_pred_thresh)
        print(f"Порог: {thresh:.3f}, Precision: {current_precision:.3f}, Recall: {current_recall:.3f}")
        # Выбираем этот порог для production
        break

В таких задачах я прямо обсуждаю с продукт-менеджером: "Мы можем гарантировать, что 95% помеченных системой действий будут проблемными, но при этом мы пропустим около 30% реальных проблем". Это осознанный бизнес-компромисс.