Évaluation des modèles
Évaluer un modèle, c’est comme vérifier si un élève a bien compris sa leçon : on compare ses réponses (prédictions) à la correction (les vraies valeurs).
Accuracy (Taux de bonne réponse)
from sklearn.metrics import accuracy_score
# Exemple : sur 100 emails, combien le modèle a-t-il bien classés comme "spam" ou "pas spam" ?
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy : {accuracy}")
Imaginons
| Réalité (y_test) | Prédiction (y_pred) |
|---|---|
| chat | chat |
| chien | chat |
| chat | chat |
| chien | chien |
from sklearn.metrics import accuracy_score
y_test = ['chat', 'chien', 'chat', 'chien']
y_pred = ['chat', 'chat', 'chat', 'chien']
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy : {accuracy}")
Résultat : Accuracy : 0.75
Comment interpréter ce résultat ?
-
Il y a 4 prédictions au total
-
Le modèle a eu 3 bonnes réponses : chat, chat, chien
-
Et 1 erreur : il a prédit chat alors que c’était chien
Donc :
Accuracy = 3 / 4 = 0.75 -> soit 75 % de bonnes prédictions
MSE (Erreur Quadratique Moyenne)
from sklearn.metrics import mean_squared_error
# Exemple : pour un modèle de régression qui prédit le prix d'une maison,
# le MSE mesure à quel point les prédictions sont proches des vrais prix.
mse = mean_squared_error(y_test, y_pred)
print(f'MSE du modèle de prédiction : {mse}')
Imaginons
| Sachet | Vrai nombre (y_test) | Devine (y_pred) |
|---|---|---|
| A | 10 | 12 |
| B | 20 | 18 |
| C | 30 | 33 |
from sklearn.metrics import mean_squared_error
# Vraies valeurs (nombre réel de bonbons)
y_test = [10, 20, 30]
# Prédictions du modèle (devinettes de l'élève)
y_pred = [12, 18, 33]
# Calcul du MSE
mse = mean_squared_error(y_test, y_pred)
print(f"MSE : {mse}")
Résultat : MSE : 4.6666
Que veut dire ce MSE = 4.67 ?
-
Cela veut dire que, en moyenne, l'élève se trompe de √4.67 ≈ 2.16 bonbons.
-
Le MSE est une moyenne des carrés des erreurs : (12−10)² + (18−20)² + (33−30)² = 4 + 4 + 9 = 17, puis 17 / 3 = 5.67
| Valeur du MSE | Interprétation |
|---|---|
| 0 | Prédictions parfaites |
| Faible | Le modèle est précis |
| Élevée | Le modèle se trompe souvent ou fortement |
Classification Report
Fournit les scores de précision, rappel et F1-score
F1-score = moyenne harmonique entre la précision (precision) et le rappel (recall)
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
Imaginons
Contexte : Le modèle doit deviner si un animal est un chat ou un chien.
from sklearn.metrics import classification_report
y_test = ['chat', 'chien', 'chat', 'chien']
y_pred = ['chat', 'chat', 'chat', 'chien']
# Affiche les metrics de chaque classe
print(classification_report(y_test, y_pred))
Résultat affiché :
precision recall f1-score support
chat 0.67 1.00 0.80 2
chien 1.00 0.50 0.67 2
accuracy 0.75 4
macro avg 0.83 0.75 0.73 4
weighted avg 0.83 0.75 0.73 4
Comment lire ce résultat ?
-
chat :
- precision = 0.67 → Le modèle a dit "chat" 3 fois, mais il avait raison 2 fois.
- recall = 1.00 → Tous les vrais chats ont bien été reconnus.
-
chien :
- precision = 1.00 → À chaque fois que le modèle a dit "chien", c'était juste.
- recall = 0.50 → Il n’a reconnu qu’1 chien sur 2.
En gros
| Terme | Analogie simple |
|---|---|
| Precision | Quand tu dis "chat", as-tu souvent raison ? |
| Recall | As-tu bien reconnu tous les chats ? |
| F1-Score | Es-tu globalement bon à la fois pour reconnaître et prédire ? |
| Support | Combien d’exemples de cette classe avaient-on vraiment ? |
Matrice de Confusion
from sklearn.metrics import confusion_matrix
# Permet de voir où le modèle s'est trompé (ex : a dit "banane" au lieu de "pomme")
print(confusion_matrix(y_test, y_pred))
Exemple
from sklearn.metrics import confusion_matrix
y_test = ['chat', 'chien', 'chat', 'chien']
y_pred = ['chat', 'chat', 'chat', 'chien']
print(confusion_matrix(y_test, y_pred, labels=['chat', 'chien']))
Résultat affiché :
[[2 0]
[1 1]]
| Prédit chat | Prédit chien | |
|---|---|---|
| Vrai chat | 2 (✔️) | 0 (❌) |
| Vrai chien | 1 (❌) | 1 (✔️) |
- 2 chats bien prédits (en haut à gauche)
- 1 chien mal prédit comme chat (en bas à gauche)
- 1 chien bien prédit (en bas à droite)