Для чего нужны Precision и Recall отдельно, если есть F1-score, который их объединяет?

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

Ответ

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

  • Precision (Точность): TP / (TP + FP) — доля правильно предсказанных положительных объектов среди всех объектов, которые модель назвала положительными. Важен, когда цена ложного срабатывания (False Positive) высока. Например, в спам-фильтре: пометив легитимное письмо как спам (FP), вы можете потерять важное сообщение.
  • Recall (Полнота): TP / (TP + FN) — доля правильно найденных положительных объектов среди всех реально положительных объектов. Критичен, когда пропуск положительного объекта (False Negative) недопустим. Например, в диагностике тяжелого заболевания: пропустить болезнь (FN) гораздо опаснее, чем провести дополнительное обследование здорового пациента (FP).

F1-score — это гармоническое среднее Precision и Recall. Он полезен для сравнения моделей одним числом, но скрывает причинно-следственную связь. Модели с одинаковым F1 могут иметь совершенно разный баланс Precision/Recall, что делает их непригодными для разных бизнес-задач.

Пример на Python:

from sklearn.metrics import precision_score, recall_score, f1_score

y_true = [1, 1, 0, 1, 0, 0, 0]
y_pred = [1, 0, 1, 1, 0, 0, 0]  # Модель агрессивно ставит "1"

print(f'Precision: {precision_score(y_true, y_pred):.2f}') # 0.67 (2 из 3 предсказанных "1" верны)
print(f'Recall: {recall_score(y_true, y_pred):.2f}')    # 0.67 (нашла 2 из 3 реальных "1")
print(f'F1-score: {f1_score(y_true, y_pred):.2f}')      # 0.67

На практике выбор метрики (Precision, Recall или их комбинация) определяется стоимостью ошибок в конкретной задаче.