EDI+VA · Esercizio di Programmazione

EP07_03 — 🟡 Valutazione tramite Matrice di Confusione

7.18.3 EP07_03 🟡 Valutazione tramite Matrice di Confusione

Un classificatore binario della qualità della saldatura è stato addestrato e testato su una linea di produzione. Per ogni pezzo ispezionato, il sistema ha registrato l’etichetta reale (ottenuta da un esperto) e l’etichetta prevista dal classificatore, dove 1 rappresenta “difettoso” e 0 rappresenta “conforme”.

La direzione qualità vuole conoscere non solo l’accuratezza del sistema, ma anche la sua precisione (quando il sistema segnala un difetto, con quale frequenza ha ragione?) e il suo richiamo (di tutti i pezzi realmente difettosi, quanti il sistema è riuscito a identificare?) — la distinzione discussa nella sezione sulla valutazione dei classificatori del capitolo.

7.18.3.1 📋 Linee Guida di Implementazione

  1. Quantità: Leggere l’intero \(N\) (numero di pezzi ispezionati).
  2. Dati di ciascun pezzo: Per ciascuno degli \(N\) pezzi, leggere due interi — l’etichetta reale \(y\) e l’etichetta prevista \(\hat y\) (entrambe \(\in \{0, 1\}\)).
  3. Matrice di confusione: Considerando la classe 1 (difettoso) come positiva, contare:
    • \(VP\) (Vero Positivo): \(y=1\) e \(\hat y=1\);
    • \(FP\) (Falso Positivo): \(y=0\) e \(\hat y=1\);
    • \(FN\) (Falso Negativo): \(y=1\) e \(\hat y=0\);
    • \(VN\) (Vero Negativo): \(y=0\) e \(\hat y=0\).
  4. Metriche: Calcolare \[ \text{Accuratezza} = \frac{VP+VN}{N}, \quad \text{Precisione} = \frac{VP}{VP+FP}, \quad \text{Richiamo} = \frac{VP}{VP+FN}. \]
  5. Casi degeneri: Se \(VP+FP=0\) (nessuna previsione positiva), stampare Precisao: indefinida. Se \(VP+FN=0\) (nessun caso positivo reale), stampare Revocacao: indefinida.
  6. Arrotondamento: Tutte le metriche numeriche devono essere arrotondate a 4 cifre decimali (round half away from zero) solo nella visualizzazione.

7.18.3.2 📌 Vincoli Computazionali

  • Convenzione di classe positiva fissa: la classe 1 è sempre la classe positiva in questo esercizio, indipendentemente dalla sua frequenza relativa.
  • Protezione dalla divisione per zero: implementare i casi degeneri del punto 5 prima di eseguire la divisione.
  • Ordine di uscita: seguire esattamente l’ordine specificato nella sezione di uscita, anche nei casi degeneri.

7.18.3.3 🧠 Fondamento Teorico

Metrica Domanda a cui risponde Sensibile allo squilibrio?
Accuratezza Quale frazione di pezzi è stata classificata correttamente? Sì — può mascherare errori nella classe minoritaria
Precisione Dei pezzi segnalati come difettosi, quanti lo sono realmente? Penalizza i falsi positivi
Richiamo Dei pezzi realmente difettosi, quanti sono stati rilevati? Penalizza i falsi negativi

In un contesto industriale, un richiamo basso è spesso più grave di una precisione bassa: lasciar passare un pezzo difettoso (falso negativo) tende a essere più costoso che ispezionare manualmente un pezzo buono segnalato per errore (falso positivo).

7.18.3.4 📦 Specifica di Input e Output (VPL)

Input:

  • Riga 1: Intero \(N\).
  • Successive \(N\) righe: due interi per riga — \(y\) e \(\hat y\), separati da spazio.

Output (in questo ordine esatto):

VP=<int> FP=<int> FN=<int> VN=<int>
Acuracia: <valore o metrica indefinita>
Precisao: <valore o indefinita>
Revocacao: <valore o indefinita>

7.18.3.5 📌 Esempi

Input Output Osservazione
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
Un errore di ogni tipo.
3
0 0
0 0
0 0
VP=0 FP=0 FN=0 VN=3
Acuracia: 1.0000
Precisao: indefinida
Revocacao: indefinida
Nessun caso positivo reale né previsto.
🎮 Simulatore EP07_03: Precisione x Richiamo Linea di Produzione
Scegli uno scenario di ispezione e osserva come Accuratezza, Precisione e Richiamo reagiscono in modo diverso.
–
Figura 7.23: Simulatore EP07_03: Precisione x Richiamo
%%writefile EP07_03.py
# Codice Python
Overwriting EP07_03.py
TestSuite("EP07_03.py").run()
✔️ EP07_03.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP07_03.cases

🔍 Test di Python: EP07_03.py
⚠️ EP07_03.py: file vuoto (meno di 3 righe). Test saltati.