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

bookMétriques

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

Exactitude

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

exactitude=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{exactitude} = \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, l'exactitude présente des inconvénients. Par exemple, imaginez que vous essayez de prédire si un patient est atteint d'une maladie rare. Le jeu de données contient 99,9 % de patients sains et seulement 0,1 % de patients malades. Dans ce cas, prédire systématiquement que le patient est sain donnerait une exactitude de 0,999 – alors qu'un tel modèle est totalement inutile.

Les jeux de données de ce type sont appelés déséquilibrés, et dans ces situations, l'exactitude équilibrée constitue 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 en fait la moyenne. Cette méthode accorde la même importance à chaque classe, quel que soit le déséquilibre du jeu 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 positives (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 efficacement en évidence le problème. Ainsi, ce problème est pris en compte.

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à que la précision et le rappel interviennent.

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 positives correctes 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}}}

En utilisant la métrique de précision, il est possible 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 faible précision indique que ces erreurs surviennent fréquemment.

Rappel

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

rappel=preˊcision=TPTP+FN\text{rappel} = \text{précision} = \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 faible rappel 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 très faible.

Cela montre qu'il est facile de construire un modèle avec une précision parfaite ou un rappel parfait, mais qu'il est beaucoup plus difficile d'en concevoir un performant sur les deux aspects. C'est pourquoi il est important de prendre en compte 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 fois la précision et le rappel en une seule métrique. Il n'est élevé que si la précision et le rappel sont tous deux relativement élevés, ce qui en fait une mesure utile lorsque l'équilibre entre les deux types d'erreurs est nécessaire.

Le choix de la bonne métrique 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 idée générale 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 est équilibré entre les erreurs de type 1 et de type 2.

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 des 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))
copy
Note
Note

Support désigne le nombre réel d'occurrences de chaque classe dans l'ensemble de test. Macro avg calcule la moyenne de chaque métrique (précision, rappel, F1) sur 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 sur 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, fournissant un score unique qui reflète les deux ?

Select the correct answer

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

Awesome!

Completion rate improved to 4.17

bookMétriques

Glissez pour afficher le menu

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

Exactitude

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

exactitude=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{exactitude} = \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, l'exactitude présente des inconvénients. Par exemple, imaginez que vous essayez de prédire si un patient est atteint d'une maladie rare. Le jeu de données contient 99,9 % de patients sains et seulement 0,1 % de patients malades. Dans ce cas, prédire systématiquement que le patient est sain donnerait une exactitude de 0,999 – alors qu'un tel modèle est totalement inutile.

Les jeux de données de ce type sont appelés déséquilibrés, et dans ces situations, l'exactitude équilibrée constitue 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 en fait la moyenne. Cette méthode accorde la même importance à chaque classe, quel que soit le déséquilibre du jeu 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 positives (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 efficacement en évidence le problème. Ainsi, ce problème est pris en compte.

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à que la précision et le rappel interviennent.

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 positives correctes 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}}}

En utilisant la métrique de précision, il est possible 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 faible précision indique que ces erreurs surviennent fréquemment.

Rappel

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

rappel=preˊcision=TPTP+FN\text{rappel} = \text{précision} = \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 faible rappel 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 très faible.

Cela montre qu'il est facile de construire un modèle avec une précision parfaite ou un rappel parfait, mais qu'il est beaucoup plus difficile d'en concevoir un performant sur les deux aspects. C'est pourquoi il est important de prendre en compte 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 fois la précision et le rappel en une seule métrique. Il n'est élevé que si la précision et le rappel sont tous deux relativement élevés, ce qui en fait une mesure utile lorsque l'équilibre entre les deux types d'erreurs est nécessaire.

Le choix de la bonne métrique 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 idée générale 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 est équilibré entre les erreurs de type 1 et de type 2.

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 des 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))
copy
Note
Note

Support désigne le nombre réel d'occurrences de chaque classe dans l'ensemble de test. Macro avg calcule la moyenne de chaque métrique (précision, rappel, F1) sur 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 sur 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, fournissant un score unique qui reflète les deux ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 2
some-alt