Esercizio - Metriche di classificazione da una matrice di confusione
Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.
In questa pagina 6
Testo (dalle slide sulla classificazione). Tre filtri antispam sono valutati su mail con classe positiva «spam».
- Modello 1, su mail ( spam e non spam): dei spam, sono previsti spam e non spam; dei non spam, sono previsti spam e non spam.
- Modello 2, su mail ( spam e non spam): predice sempre «non spam».
- Modello 3, sulle stesse mail del modello 2: trova spam su ma classifica come spam anche mail normali.
Per ciascuno: matrice di confusione, accuracy, specificità, precision, recall e ; dire quale modello è migliore per un filtro antispam. In più: metriche macro per una classificazione a tre classi.
Teoria usata: Metriche di classificazioneIn classificazione binaria ogni previsione è vero positivo (TP), vero negativo (TN), falso positivo (FP, errore di tipo I) o falso negativo (FN, errore di tipo II). Da queste quattro quantità: accuracy $=\frac{TP+TN}{TP+TN+FP+FN}$, specificità $=\frac{TN}{TN+FP}$, precision $=\frac{TP}{TP+FP}$, recall $=\frac{TP}{TP+FN}$, e la loro media armonica $F_1=\frac{2PR}{P+R}$. Con dati sbilanciati l'accuracy inganna (un modello che predice sempre la classe maggioritaria ha 99%): si usano precision, recall, F1, ROC-AUC, la cross-validation stratificata e il riequilibrio con undersampling o oversampling (non SMOTE). Cambiando la soglia sulla probabilità si ottiene la curva ROC (TPR contro FPR) e l'area AUC. Approfondimento: non nel programma di Telecomunicazioni.Metriche di classificazione →; i concetti di classe positiva e di errore sono in Classificazione e k-nearest neighborsNella classificazione l'uscita $y$ è una categoria (con $C$ classi; $C=2$ è il caso binario). Il classificatore più semplice è il k-nearest neighbors: una nuova osservazione prende la classe più frequente (voto di maggioranza) tra i suoi $k$ vicini più prossimi nel training, con distanza euclidea $\sqrt{\sum(A_i-B_i)^2}$ o di Manhattan $\sum|A_i-B_i|$ (per la regressione si fa la media dei vicini). $k$ è un iperparametro: $k$ piccolo dà bordi frastagliati e overfitting, $k$ grande underfitting. È un metodo basato su istanze e «pigro» (nessun addestramento, costo alla predizione), sensibile a scala e feature irrilevanti e alla maledizione della dimensionalità; gli ingressi categorici si codificano con one-hot. Approfondimento: non nel programma di Telecomunicazioni.Classificazione e k-nearest neighbors →.
Modello 1
Righe: classe vera; colonne: prevista. (spam previsti spam), , (non spam previsti spam), .
| prev. spam | prev. non spam | |
|---|---|---|
| spam | ||
| non spam |
- accuracy ;
- recall (trova l' dello spam);
- specificità ;
- precision ;
- .
La tabella delle slide riporta «overall accuracy »: è la media delle due percentuali di riga, , cioè la media di recall e specificità (balanced accuracy); l'accuracy vera è .
Modello 2
, , , .
- accuracy (!);
- recall : non trova nessuno spam;
- specificità ;
- precision : indefinita (non ha mai previsto spam);
- (per convenzione).
L'accuracy del è ingannevole: coincide con la frazione di non spam. Il modello è inutile per trovare lo spam: con dati sbilanciati l'accuracy non basta.
Modello 3
, , , (i non spam: mal classificati e giusti).
- accuracy ;
- recall ;
- specificità ;
- precision ;
- .
Trova quasi tutto lo spam ma sbaglia 19 volte su 20 quando dice «spam»: ( falsi allarmi su segnalazioni).
Confronto
| modello | accuracy | recall | specificità | precision | |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | indef. | ||||
| 3 |
Il modello 2 ha la migliore accuracy ma è inutile; il modello 3 ha un buon recall ma è inutilizzabile in pratica (bloccherebbe quasi solo posta legittima). Per un filtro antispam, in cui bloccare una mail vera è molto grave, serve alta precision; il modello 1 ha il miglior equilibrio (). Con modelli probabilistici si può regolare la soglia di decisione per spostare l'equilibrio tra falsi positivi e falsi negativi (curva ROC: Esercizio - Curva ROC e AUC di una foresta casuale e di un albero).
Tre classi: metriche macro
Matrice (righe vere, colonne previste) per Cat, Dog, Horse: . Totale , diagonale : accuracy . Per ogni classe, contro le altre due: precision = diagonale / somma della colonna; recall = diagonale / somma della riga.
| classe | precision | recall |
|---|---|---|
| Cat | ||
| Dog | ||
| Horse |
Medie macro (media semplice): precision e recall .
Verifica
import numpy as np
def metrics(TP, FN, FP, TN):
acc = (TP + TN) / (TP + TN + FP + FN)
rec = TP / (TP + FN); spec = TN / (TN + FP)
prec = TP / (TP + FP) if TP + FP else float("nan")
f1 = 2 * prec * rec / (prec + rec) if TP else 0.0
return acc, rec, spec, prec, f1
print(metrics(27, 6, 10, 57)) # (0.84, 0.818, 0.851, 0.730, 0.771)
print(metrics(0, 10, 0, 990)) # (0.99, 0.0, 1.0, nan, 0.0)
print(metrics(9, 1, 190, 800)) # (0.809, 0.9, 0.808, 0.045, 0.086)
M = np.array([[8,1,1],[2,10,0],[0,2,8]]); tp = np.diag(M)
print(tp.sum() / M.sum(), (tp / M.sum(0)).mean(), (tp / M.sum(1)).mean()) # 0.8125 0.819 0.811