Précision et rappel
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 22 sur 58.
Deux questions évaluent les réponses d’un test à la grippe. Parmi ses alertes à la grippe, combien étaient correctes ? Parmi les cas réels de grippe, combien en a-t-il détectés ?
La précision répond à la première question : 42 alarmes sur 45. Le rappel répond à la seconde : 42 cas sur 47.
from sklearn.metrics import precision_score, recall_score
print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}"):.3f affiche toujours 3 décimales, donc 0.9 afficherait 0.900. Cela affiche :
0.933
0.894Choisis en fonction de l’erreur la plus coûteuse. Un cas de grippe non détecté se propage, donc ce test a besoin d’un rappel élevé. Un filtre anti-spam qui classe les vrais courriels comme indésirables a besoin de précision.
Défi
MoyenLe filtre d’une boutique masque les avis qui semblent faux. Le code de départ crée deux versions à partir d’un même modèle, strict_pred et eager_pred, et lit quelle erreur est la plus pénalisante : missed (un faux avis reste visible) ou hidden (un vrai avis disparaît).
- Affiche la précision et le rappel de chaque filtre, avec 3 décimales.
- Affiche le filtre qui commet le moins cette erreur, comme ci-dessous (pour
missed:Fewer fakes missed: ...).
Pour une autre boutique et hidden :
Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strictEssayez vous-même
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score
# Quelle erreur est la plus préjudiciable : missed (un faux avis reste visible) ou hidden (un véritable avis est masqué) ?
worse = input()
# Une ligne par avis : 1 dans fake signifie que l’avis a été rédigé sur commande
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]
# Deux filtres issus du même modèle : strict masque un avis dès que la probabilité qu’il soit faux atteint 0.7, eager dès 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage supervisé
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne