Ответ
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% реальных проблем". Это осознанный бизнес-компромисс.