Ответ
F1-score — это моя основная метрика в задачах классификации с сильным дисбалансом классов, где одинаково важны и точность (Precision), и полнота (Recall). Я применяю её, когда и ложноположительные (False Positive), и ложноотрицательные (False Negative) ошибки имеют серьёзные последствия.
Типичные сценарии из моего опыта:
- Обнаружение мошенничества (Fraud Detection): Пропуск мошеннической операции (FN) ведёт к убыткам, а блокировка легальной операции (FP) — к недовольству клиентов. F1 балансирует эти риски.
- Медицинская диагностика редких заболеваний: Важно найти как можно больше больных (высокий Recall), но при этом минимизировать количество ложных диагнозов, ведущих к стрессу и ненужному лечению (высокий Precision).
- Сегментация объектов на изображениях (Semantic Segmentation): Для оценки качества предсказания пикселей определённого класса (например, опухоль) на фоне большого количества фоновых пикселей.
Пример оценки модели детектора аномалий:
from sklearn.metrics import f1_score, classification_report
# y_true — реальные метки (1 — аномалия, 0 — норма),
# y_pred — предсказания модели
# Класс '1' (аномалия) составляет всего 5% данных
print(classification_report(y_true, y_pred))
# precision recall f1-score support
# 0 0.99 0.99 0.99 9500
# 1 0.85 0.80 0.82 500
# accuracy 0.98 10000
# macro avg 0.92 0.89 0.91 10000
# weighted avg 0.98 0.98 0.98 10000
f1 = f1_score(y_true, y_pred, pos_label=1)
print(f"F1-score для класса 'аномалия': {f1:.3f}") # Критичная для бизнеса метрика
Я бы не использовал F1, если классы сбалансированы и можно смотреть на Accuracy, или если бизнес-требование явно фокусируется только на одной метрике (например, в спам-фильтре иногда допустимо жертвовать Recall ради максимального Precision).