Приведи пример использования метрики precision
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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)