F1-Score
F1-мера — это среднее гармоническое точности и полноты, поэтому она остаётся низкой, если хотя бы одна из них невысока. Формула, F-бета, макро- и микро-F1, применение в детекции.
F1-score — это единая метрика, объединяющая точность и полноту как их среднее гармоническое: F1 = 2 × точность × полнота / (точность + полнота). Значение находится в диапазоне от 0 до 1 и достигает 1 только тогда, когда у модели нет ни ложноположительных, ни ложноотрицательных результатов. Среднее гармоническое смещается к меньшему из своих значений, поэтому F1 остаётся низким, если точность или полнота низкая. Это делает F1 стандартной сводной метрикой для задач с несбалансированными классами, таких как обнаружение дефектов, выявление мошенничества и поиск по документам, где accuracy вводит в заблуждение. F1-score также называют сбалансированной F-мерой или F-мерой, а для двоичных пиксельных масок это та же величина, что и коэффициент Dice.
Как рассчитывается F1-score#
Если выразить метрику через количество элементов в матрице ошибок, получится F1 = 2TP / (2TP + FP + FN). Истинноотрицательные результаты в формулу не входят, поэтому F1 измеряет только то, насколько хорошо модель работает с положительным классом. Это подходит для задач, где положительные примеры редки, а отрицательные не так важны; если же истинноотрицательные результаты имеют значение, коэффициент корреляции Мэтьюса или сбалансированная точность учитывают все четыре ячейки. Именно среднее гармоническое отличает F1 от обычного среднего: у модели с точностью 1,0 и полнотой 0,1 арифметическое среднее равно 0,55, а F1 — 0,18.
F-бета и усреднение для нескольких классов#
В F1 точность и полнота имеют одинаковый вес. Общая F-бета-мера учитывает полноту в β раз сильнее, чем точность: F2 отдаёт предпочтение полноте, например при медицинском скрининге, где пропуск дорого обходится, а F0.5 — точности, например при фильтрации спама, где дорого обходится ложное срабатывание.
Если классов больше двух, F1 вычисляется для каждого класса, а затем усредняется:
- Макро-F1: невзвешенное среднее оценок по классам, при котором редкий класс имеет такой же вес, как и распространённый.
- Взвешенный F1: среднее оценок по классам, взвешенное по числу истинных примеров каждого класса.
- Микро-F1: единая оценка F1, рассчитанная по TP, FP и FN, объединённым для всех классов. В задачах многоклассовой классификации с одной меткой она равна accuracy.
from sklearn.metrics import f1_score
# Imbalanced inspection labels: 8 good parts, 2 defective parts
y_true = ["ok"] * 8 + ["defect"] * 2
y_pred = ["ok"] * 7 + ["defect"] + ["defect", "ok"]
# F1 for each class, then two ways to average them
per_class = f1_score(y_true, y_pred, labels=["ok", "defect"], average=None)
print(f"F1 ok: {per_class[0]:.3f}, F1 defect: {per_class[1]:.3f}")
print(f"Macro F1: {f1_score(y_true, y_pred, average='macro'):.3f}")
print(f"Micro F1: {f1_score(y_true, y_pred, average='micro'):.3f}")Скрипт выводит F1, равный 0,875 для годных деталей и 0,500 для дефектов, макро-F1 0,688 и микро-F1 0,800. Модель правильно классифицирует 8 из 10 деталей, поэтому микро-F1 равен её accuracy 0,80, а макро-F1 ниже, поскольку слабый класс дефектов имеет такой же вес, как и преобладающий класс.
F1 в обнаружении объектов#
Детектор имеет показатели точности и полноты для каждого порога уверенности, поэтому для зависимости F1 от уверенности можно построить кривую F1. Пик кривой показывает порог уверенности, при котором лучше всего сбалансированы ложные детекции и пропущенные объекты. Именно в этой рабочей точке запускают развёрнутую модель. F1 дополняет среднюю точность по классам (mAP), которая позволяет ранжировать модели с учётом всех порогов. При валидации YOLO26 сохраняет эту кривую в BoxF1_curve.png и выводит точность, полноту и F1 для каждого класса при уровне уверенности, на котором достигается максимум среднего F1.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validation sweeps confidence thresholds and saves BoxF1_curve.png
metrics = model.val(data="coco8.yaml")
# Precision, recall, and F1 at the confidence where mean F1 peaks
print(f"Precision: {metrics.box.mp:.3f}")
print(f"Recall: {metrics.box.mr:.3f}")
print(f"Mean F1: {metrics.box.f1.mean():.3f}")Средний F1 — это среднее значение F1 по классам, поэтому он может немного отличаться от среднего гармонического средней точности и средней полноты, приведённых выше.










