Comment interpréter le rapport de classification dans sklearn (avec exemple)



Lorsque nous utilisons des modèles de classification dans l’apprentissage automatique, nous utilisons trois métriques courantes pour évaluer la qualité du modèle :

1. Précision : Pourcentage de prédictions positives correctes par rapport au total des prédictions positives.

2. Rappel : Pourcentage de prédictions positives correctes par rapport au total des positifs réels.

3. F1 Score : Une moyenne harmonique pondérée de précision et de rappel. Plus le modèle est proche de 1, meilleur est le modèle.

  • Score F1 : 2* (Précision * Rappel) / (Précision + Rappel)

En utilisant ces trois mesures, nous pouvons comprendre dans quelle mesure un modèle de classification donné est capable de prédire les résultats pour certaines variables de réponse .

Heureusement, lors de l’ajustement d’un modèle de classification en Python, nous pouvons utiliser la fonction classification_report() de la bibliothèque sklearn pour générer ces trois métriques.

L’exemple suivant montre comment utiliser cette fonction dans la pratique.

Exemple : Comment utiliser le rapport de classification dans sklearn

Pour cet exemple, nous adapterons un modèle de régression logistique qui utilise des points et des aides pour prédire si 1 000 joueurs de basket-ball universitaires différents seront recrutés ou non dans la NBA.

Tout d’abord, nous allons importer les packages nécessaires pour effectuer une régression logistique en Python :

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

Ensuite, nous allons créer le bloc de données contenant les informations sur 1 000 joueurs de basket-ball :

#make this example reproducible
np.random.seed(1)

#create DataFrame
df = pd.DataFrame({'points': np.random.randint(30, size=1000),
                   'assists': np.random.randint(12, size=1000),
                   'drafted': np.random.randint(2, size=1000)})

#view DataFrame
df.head()

	points	assists	drafted
0	5	1	1
1	11	8	0
2	12	4	1
3	8	7	0
4	9	0	0

Remarque : Une valeur de 0 indique qu’un joueur n’a pas été repêché tandis qu’une valeur de 1 indique qu’un joueur a été repêché.

Ensuite, nous diviserons nos données en un ensemble d’entraînement et un ensemble de tests et ajusterons le modèle de régression logistique :

#define the predictor variables and the response variable
X = df[['points', 'assists']]
y = df['drafted']

#split the dataset into training (70%) and testing (30%) sets
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)  

#instantiate the model
logistic_regression = LogisticRegression()

#fit the model using the training data
logistic_regression.fit(X_train,y_train)

#use model to make predictions on test data
y_pred = logistic_regression.predict(X_test)

Enfin, nous utiliserons la fonction classification_report() pour imprimer les métriques de classification de notre modèle :

#print classification report for model
print(classification_report(y_test, y_pred))

              precision    recall  f1-score   support

           0       0.51      0.58      0.54       160
           1       0.43      0.36      0.40       140

    accuracy                           0.48       300
   macro avg       0.47      0.47      0.47       300
weighted avg       0.47      0.48      0.47       300

Voici comment interpréter le résultat :

Précision : sur tous les joueurs dont le modèle prévoyait qu’ils seraient repêchés, seuls 43 % l’ont effectivement été.

Rappel : parmi tous les joueurs réellement repêchés, le modèle n’a prédit correctement ce résultat que pour 36 % d’entre eux.

Score F1 : Cette valeur est calculée comme suit :

  • Score F1 : 2* (Précision * Rappel) / (Précision + Rappel)
  • Score F1 : 2 * (.43 * .36) / (.43 + .36)
  • Note F1 : 0,40 .

Puisque cette valeur n’est pas très proche de 1, cela nous indique que le modèle prédit mal si les joueurs seront repêchés ou non.

Support : Ces valeurs nous indiquent simplement combien de joueurs appartenaient à chaque classe dans l’ensemble de données de test. Nous pouvons voir que parmi les joueurs de l’ensemble de données de test, 160 n’ont pas été repêchés et 140 l’ont été.

Remarque : Vous pouvez trouver la documentation complète de la fonction classification_report() ici .

Ressources additionnelles

Les didacticiels suivants fournissent des informations supplémentaires sur l’utilisation des modèles de classification en Python :

Comment effectuer une régression logistique en Python
Comment créer une matrice de confusion en Python
Comment calculer la précision équilibrée en Python

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *