Polydesk-logotype
Polydesk.ai — Header

F1-Score

Le F1-Score est une métrique de classification qui combine la précision et le rappel en une seule valeur via leur moyenne harmonique, offrant un équilibre entre les deux, surtout utile quand les classes sont déséquilibrées.

L’accuracy est la métrique la plus intuitive, mais elle est trompeuse dès que les classes sont déséquilibrées. Un classificateur de spam qui marque tout comme « non-spam » atteint 98 % d’accuracy si seulement 2 % des emails sont du spam, tout en étant complètement inutile. Le F1-Score résout ce problème en exigeant que le modèle soit à la fois précis (les positifs prédits sont vrais) et exhaustif (les vrais positifs sont trouvés). Si l’un des deux flanche, le F1 chute.

Fiche rapide : F1-Score
Nom complet
F1-Score (ou F-mesure, F1-mesure)
Type
Métrique d’évaluation pour la classification
Formule
F1 = 2 · (Précision · Rappel) / (Précision + Rappel)
Plage
0 à 1. Plus haut = meilleur.
Cas d’usage
Classes déséquilibrées, détection de fraude, diagnostic médical, NER, recherche d’information
Frameworks
sklearn.metrics.f1_score(), torchmetrics.F1Score()
Verdict
Métrique de choix pour les classes déséquilibrées. Préférez-la à l’accuracy quand les faux positifs ET les faux négatifs comptent.

Prérequis : la matrice de confusion

Le F1-Score repose sur quatre éléments issus de la matrice de confusion d’un classificateur binaire :

Prédit Positif Prédit Négatif
Réel Positif Vrai Positif (TP) Faux Négatif (FN)
Réel Négatif Faux Positif (FP) Vrai Négatif (TN)

Vrai Positif (TP) : le modèle prédit « positif » et c’est correct. Le spam est correctement détecté.

Faux Positif (FP) : le modèle prédit « positif » mais c’est faux. Un email légitime est marqué comme spam (fausse alarme).

Faux Négatif (FN) : le modèle prédit « négatif » mais c’est faux. Un spam passe à travers le filtre (détection manquée).

Vrai Négatif (TN) : le modèle prédit « négatif » et c’est correct. Un email légitime est correctement laissé passer.

La formule du F1-Score

Le F1-Score est la moyenne harmonique de la précision et du rappel :

Précision = TP / (TP + FP)    # parmi les prédictions positives, combien sont correctes ?
Rappel    = TP / (TP + FN)    # parmi les vrais positifs, combien sont trouvés ?

F1 = 2 · (Précision · Rappel) / (Précision + Rappel)

# Formule équivalente directement depuis la matrice de confusion :
F1 = 2·TP / (2·TP + FP + FN)

Pourquoi la moyenne harmonique ?

La moyenne arithmétique traiterait également une précision de 1.0 et un rappel de 0.0 (moyenne = 0.5), ce qui masquerait le fait que le modèle ne détecte aucun positif. La moyenne harmonique est beaucoup plus sévère : si l’un des deux termes est faible, le F1 chute drastiquement.

# Précision = 1.0, Rappel = 0.0
Moyenne arithmétique = (1.0 + 0.0) / 2 = 0.50  ← trompeusement "correct"
Moyenne harmonique   = 2·(1.0·0.0)/(1.0+0.0) = 0.00  ← reflète la réalité

# Précision = 0.9, Rappel = 0.1
Moyenne arithmétique = 0.50  ← semble acceptable
Moyenne harmonique   = 0.18  ← reflète le déséquilibre

Le F1 n’est élevé que si la précision ET le rappel sont élevés. C’est exactement le comportement souhaité.

Exemple concret : détection de fraude

# Dataset : 10 000 transactions, dont 100 fraudes (1 %)

# Modèle A : ne prédit aucune fraude
TP=0, FP=0, FN=100, TN=9900
Accuracy = 99.0 %   ← impressionnant mais inutile
Précision = 0/0 (indéfini)
Rappel = 0/100 = 0 %
F1 = 0 %             ← reflète l'inutilité du modèle

# Modèle B : détecte 80 fraudes, mais avec 50 fausses alarmes
TP=80, FP=50, FN=20, TN=9850
Accuracy = 99.3 %
Précision = 80/130 = 61.5 %
Rappel = 80/100 = 80 %
F1 = 2·(0.615·0.80)/(0.615+0.80) = 69.6 %

# Modèle C : détecte 95 fraudes, avec 200 fausses alarmes
TP=95, FP=200, FN=5, TN=9700
Accuracy = 97.9 %
Précision = 95/295 = 32.2 %
Rappel = 95/100 = 95 %
F1 = 2·(0.322·0.95)/(0.322+0.95) = 48.1 %

