Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Métriques | Comparaison des Modèles
Classification avec Python

Métriques

Glissez pour afficher le menu

Jusqu'à présent, nous avons utilisé l'exactitude comme principale métrique pour évaluer la performance du modèle. Cependant, l'exactitude présente certaines limites. Examinons maintenant ses inconvénients et introduisons plusieurs métriques supplémentaires – basées sur TP, TN, FP et FN – qui permettent de répondre à ces problématiques.

Matrice de confusion

Exactitude

L'exactitude représente la proportion de prédictions correctes :

accuracy=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{accuracy} = \frac{\text{correct}}{\text{correct} + \text{incorrect}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Cependant, la précision présente des inconvénients. Par exemple, imaginez que vous essayez de prédire si un patient souffre d'une maladie rare. L'ensemble de données contient 99,9 % de patients sains et seulement 0,1 % de patients atteints de la maladie. Dans ce cas, prédire systématiquement que le patient est sain donnerait une précision de 0,999 – alors qu'un tel modèle est totalement inutile.

De tels ensembles de données sont appelés déséquilibrés, et dans ces situations, la précision équilibrée est une métrique plus appropriée.

Précision équilibrée

La précision équilibrée calcule séparément la proportion de prédictions positives correctes et la proportion de prédictions négatives correctes, puis les moyenne. Cette approche accorde la même importance à chaque classe, quel que soit le déséquilibre de l'ensemble de données.

balanced_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} – nombre total d'instances positives (classe 1) ;
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} – nombre total d'instances négatives (classe 0).

Dans l'exemple de la maladie rare, la précision équilibrée d'un modèle qui prédit toujours « sain » serait de 0,5 – ce qui met en évidence le problème. Ainsi, ce problème est résolu.

Cependant, la précision équilibrée ne distingue toujours pas les erreurs de type 1 et de type 2 – tout comme la précision classique. C'est là qu'interviennent la précision et le rappel.

Précision

La métrique de précision indique combien des valeurs que le modèle a prédites comme positives étaient réellement positives. Il s'agit de la proportion de prédictions vraies positives parmi toutes les prédictions positives faites par le modèle :

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

L'utilisation de la métrique de précision permet de comprendre à quelle fréquence une erreur de type 1 se produit. Une précision élevée signifie que les erreurs de type 1 sont rares, tandis qu'une précision faible indique que ces erreurs sont fréquentes.

Rappel

La métrique de rappel montre la proportion de cas réellement positifs que le modèle a correctement prédits :

recall=TPTP+FN\text{recall} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

La métrique de rappel permet de comprendre à quelle fréquence une erreur de type 2 se produit. Un rappel élevé signifie que les erreurs de type 2 sont rares, tandis qu'un rappel faible indique qu'elles surviennent fréquemment.

Cependant, la précision et le rappel présentent toutes deux des limites. Par exemple, un modèle qui prédit uniquement la classe positive (1) obtiendra un rappel parfait, mais sa précision sera faible. À l'inverse, un modèle qui prédit correctement une seule instance positive et classe tout le reste comme négatif aura une précision parfaite, mais un rappel catastrophique.

Cela montre qu'il est facile de construire un modèle avec une précision parfaite ou un rappel parfait, mais beaucoup plus difficile d'en obtenir un performant sur les deux aspects. C'est pourquoi il est important de considérer les deux métriques – et heureusement, il existe une métrique qui les combine.

Score F1

Le score F1 est la moyenne harmonique de la précision et du rappel. La moyenne harmonique est préférée à la moyenne arithmétique car elle pénalise les situations où l'une des valeurs (précision ou rappel) est faible, ce qui en fait une mesure plus équilibrée des performances d'un modèle.

F1=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

Le score F1 combine la précision et le rappel en une seule métrique. Il ne sera élevé que si la précision et le rappel sont toutes deux relativement élevés, ce qui en fait une mesure utile lorsque l'on souhaite équilibrer les deux types d'erreurs.

Le choix de la métrique appropriée dépend de la tâche spécifique. L'exactitude (ou l'exactitude équilibrée pour les ensembles de données déséquilibrés) est intuitive et fournit une vue d'ensemble des performances globales du modèle. Si une analyse plus détaillée des types d'erreurs commises par le modèle est nécessaire, la précision permet d'identifier les erreurs de type 1, tandis que le rappel met en évidence les erreurs de type 2. Le score F1 indique dans quelle mesure le modèle équilibre les erreurs de type 1 et de type 2.

Résumé des métriques
Note
Approfondir

Une autre métrique couramment utilisée est ROC/AUC, que vous pouvez découvrir dans cet article.

Métriques en Python

Scikit-learn propose des implémentations pour toutes ces métriques dans le module sklearn.metrics :

from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score

accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

Si vous souhaitez obtenir les métriques telles que la précision, le rappel et le F1-score en une seule fois, sklearn propose la fonction classification_report() :

12345678910111213
import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
Note
Remarque

Support désigne le nombre d'occurrences réelles de chaque classe dans l'ensemble de test. Macro avg calcule la moyenne de chaque métrique (précision, rappel, F1) pour toutes les classes de manière égale, sans tenir compte du déséquilibre des classes. Weighted avg effectue également la moyenne des métriques pour toutes les classes, mais accorde plus de poids aux classes ayant plus d'instances (en fonction de leur support).

question mark

Quelle métrique d'évaluation offre un équilibre entre la précision et le rappel, en fournissant un score unique qui reflète les deux ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 2

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 5. Chapitre 2
some-alt