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
- Quantità: Leggere l’intero \(N\) (numero di pezzi ispezionati).
- 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\}\)).
- 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\).
- Metriche: Calcolare \[ \text{Accuratezza} = \frac{VP+VN}{N}, \quad \text{Precisione} = \frac{VP}{VP+FP}, \quad \text{Richiamo} = \frac{VP}{VP+FN}. \]
- Casi degeneri: Se \(VP+FP=0\) (nessuna previsione positiva), stampare
Precisao: indefinida. Se \(VP+FN=0\) (nessun caso positivo reale), stampareRevocacao: indefinida. - 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. |
%%writefile EP07_03.py
# Codice PythonOverwriting 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.