L’accuracy ne distingue pas ces modèles (tous autour de 97-99 %). Le F1-Score révèle que le modèle B offre le meilleur équilibre entre détecter les fraudes et éviter les fausses alarmes.

Le F-beta Score : pondérer précision vs rappel

Le F1 donne un poids égal à la précision et au rappel. Mais dans beaucoup de cas, l’un est plus important que l’autre. Le Fβ-Score généralise le F1 :

Fβ = (1 + β²) · (Précision · Rappel) / (β² · Précision + Rappel)

β = 1 (F1) : poids égal à la précision et au rappel. Choix par défaut.

β = 2 (F2) : le rappel compte 4 fois plus que la précision. Utile en diagnostic médical (manquer une maladie est pire qu’une fausse alerte).

β = 0.5 (F0.5) : la précision compte 4 fois plus que le rappel. Utile en filtrage de spam (une fausse alerte dans la boîte de réception est plus gênante qu’un spam qui passe).

F1-Score pour la classification multi-classe

Pour les problèmes à plus de 2 classes, on calcule le F1 par classe, puis on les agrège. Trois méthodes :

Méthode Principe Quand l’utiliser
Macro F1 Moyenne des F1 de chaque classe (poids égal par classe) Toutes les classes sont aussi importantes (même les rares)
Micro F1 F1 calculé sur les TP/FP/FN globaux (= accuracy si single-label) Les classes fréquentes comptent plus
Weighted F1 Moyenne pondérée par le nombre d’exemples par classe Compromis entre macro et micro
Macro F1 pour les classes déséquilibrées Si vous avez une classe rare mais importante (fraude, maladie rare), utilisez le macro F1. Il donne autant de poids à la classe rare qu’à la classe majoritaire. Le micro F1 serait dominé par la classe fréquente. Le weighted F1 est un bon compromis pour les rapports généraux.

Implémentation en Python

from sklearn.metrics import f1_score, classification_report

y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0]

# F1 binaire
f1 = f1_score(y_true, y_pred)
print(f"F1 : {f1:.4f}")   # 0.8000

# F1 multi-classe
y_true_mc = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
y_pred_mc = [0, 2, 1, 0, 1, 2, 0, 1, 1, 0]

print(f"Macro F1    : {f1_score(y_true_mc, y_pred_mc, average='macro'):.4f}")
print(f"Micro F1    : {f1_score(y_true_mc, y_pred_mc, average='micro'):.4f}")
print(f"Weighted F1 : {f1_score(y_true_mc, y_pred_mc, average='weighted'):.4f}")

# Rapport complet
print(classification_report(y_true_mc, y_pred_mc, target_names=['Classe 0', 'Classe 1', 'Classe 2']))

F1-Score vs Accuracy : quand utiliser quoi

Situation Métrique recommandée Pourquoi
Classes équilibrées Accuracy Accuracy est fiable et interprétable quand les classes ont des tailles similaires
Classes déséquilibrées F1-Score (macro) L’accuracy est trompeuse ; le F1 exige performance sur les deux classes
FP coûteux (ex: filtrage spam) F0.5 ou Précision Prioriser l’absence de fausses alarmes
FN coûteux (ex: diagnostic médical) F2 ou Rappel Prioriser la détection de tous les cas positifs
Ranking / recherche Precision@K, MAP L’ordre des résultats compte plus que le score global

Cas d’usage du F1-Score

NLP et NER (Named Entity Recognition) : le F1-Score est la métrique standard pour évaluer les systèmes de reconnaissance d’entités nommées. On calcule le F1 par type d’entité (personne, lieu, organisation) puis le macro F1.

Détection de fraude et d’anomalies : les datasets sont extrêmement déséquilibrés (< 1 % de fraudes). Le F1 (ou F2 si le coût des faux négatifs est élevé) est indispensable.

Diagnostic médical : classer des patients comme malades ou sains. Le F2-Score est souvent préféré car manquer un diagnostic (FN) est plus grave qu’une fausse alerte (FP).

Classification de texte : analyse de sentiment, détection de spam, catégorisation d’articles. Le weighted F1 est courant pour les problèmes multi-classe.

Détection d’objets : en vision par ordinateur, la métrique mAP (mean Average Precision) est plus courante, mais le F1 est utilisé à un seuil de confiance fixe pour des évaluations rapides.

Limites du F1-Score

Ignore les vrais négatifs (TN). Le F1 ne prend en compte que TP, FP et FN. Les vrais négatifs ne contribuent pas au score. Pour des tâches où les TN sont importants (par exemple, vérifier qu’un système ne produit pas de fausses alertes sur les exemples négatifs), l’accuracy ou le MCC (Matthews Correlation Coefficient) sont plus appropriés.

