TNI+VO · Exercice de Programmation

EP07_03 — 🟡 Évaluation par Matrice de Confusion

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

  1. Quantité : Lire l’entier \(N\) (nombre de pièces inspectées).
  2. 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\}\)).
  3. 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\).
  4. Métriques : Calculer \[ \text{Exactitude} = \frac{VP+VN}{N}, \quad \text{Précision} = \frac{VP}{VP+FP}, \quad \text{Rappel} = \frac{VP}{VP+FN}. \]
  5. 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), afficher Revocacao: indefinida.
  6. 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 1 est 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.
🎮 Simulateur EP07_03 : Précision x Rappel Ligne de production
Choisissez un scénario d'inspection et observez comment l'exactitude, la précision et le rappel réagissent différemment.
–
Figure 7.23: Simulateur EP07_03 : Précision x Rappel
%%writefile EP07_03.py
# Code Python
Overwriting 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.