F1-Score
Le score F1 est la moyenne harmonique de la précision et du rappel ; il reste donc faible tant que les deux ne sont pas élevés. Formule, F-bêta, F1 macro et micro, et usages en détection.
Le score F1 est une métrique unique qui combine la précision et le rappel sous forme de moyenne harmonique : F1 = 2 × précision × rappel / (précision + rappel). Il varie de 0 à 1 et atteint 1 uniquement si le modèle ne produit ni faux positifs ni faux négatifs. Une moyenne harmonique est tirée vers la plus petite de ses valeurs d’entrée : le score F1 reste donc faible dès que la précision ou le rappel est faible. C’est pourquoi il sert généralement de mesure récapitulative pour les problèmes déséquilibrés, comme la détection de défauts, le filtrage des fraudes et la recherche de documents, où l’exactitude est trompeuse. Le score F1 est aussi appelé score F équilibré ou mesure F et, sur des masques binaires de pixels, correspond au coefficient de Dice.
Calcul du score F1#
À partir des valeurs de la matrice de confusion, F1 = 2TP / (2TP + FP + FN). Les vrais négatifs n’apparaissent jamais dans la formule : le score F1 mesure donc uniquement la capacité du modèle à traiter la classe positive. Cela convient aux tâches où les positifs sont rares et les négatifs peu importants. Lorsque les vrais négatifs comptent, le coefficient de corrélation de Matthews ou l’exactitude équilibrée prend en compte les quatre cases. C’est la moyenne harmonique qui distingue F1 d’une simple moyenne : un modèle dont la précision est de 1,0 et le rappel de 0,1 obtient une moyenne arithmétique de 0,55 et un score F1 de 0,18.
F-bêta et moyennes multiclasse#
F1 accorde le même poids à la précision et au rappel. Le score F-bêta général considère le rappel comme β fois plus important que la précision. F2 privilégie donc le rappel, comme dans le dépistage médical, où une omission coûte cher, tandis que F0.5 privilégie la précision, comme dans le filtrage du spam, où une fausse alerte coûte cher.
Avec plus de deux classes, le score F1 est calculé pour chaque classe, puis moyenné :
- F1 macro : moyenne non pondérée des scores par classe ; une classe rare compte donc autant qu’une classe fréquente.
- F1 pondéré : moyenne des scores par classe, pondérée selon le nombre d’exemples réels de chaque classe.
- F1 micro : score F1 unique calculé à partir des TP, FP et FN cumulés sur toutes les classes. Pour les tâches multiclasse à étiquette unique, il est égal à l’exactitude.
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}")Le script affiche un score F1 de 0,875 pour les pièces conformes et de 0,500 pour les défauts, un F1 macro de 0,688 et un F1 micro de 0,800. Le modèle classe correctement 8 pièces sur 10 ; le F1 micro est donc égal à son exactitude de 0,80, tandis que le F1 macro est plus faible, car la classe minoritaire des défauts compte autant que la classe majoritaire.
F1 en détection d’objets#
Un détecteur a une précision et un rappel pour chaque seuil de confiance ; il possède donc aussi une courbe F1 en fonction de la confiance. Le sommet de cette courbe indique le seuil de confiance qui équilibre le mieux les détections erronées et les objets manqués : c’est le point de fonctionnement unique utilisé par un modèle déployé. F1 complète la précision moyenne (mAP), qui intègre tous les seuils pour classer les modèles. La validation de YOLO26 enregistre cette courbe sous BoxF1_curve.png et indique la précision, le rappel et le score F1 par classe au seuil de confiance où le F1 moyen atteint son maximum.
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}")Le F1 moyen est la moyenne des scores F1 par classe ; il peut donc différer légèrement de la moyenne harmonique de la précision moyenne et du rappel moyen indiqués au-dessus.