Sensible au seuil de classification. Le F1 dépend du seuil choisi pour transformer les probabilités en prédictions binaires. Changer le seuil modifie le F1. Pour une évaluation indépendante du seuil, utilisez l’AUC-PR (Area Under the Precision-Recall Curve).

Pas naturellement défini pour le multi-label. Le choix entre macro, micro et weighted F1 influence fortement l’interprétation. Il faut toujours préciser la méthode d’agrégation utilisée.

Peut être indéfini (0/0). Si le modèle ne prédit aucun positif (TP = 0, FP = 0), la précision est indéfinie. Par convention, on met le F1 à 0 dans ce cas, ce qui peut créer des artefacts dans le macro F1.

Bonnes pratiques

1. Rapportez le F1 avec la précision et le rappel. Le F1 seul masque l’équilibre entre les deux. Un F1 de 0.60 peut venir de P=0.90/R=0.45 (très précis mais rate beaucoup) ou P=0.50/R=0.75 (détecte bien mais avec beaucoup de fausses alarmes). Le diagnostic est différent.

2. Choisissez le bon β. F1 par défaut, F2 si les faux négatifs sont coûteux, F0.5 si les faux positifs sont coûteux.

3. Précisez la méthode d’agrégation multi-classe. Rapportez toujours si c’est macro, micro ou weighted. Le macro F1 est préférable pour les classes déséquilibrées.

4. Utilisez classification_report de sklearn. Il donne en un seul appel la précision, le rappel, le F1 et le support (nombre d’exemples) par classe, plus les agrégats.

5. Considérez l’AUC-PR pour une vue complète. L’AUC-PR (aire sous la courbe précision-rappel) évalue la performance sur tous les seuils possibles, pas seulement un seul. C’est plus robuste que le F1 à un seuil fixe.


Questions fréquentes sur le F1-Score

Quelle est la différence entre F1-Score et accuracy ?

L’accuracy mesure le pourcentage total de prédictions correctes (TP + TN sur le total). Le F1-Score ne considère que les prédictions liées à la classe positive (TP, FP, FN), ignorant les vrais négatifs. Sur un dataset déséquilibré (99 % négatifs, 1 % positifs), l’accuracy peut être de 99 % même si le modèle ne détecte aucun positif. Le F1 serait de 0 % dans ce cas, révélant l’inutilité du modèle. Utilisez l’accuracy quand les classes sont équilibrées, le F1 quand elles ne le sont pas.

Un F1-Score de 0.80, c’est bon ?

Cela dépend de la tâche et du domaine. En NER (reconnaissance d’entités nommées), un F1 de 0.80 est correct mais pas état de l’art (les meilleurs systèmes atteignent 0.90+). En détection de fraude, un F1 de 0.80 peut être excellent vu la difficulté du problème. Comparez toujours à une baseline pertinente et aux résultats publiés sur le même benchmark. Un F1 de 0.80 avec précision=0.95 et rappel=0.70 est très différent d’un F1 de 0.80 avec précision=0.70 et rappel=0.95.

Pourquoi utiliser la moyenne harmonique et pas la moyenne arithmétique ?

La moyenne harmonique pénalise fortement les valeurs extrêmes. Si la précision est 1.0 et le rappel est 0.01, la moyenne arithmétique donnerait 0.505 (trompeur), tandis que la moyenne harmonique donne 0.02 (reflète la réalité). En classification, un modèle qui excelle sur une métrique mais échoue sur l’autre est problématique. La moyenne harmonique force le F1 à rester bas si l’un des deux composants est faible, ce qui correspond à notre intuition de ce qu’est un « bon » classificateur.

Quelle est la différence entre macro F1, micro F1 et weighted F1 ?

Le macro F1 calcule le F1 par classe puis fait la moyenne (chaque classe pèse autant, quelle que soit sa taille). Le micro F1 agrège les TP/FP/FN globaux puis calcule le F1 (les classes fréquentes dominent). Le weighted F1 pondère le F1 de chaque classe par son nombre d’exemples. Pour les classes déséquilibrées avec des classes rares importantes, utilisez le macro F1. Pour un score global représentatif, utilisez le weighted F1.

Le F1-Score est-il utilisé comme loss function pour entraîner les modèles ?

Rarement directement, car le F1 n’est pas différentiable (il repose sur des comptages binaires TP/FP/FN). On entraîne avec la cross-entropy (qui est différentiable) et on évalue avec le F1. Des approximations différentiables du F1 existent (soft-F1, differentiable F1), mais la cross-entropy reste la loss function standard. Le seuil de classification est ensuite ajusté pour maximiser le F1 sur le jeu de validation.

Polydesk.ai — Footer