7.18.3 EP07_03 🟡 Évaluation par Matrice de Confusion
Un classifieur binaire de qualité de soudure a été entraîné et testé sur une ligne de production. Pour chaque pièce inspectée, le système a enregistré le label réel (obtenu par un expert) et le label prédit par le classifieur, où 1 représente « défectueuse » et 0 représente « conforme ».
La direction qualité souhaite connaître non seulement l’exactitude du système, mais aussi sa précision (lorsque le système signale un défaut, à quelle fréquence a-t-il raison ?) et son rappel (parmi toutes les pièces réellement défectueuses, combien le système a-t-il réussi à identifier ?) — la distinction discutée dans la section d’évaluation des classifieurs du chapitre.
7.18.3.1 📋 Directives d’Implémentation
- Quantité : Lire l’entier \(N\) (nombre de pièces inspectées).
- Données de chaque pièce : Pour chacune des \(N\) pièces, lire deux entiers — le label réel \(y\) et le label prédit \(\hat y\) (tous deux \(\in \{0, 1\}\)).
- Matrice de confusion : En considérant la classe
1(défectueuse) comme positive, compter :- \(VP\) (Vrai Positif) : \(y=1\) et \(\hat y=1\) ;
- \(FP\) (Faux Positif) : \(y=0\) et \(\hat y=1\) ;
- \(FN\) (Faux Négatif) : \(y=1\) et \(\hat y=0\) ;
- \(VN\) (Vrai Négatif) : \(y=0\) et \(\hat y=0\).
- Métriques : Calculer \[ \text{Exactitude} = \frac{VP+VN}{N}, \quad \text{Précision} = \frac{VP}{VP+FP}, \quad \text{Rappel} = \frac{VP}{VP+FN}. \]
- Cas dégénérés : Si \(VP+FP=0\) (aucune prédiction positive), afficher
Precisao: indefinida. Si \(VP+FN=0\) (aucun cas positif réel), afficherRevocacao: indefinida. - Arrondi : Toutes les métriques numériques doivent être arrondies à 4 décimales (round half away from zero) uniquement lors de l’affichage.
7.18.3.2 📌 Contraintes Computationnelles
- Convention de classe positive fixe : la classe
1est toujours la classe positive dans cet exercice, indépendamment de sa fréquence relative. - Protection contre la division par zéro : implémentez les cas dégénérés du point 5 avant d’effectuer la division.
- Ordre de sortie : suivez exactement l’ordre spécifié dans la section de sortie, même dans les cas dégénérés.
7.18.3.3 🧠 Fondement Théorique
| Métrique | Question à laquelle elle répond | Sensible au déséquilibre ? |
|---|---|---|
| Exactitude | Quelle fraction des pièces a été classée correctement ? | Oui — peut masquer des erreurs dans la classe minoritaire |
| Précision | Parmi les pièces signalées comme défectueuses, combien le sont réellement ? | Pénalise les faux positifs |
| Rappel | Parmi les pièces réellement défectueuses, combien ont été détectées ? | Pénalise les faux négatifs |
Dans un contexte industriel, un rappel faible est souvent plus grave qu’une précision faible : laisser passer une pièce défectueuse (faux négatif) tend à être plus coûteux que d’inspecter manuellement une bonne pièce signalée par erreur (faux positif).
7.18.3.4 📦 Spécification d’Entrée et de Sortie (VPL)
Entrée :
- Ligne 1 : Entier \(N\).
- Les \(N\) lignes suivantes : deux entiers par ligne — \(y\) et \(\hat y\), séparés par un espace.
Sortie (dans cet ordre exact) :
VP=<int> FP=<int> FN=<int> VN=<int>
Acuracia: <valeur ou métrique indéfinie>
Precisao: <valeur ou indéfinie>
Revocacao: <valeur ou indéfinie>
7.18.3.5 📌 Exemples
| Entrée | Sortie | Observation |
|---|---|---|
| 4 1 1 0 1 1 0 0 0 |
VP=1 FP=1 FN=1 VN=1 Acuracia: 0.5000 Precisao: 0.5000 Revocacao: 0.5000 |
Une erreur de chaque type. |
| 3 0 0 0 0 0 0 |
VP=0 FP=0 FN=0 VN=3 Acuracia: 1.0000 Precisao: indefinida Revocacao: indefinida |
Aucun cas positif réel ni prédit. |
%%writefile EP07_03.py
# Code PythonOverwriting EP07_03.py
TestSuite("EP07_03.py").run()✔️ EP07_03.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP07_03.cases
🔍 Test de Python : EP07_03.py
⚠️ EP07_03.py : fichier vide (moins de 3 lignes). Tests ignorés.