Salta al contenuto
Note per Studenti Metriche di classificazione

Metriche di classificazione

In questa pagina 7

Per un problema di classificazione (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 →, Regressione logistica e softmaxLa regressione lineare non è adatta alla classificazione (valori fuori da [0,1], retta tirata dai punti lontani). La regressione logistica passa il predittore lineare dalla sigmoide $\sigma(z)=1/(1+e^{-z})$ e interpreta $\hat y=\sigma(x^T\beta)$ come $P(y=1\mid x)$: si predice la classe 1 se $\hat y\ge0{,}5$, cioè $x^T\beta\ge0$ (bordo lineare). L'errore quadratico dà una funzione non convessa; si usa la log-verosimiglianza negativa $-\sum[y\log\hat y+(1-y)\log(1-\hat y)]$, convessa, con gradiente $X^T(\hat y-y)$ e nessuna formula chiusa (discesa del gradiente). Per più classi: one-vs-one ($C(C-1)/2$ classificatori, voto), one-vs-all ($C$ classificatori, massima probabilità), o la softmax $p_c=e^{z_c}/\sum_ke^{z_k}$ con cross-entropia. Si può regolarizzare (ridge, LASSO, Elastic Net) e la cross-validation si fa stratificata. Approfondimento: non nel programma di Telecomunicazioni.Regressione logistica e softmax →) le metriche di regressione (MSE, R2R^2) non valgono: servono indici che contino le previsioni giuste e sbagliate di ciascun tipo (Lezione 11 · Classificazione e k-nearest neighbors, Lezione 13 · Regressione logistica, softmax e metriche di classificazione, Lezione 14 · Test di esempio e ripasso). Gli esercizi sono Esercizio - Metriche di classificazione da una matrice di confusione e Esercizio - Curva ROC e AUC di una foresta casuale e di un albero.

La matrice di confusione

Definizione (matrice di confusione). Tabella che incrocia la classe vera (actual, righe) con la classe prevista (predicted, colonne). Ogni cella conta quante osservazioni hanno quella combinazione; la diagonale contiene le previsioni corrette.

Nella classificazione binaria si chiama positiva la classe di interesse (malattia presente, mail spam, transazione fraudolenta, debito che andrà in default) e negativa l'altra (assenza della condizione). Le quattro celle sono:

previsto positivo previsto negativo
realmente positivo TP (vero positivo) FN (falso negativo, errore di tipo II)
realmente negativo FP (falso positivo, errore di tipo I) TN (vero negativo)
  • TP: positivo previsto positivo. TN: negativo previsto negativo.
  • FP: negativo previsto positivo (falso allarme).
  • FN: positivo previsto negativo (mancata rilevazione).

Esempio. Con etichette vere [1,1,1,1,0,0,0,1,1,1][1,1,1,1,0,0,0,1,1,1] e previste [1,1,1,1,0,0,1,0,0,0][1,1,1,1,0,0,1,0,0,0]: TP =4=4 (le prime quattro), TN =2=2 (posizioni 5 e 6), FP =1=1 (posizione 7: vero 00, previsto 11), FN =3=3 (posizioni 8, 9, 10: vero 11, previsto 00).

Le metriche principali

Formula (accuracy, specificità, precision, recall). accuracy=TP+TNTP+TN+FP+FN,specificitaˋ=TNTN+FP,\text{accuracy}=\frac{TP+TN}{TP+TN+FP+FN},\qquad\text{specificità}=\frac{TN}{TN+FP}, precision=TPTP+FP,recall (sensibilitaˋ, TPR)=TPTP+FN.\text{precision}=\frac{TP}{TP+FP},\qquad\text{recall (sensibilità, TPR)}=\frac{TP}{TP+FN}.

  • Accuracy (tasso di classificazione): frazione di previsioni corrette sul totale. 11 = classificatore perfetto; ≈1/C\approx1/C = caso.
  • Specificità: tra i casi realmente negativi, la frazione riconosciuta come tale. Dice quanto bene il modello evita i falsi allarmi; conta quando i falsi positivi sono costosi o problematici.
  • Precision (precisione): tra le previsioni positive, la frazione corretta. Dice quanto sono affidabili le previsioni positive; si sceglie al posto della specificità quando interessa la qualità delle previsioni positive.
  • Recall (richiamo, sensibilità, true positive rate): tra i casi realmente positivi, la frazione trovata. Risponde a «di tutti i positivi veri, quanti ne ha classificati bene?».

Esempio (stessi dati). Accuracy =4+210=0,6=\frac{4+2}{10}=0{,}6; specificità =22+1=0,667=\frac{2}{2+1}=0{,}667; precision =44+1=0,8=\frac{4}{4+1}=0{,}8; recall =44+3=0,571=\frac{4}{4+3}=0{,}571. Il modello è quindi affidabile quando dice «positivo» (0,80{,}8) ma trova solo il 57%57\% dei positivi.

Come scegliere. Dipende dal costo degli errori: in manutenzione predittiva o diagnosi si vuole un recall alto (meglio un controllo inutile che un guasto non previsto, a costo di più falsi positivi); per un filtro antispam che non deve bloccare mail vere si vuole alta precision.

Il punteggio F1F_1

Precision e recall si compensano: abbassare la soglia aumenta il recall e di solito riduce la precision. Per riassumere le due in un numero si usa la media armonica: F1=2 precision⋅recallprecision+recall.F_1=\frac{2\,\text{precision}\cdot\text{recall}}{\text{precision}+\text{recall}}. La media armonica è dominata dal valore più piccolo: con precision =1=1 e recall =0,1=0{,}1 la media aritmetica sarebbe 0,550{,}55 mentre F1=2⋅1⋅0,11,1=0,18F_1=\frac{2\cdot1\cdot0{,}1}{1{,}1}=0{,}18.

Esempio. Con precision 0,80{,}8 e recall 0,5710{,}571: F1=2⋅0,8⋅0,5711,371=0,667F_1=\frac{2\cdot0{,}8\cdot0{,}571}{1{,}371}=0{,}667.

Quando l'accuracy inganna: dati sbilanciati

Esempio (dalle slide, filtro antispam). Modello 1: delle mail spam, 2727 sono previste spam e 66 non spam; delle non spam, 1010 sono previste spam e 5757 non spam. TP =27=27, FN =6=6, FP =10=10, TN =57=57: accuracy =84100=0,84=\frac{84}{100}=0{,}84, recall =0,818=0{,}818, specificità =0,851=0{,}851, precision =2737=0,730=\frac{27}{37}=0{,}730, F1=0,771F_1=0{,}771. (La tabella delle slide riporta 83,44%83{,}44\%, che è la media delle due percentuali di riga, 81,81%81{,}81\% e 85,07%85{,}07\%, cioè la media di recall e specificità, detta balanced accuracy, e non l'accuracy.) Modello 2: su 10001000 mail (1010 spam e 990990 non spam) predice sempre «non spam»: TP =0=0, FN =10=10, FP =0=0, TN =990=990. Accuracy =9901000=99%=\frac{990}{1000}=99\%, ma recall =0=0: non trova nessuno spam ed è inutile. La precision è 0/00/0, indefinita.

Con le classi sbilanciate dunque:

  1. Il modello può ignorare la classe minoritaria. Con 90%90\% di classe A e 10%10\% di B si ottiene il 90%90\% di accuracy predicendo sempre A: metriche ingannevoli, alta accuracy e prestazioni pessime sulla minoritaria.
  2. L'addestramento è sbilanciato. Algoritmi come la regressione logistica, le SVM e le reti neurali tendono a ottimizzare la classe maggioritaria: cattiva generalizzazione sulla minoritaria e bordi di decisione distorti.

Quindi vanno usate metriche adeguate (precision, recall, F1F_1, ROC-AUC), la cross-validation stratificata (Regressione logistica e softmaxLa regressione lineare non è adatta alla classificazione (valori fuori da [0,1], retta tirata dai punti lontani). La regressione logistica passa il predittore lineare dalla sigmoide $\sigma(z)=1/(1+e^{-z})$ e interpreta $\hat y=\sigma(x^T\beta)$ come $P(y=1\mid x)$: si predice la classe 1 se $\hat y\ge0{,}5$, cioè $x^T\beta\ge0$ (bordo lineare). L'errore quadratico dà una funzione non convessa; si usa la log-verosimiglianza negativa $-\sum[y\log\hat y+(1-y)\log(1-\hat y)]$, convessa, con gradiente $X^T(\hat y-y)$ e nessuna formula chiusa (discesa del gradiente). Per più classi: one-vs-one ($C(C-1)/2$ classificatori, voto), one-vs-all ($C$ classificatori, massima probabilità), o la softmax $p_c=e^{z_c}/\sum_ke^{z_k}$ con cross-entropia. Si può regolarizzare (ridge, LASSO, Elastic Net) e la cross-validation si fa stratificata. Approfondimento: non nel programma di Telecomunicazioni.Regressione logistica e softmax →) e, se serve, il riequilibrio del dataset.

Riequilibrare il dataset

  • Undersampling: si riduce a caso il numero di campioni della classe maggioritaria. Pro: semplice e veloce, riduce i tempi di addestramento, può migliorare la minoritaria. Contro: si perde informazione utile (soprattutto con pochi dati) e si può andare in underfitting se si scarta troppo.
  • Oversampling: si aumenta la classe minoritaria, semplicemente duplicando campioni esistenti. Pro: bilancia senza perdere informazione. Contro: rischio di overfitting (si ripetono gli stessi punti) e i dati sintetici possono non rispecchiare la distribuzione vera.
  • Esiste una procedura popolare detta SMOTE (che crea campioni sintetici): le slide avvertono di non usarla, perché, pur diffusa, non ci sono prove scientifiche che funzioni.

Il riequilibrio si applica solo al training: il test set deve mantenere la distribuzione originale per stimare la prestazione reale.

Esempio. Con 900900 campioni A e 100100 B: l'undersampling porta a 100100 e 100100 (si scartano 800800 campioni); l'oversampling a 900900 e 900900 (ogni B è ripetuto in media 99 volte).

Metriche per più classi

Con C>2C>2 la matrice di confusione è C×CC\times C e l'accuracy è la somma della diagonale divisa per il totale. Per precision e recall si considera ogni classe contro tutte le altre e poi si media (media macro: media semplice tra le classi).

Esempio. Matrice (righe vere, colonne previste) con Cat, Dog, Horse: [8112100028]\begin{bmatrix}8&1&1\\2&10&0\\0&2&8\end{bmatrix}. Accuracy =8+10+832=0,8125=\frac{8+10+8}{32}=0{,}8125. Cat: TP =8=8, FP =2+0=2=2+0=2 (colonna meno diagonale), FN =1+1=2=1+1=2 (riga meno diagonale): precision 0,80{,}8, recall 0,80{,}8. Dog: precision 101+10+2=0,769\frac{10}{1+10+2}=0{,}769, recall 1012=0,833\frac{10}{12}=0{,}833. Horse: precision 81+0+8=0,889\frac{8}{1+0+8}=0{,}889, recall 0,80{,}8. Medie macro: precision 0,8190{,}819, recall 0,8110{,}811.

Soglia di decisione, curva ROC e AUC

I modelli che producono una probabilità o un punteggio (regressione logistica, foresta casuale con la frazione di voti) classificano confrontando il punteggio con una soglia, di solito 0,50{,}5. Cambiare la soglia sposta il compromesso tra i due errori: soglia alta, pochi positivi previsti (pochi falsi positivi, ma molti falsi negativi); soglia bassa, molti positivi previsti.

Definizione (curva ROC). Per ogni soglia tt (si predice positivo se punteggio ≥t\ge t) si calcolano il tasso di veri positivi TPR=TPTP+FN\text{TPR}=\frac{TP}{TP+FN} (la recall) e il tasso di falsi positivi FPR=FPFP+TN=1−specificitaˋ\text{FPR}=\frac{FP}{FP+TN}=1-\text{specificità}; la curva ROC (receiver operating characteristic) riporta TPR contro FPR. L'area sotto la curva si chiama AUC: 11 per un classificatore perfetto, 0,50{,}5 per uno casuale (la diagonale). Un buon classificatore ha la curva vicina all'angolo in alto a sinistra.

Esempio. Etichette y=[0,0,1,1]y=[0,0,1,1] e punteggi [0,1; 0,4; 0,35; 0,8][0{,}1;\,0{,}4;\,0{,}35;\,0{,}8]. Soglia 0,80{,}8: previsti positivi solo il punteggio 0,80{,}8 (vero positivo): TPR =1/2=1/2, FPR =0=0, punto (0; 0,5)(0;\,0{,}5). Soglia 0,40{,}4: positivi i punteggi 0,80{,}8 e 0,40{,}4 (quest'ultimo è un negativo): TP =1=1, FP =1=1, punto (0,5; 0,5)(0{,}5;\,0{,}5). Soglia 0,350{,}35: TP =2=2, FP =1=1, punto (0,5; 1)(0{,}5;\,1). Soglia 0,10{,}1: tutti positivi, punto (1; 1)(1;\,1). Area per rettangoli: 0,5⋅0,50{,}5\cdot0{,}5 (tra FPR=0\text{FPR}=0 e 0,50{,}5 a quota 0,50{,}5) + 0,5⋅1+\ 0{,}5\cdot1 (tra 0,50{,}5 e 11 a quota 11) =0,25+0,5=0,75=0{,}25+0{,}5=0{,}75. Lo stesso valore si ottiene contando le coppie (positivo, negativo) in cui il positivo ha punteggio più alto: 33 su 44 ⇒0,75\Rightarrow0{,}75: l'AUC è la probabilità che un positivo preso a caso abbia un punteggio maggiore di un negativo preso a caso.

Grafico interattivo: Curva ROC dell'esempio (punteggi 0,1; 0,4; 0,35; 0,8 con classi 0, 0, 1, 1): passa per (0; 0,5), (0,5; 0,5), (0,5; 1); l'area è 0,75. La diagonale è il classificatore casuale (AUC = 0,5)

Codice

python
import numpy as np
def confusion_counts(y_true, y_pred):
    TP = np.sum((y_true == 1) & (y_pred == 1)); TN = np.sum((y_true == 0) & (y_pred == 0))
    FP = np.sum((y_true == 0) & (y_pred == 1)); FN = np.sum((y_true == 1) & (y_pred == 0))
    return TP, TN, FP, FN

TP, TN, FP, FN = confusion_counts(y_true, y_pred)
accuracy    = (TP + TN) / (TP + TN + FP + FN)
specificity = TN / (TN + FP)
precision   = TP / (TP + FP)
recall      = TP / (TP + FN)
f1          = 2 * precision * recall / (precision + recall)
# scikit-learn: accuracy_score, precision_score, recall_score, f1_score, roc_curve, roc_auc_score

Con un test set di 115115 campioni del dataset breast cancer (positiva la classe 11) e k=20k=20 vicini, il laboratorio ottiene accuracy 0,9220{,}922, specificità 0,8600{,}860, precision 0,9200{,}920, recall 0,9580{,}958 (F1=0,939F_1=0{,}939); con la regressione logistica sui dati standardizzati accuracy 0,9830{,}983, specificità 0,9530{,}953, precision 0,9730{,}973, recall 11.

Errori tipici

  • Valutare un problema sbilanciato con l'accuracy.
  • Confondere precision (colonna: tra i previsti positivi) e recall (riga: tra i veri positivi).
  • Rieseguire il riequilibrio (oversampling) prima della divisione in training e test: i duplicati finiscono in entrambi gli insiemi e la stima è falsata.
  • Dimenticare che la soglia 0,50{,}5 è una scelta: dipende dal costo dei due errori.
  • Calcolare la media macro come se fosse l'accuracy.
  • Confondere specificità e recall (sono entrambe «tassi», ma di classi diverse).

Versione ripasso

Definizione. Matrice di confusione: righe = classe vera, colonne = prevista. Binaria: TP, TN, FP (falso allarme, tipo I), FN (mancata rilevazione, tipo II). Positiva = classe di interesse.

Esempio. y=[1,1,1,1,0,0,0,1,1,1]y=[1,1,1,1,0,0,0,1,1,1], previsti [1,1,1,1,0,0,1,0,0,0][1,1,1,1,0,0,1,0,0,0]: TP =4=4, TN =2=2, FP =1=1, FN =3=3.

Formula. accuracy =TP+TNTP+TN+FP+FN=\frac{TP+TN}{TP+TN+FP+FN}; specificità =TNTN+FP=\frac{TN}{TN+FP}; precision =TPTP+FP=\frac{TP}{TP+FP}; recall =TPTP+FN=\frac{TP}{TP+FN}; F1=2PRP+RF_1=\frac{2PR}{P+R} (media armonica).

Esempio. 0,6; 0,667; 0,8; 0,571; F1=0,6670{,}6;\ 0{,}667;\ 0{,}8;\ 0{,}571;\ F_1=0{,}667.

Uso. Specificità: falsi positivi costosi. Precision: affidabilità delle previsioni positive. Recall: non perdere positivi (diagnosi, guasti).

Sbilanciamento. Modello «sempre maggioritaria»: 99%99\% di accuracy con recall 00. Il modello ignora la minoritaria e il training è distorto ⇒\Rightarrow usare precision/recall/F1F_1/ROC-AUC, CV stratificata. Undersampling: scartare la maggioritaria (veloce, perde informazione, underfitting). Oversampling: duplicare la minoritaria (nessuna perdita, overfitting). SMOTE: non usarlo. Riequilibrare solo il training.

Più classi. Accuracy = diagonale/totale; precision e recall per classe (classe contro resto), media macro. Esempio: matrice [[8,1,1],[2,10,0],[0,2,8]][[8,1,1],[2,10,0],[0,2,8]]: accuracy 0,81250{,}8125, precision macro 0,8190{,}819, recall macro 0,8110{,}811.

Definizione (ROC). Per ogni soglia tt: TPR=TPTP+FN\text{TPR}=\frac{TP}{TP+FN}, FPR=FPFP+TN=1−specificitaˋ\text{FPR}=\frac{FP}{FP+TN}=1-\text{specificità}; curva TPR contro FPR; AUC = area (11 perfetto, 0,50{,}5 caso) = probabilità che un positivo abbia punteggio maggiore di un negativo.

Esempio. y=[0,0,1,1]y=[0,0,1,1], punteggi [0,1;0,4;0,35;0,8][0{,}1;0{,}4;0{,}35;0{,}8]: punti (0;0,5),(0,5;0,5),(0,5;1),(1;1)(0;0{,}5),(0{,}5;0{,}5),(0{,}5;1),(1;1), AUC =0,75=0{,}75.

Errori tipici: accuracy su dati sbilanciati; scambiare precision e recall; riequilibrare prima di dividere train/test; soglia 0,50{,}5 non motivata.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata