← Назад к вопросам

Приведи пример использования метрики precision

1.0 Junior🔥 111 комментариев
#Метрики и оценка моделей

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Precision: определение и практические примеры

Формальное определение

Precision (точность) показывает, какая доля предсказанных положительных примеров действительно положительная:

Precision = TP / (TP + FP)

где:
TP = True Positives (верно предсказанные положительные)
FP = False Positives (неправильно предсказанные положительные)

Другими словами: из всех примеров, которые модель классифицировала как положительные, сколько действительно положительные?

Практический пример 1: Спам-фильтр email

Имагинируем модель для детекции спама:

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

# Реальные метки (1 = спам, 0 = легитимное письмо)
y_true = [0, 0, 0, 1, 1, 1, 0, 1, 0, 0]

# Предсказания модели
y_pred = [0, 1, 0, 1, 1, 0, 0, 1, 1, 0]

precision = precision_score(y_true, y_pred)
print(f"Precision: {precision:.2f}")  # 0.67

# Распределение
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
print(f"TP={tp}, FP={fp}, FN={fn}, TN={tn}")
print(f"Расчёт: {tp} / ({tp} + {fp}) = {tp/(tp+fp):.2f}")

Интерпретация:

  • Модель предсказала 6 писем как спам (y_pred = 1)
  • Из этих 6: 4 действительно спам (TP), 2 — неправильно классифицированы (FP)
  • Precision = 4/6 = 0.67 = 67%

Практический смысл: если пользователь увидит в спам-папке 10 писем, в среднем 3-4 из них будут ошибками.

Практический пример 2: Диагностика болезни

Медицинская модель для определения рака (1 = рак, 0 = норма):

# 1000 пациентов
y_true = np.concatenate([np.zeros(950), np.ones(50)])  # 950 здоровых, 50 больных

# Модель предсказала 80 случаев рака
y_pred = np.concatenate([
    np.zeros(930),     # 930 здоровых верно
    np.ones(20),       # 20 ложноположительных (здоровые, но предсказаны как больные)
    np.ones(40),       # 40 больных верно предсказаны
    np.zeros(10),      # 10 больных пропущены
])

precision = precision_score(y_true, y_pred)
print(f"Precision: {precision:.2f}")  # 40 / (40 + 20) = 0.67

Критическая интерпретация:

  • Модель предсказала 60 пациентов как больных раком
  • Действительно больны 40 (TP), но 20 ошибок (FP)
  • Precision = 67%

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

Практический пример 3: Система рекомендаций товаров

Э-комерц-модель предсказывает покупку (1 = купит, 0 = не купит):

from sklearn.metrics import precision_score

# 10000 пользователей
y_true = np.random.binomial(1, 0.1, 10000)  # ~1000 покупок
y_pred = (np.random.random(10000) > 0.92).astype(int)  # модель выделяет ~800

precision = precision_score(y_true, y_pred)
print(f"Precision: {precision:.2f}")

# Если precision = 0.45
# То из 800 рекомендаций, конвертятся только 360
# Значит маркетинг потратит бюджет на 440 пользователей без результата

Когда Precision критична?

1. Высокая стоимость ложноположительных ошибок:

  • Спам-фильтры: блокировка легитимных писем → потеря коммуникации
  • Реклама: неправильные рекомендации → растрата бюджета
  • Кредитный скоринг: одобрение неблагонадёжного заёмщика → убыток

2. Редкие положительные примеры:

  • При дисбалансе классов (1% положительных) recall может быть обманчивым
  • Precision лучше показывает качество выявления в таких случаях

3. Когда запросы дорогие:

  • Если каждый запрос в производство, в больницу или клиенту дорогой
  • Нужно минимизировать false positives

Сравнение с Recall

recall = tp / (tp + fn)  # Какую долю позитивов мы выявили?
precision = tp / (tp + fp)  # Какова точность наших позитивных предсказаний?
  • Recall отвечает: "Кого мы поймали?"
  • Precision отвечает: "Кого мы неправильно обвинили?"

Практический совет

Я выбираю метрику исходя из бизнеса:

  • Спам-фильтр → Precision (потеря письма дороже)
  • Диагностика болезни → Recall (пропуск болезни дороже)
  • Balanced approach → F1 = 2 × (Precision × Recall) / (Precision + Recall)
Приведи пример использования метрики precision | PrepBro