F1-Score
Điểm F1 là trung bình điều hòa của precision và recall, do đó chỉ đạt mức cao khi cả hai đều cao. Công thức, F-beta, F1 macro so với micro và cách dùng trong phát hiện.
Điểm F1 là một metric duy nhất kết hợp precision và recall bằng trung bình điều hòa: F1 = 2 × precision × recall / (precision + recall). Điểm số nằm trong khoảng từ 0 đến 1 và chỉ đạt 1 khi model không có false positive lẫn false negative. Trung bình điều hòa bị kéo về phía giá trị nhỏ hơn trong các đầu vào, vì vậy F1 luôn thấp khi precision hoặc recall thấp. Do đó, F1 thường được dùng làm chỉ số tổng hợp cho các bài toán mất cân bằng như phát hiện lỗi, sàng lọc gian lận và truy xuất tài liệu, trong đó accuracy dễ gây hiểu lầm. Điểm F1 còn được gọi là F-score cân bằng hoặc F-measure; trên mask pixel nhị phân, điểm này tương đương hệ số Dice.
Cách tính điểm F1#
Viết theo số lượng trong ma trận nhầm lẫn, F1 = 2TP / (2TP + FP + FN). True negative không xuất hiện trong công thức, vì vậy F1 chỉ đo khả năng xử lý lớp dương của model. Điều này phù hợp với các tác vụ trong đó mẫu dương hiếm và mẫu âm ít được quan tâm; khi true negative quan trọng, hệ số tương quan Matthews hoặc accuracy cân bằng sẽ tính đến cả bốn ô. Trung bình điều hòa là điểm khiến F1 khác với trung bình thông thường: model có precision 1.0 và recall 0.1 sẽ có trung bình số học là 0.55 nhưng F1 là 0.18.
F-Beta và cách lấy trung bình đa lớp#
F1 đặt trọng số ngang nhau cho precision và recall. Điểm F-beta tổng quát coi recall quan trọng gấp β lần precision, vì vậy F2 ưu tiên recall, như trong sàng lọc y tế, nơi việc bỏ sót gây hậu quả nghiêm trọng; còn F0.5 ưu tiên precision, như trong lọc thư rác, nơi cảnh báo nhầm gây tốn kém.
Khi có hơn hai lớp, F1 được tính cho từng lớp rồi lấy trung bình:
- Macro F1: trung bình không trọng số của điểm số từng lớp, vì vậy lớp hiếm có trọng số ngang với lớp phổ biến.
- Weighted F1: trung bình điểm số từng lớp, có trọng số theo số lượng mẫu thực tế của mỗi lớp.
- Micro F1: một điểm F1 duy nhất tính từ TP, FP và FN được gộp trên tất cả các lớp. Trong các tác vụ đa lớp, đơn nhãn, điểm này bằng 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}")Script in ra F1 là 0.875 cho sản phẩm tốt và 0.500 cho sản phẩm lỗi, macro F1 là 0.688 và micro F1 là 0.800. Model phân loại đúng 8 trong 10 sản phẩm, nên micro F1 bằng accuracy 0.80; macro F1 thấp hơn vì lớp lỗi yếu có trọng số ngang với lớp chiếm đa số.
F1 trong phát hiện vật thể#
Một detector có precision và recall tại mọi ngưỡng confidence, vì vậy detector cũng có một đường cong F1 theo confidence. Đỉnh của đường cong F1 này đánh dấu ngưỡng confidence cân bằng tốt nhất giữa phát hiện nhầm và bỏ sót đối tượng; ngưỡng confidence này cũng là điểm vận hành duy nhất được một model đã triển khai sử dụng. F1 bổ sung cho độ chính xác trung bình (mAP); mAP tổng hợp kết quả qua mọi ngưỡng để xếp hạng các model. Với YOLO26, quá trình validation lưu đường cong này dưới tên BoxF1_curve.png và báo cáo precision, recall cùng F1 theo từng lớp tại ngưỡng confidence mà F1 trung bình đạt đỉnh.
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}")Mean F1 lấy trung bình các giá trị F1 theo từng lớp, vì vậy có thể hơi khác trung bình điều hòa của mean precision và mean recall được in ngay phía trên.










