
Per valutare un modello di machine learning che analizza grandi dataset si può pensare di usare la matrice di confusione (meglio conosciuta come confusion matrix).
L’abbiamo già vista per stimare la qualità dell’algoritmo knn e della regressione logistica nel linguaggio Python.
In questa sede, vediamo di spiegare con maggiore dettaglio il principio di funzionamento e come i valori al suo interno vengono calcolati.
Cos’è la matrice di confusione?
Nel campo del machine learning e nella classificazione statistica, una matrice di confusione è una tabella in cui le previsioni sono rappresentate nelle colonne e lo stato effettivo è rappresentato dalle righe (a volte questo è invertito, con istanze reali in colonne e previsioni nelle righe).
La tabella è un’estensione della matrice di confusione nell’analisi predittiva e rende facile vedere se si è verificato un errore di denominazione e se le previsioni sono più o meno corrette.
Da questa tabella, quindi, è possibile comprendere le performance di un modello predittivo di classificazione in modo da determinare quanto questo modello sia accurato ed efficace.
Possiamo avere due tipi di matrice di confusione:
- A 2 Classi: tentano di prevedere le performance di un modello predittivo a due classi (Si/No, Vero/Falso, e così via);
- Multiclasse: tentano di prevedere le performance di un modello predittivo formato da più di due classi.
Matrice di confusione a due classi
La matrice di confusione a due classi viene utilizzata per prevedere il risultato di un classificatore binario.
Un classificatore binario produce output con due valori di classe o etichette, come Si / No e 1/0, per dati di input conosciuti. La classe di interesse viene solitamente indicata come “positiva” e l’altra come “negativa“.
Vediamo un esempio per comprendere meglio il termine di matrice di confusione a due classi. Ipotizziamo di avere la seguente tabella, che rappresenta una matrice di confusione per un modello di spam:
Possiamo notare che ci sono due “classi di previsione”: Si e No. Si rappresenta lo spam di mail (classe positiva), no una mail normale non considerata spam (classe negativa).
Il numero totale di previsioni eseguite è pari a 300 (mail testate dal modello). Di queste 300 previsioni, 180 sono mail di spam e 120 no. Effettivamente però sono solo 170 (20 + 150) che sono spam. Allo stesso modo le mail effettive che non sono considerate spam sono 130 (100 + 30).
Per comprendere meglio l’incrocio tra valori effettivi e previsti alla matrice di confusione vengono associati i seguenti termini:
- True positive (TP, o veri positivi): sono i casi in cui abbiamo previsto che la mail fosse spam, e lo sono realmente.
- True negative (TN, o veri negativi): il modello ha previsto che la mail non è spam e non lo è veramente.
- False positive (FP, o falsi positivi): sono i casi in cui abbiamo previsto che le mail fossero spam, ma in realtà non lo erano (conosciuti anche come errori di I tipo).
- False negative (FN, o falsi negativi): il modello ha previsto che la mail non è spam, anche se in realtà lo è (conosciuti anche come errori di II tipo).
Quanto affermato è riportato nell’esempio proposto dalla seguente tabella:
Metriche base utilizzate dalla matrice di confusione
Tra le metriche base e più diffuse della matrice di confusione possiamo trovare:
- Error Rate (o Tasso di errore): è il tasso di errore (ERR) e viene calcolato come il numero di tutti i pronostici errati diviso per il numero totale del set di dati. Il miglior tasso di errore è 0, mentre il peggiore è 1.
- Accuracy (o accuratezza): indica l’accuratezza del modello come dice il nome. Pertanto, la migliore accuratezza è 1, mentre la peggiore è 0. Può anche essere calcolato da 1 – ERR, o dalla seguente formula:
- Precision (o precisione): La precisione è l’abilità di un classificatore di non etichettare un’istanza positiva che è in realtà negativa. Per ogni classe è definito come il rapporto tra veri positivi e la somma di veri e falsi positivi. Detto in un altro modo, “per tutte le istanze classificate come positive, quale percentuale era corretta?”. La formula di calcolo della precisione è la seguente:
- Recall (o richiamo): detta anche sensitivity o true positive, è la capacità di un classificatore di trovare tutte le istanze positive. Per ogni classe è definito come il rapporto tra i veri positivi e la somma dei veri positivi e dei falsi negativi. Detto in altri termini, “per tutte le istanze che erano effettivamente positive, quale percentuale è stata classificata correttamente?”. La formula di calcolo del richiamo è la seguente:
- Specificity (o specificità, SP): è calcolata come il numero di previsioni negative corrette diviso per il numero totale di negativi (N). Viene anche chiamato vero tasso negativo (TNR). La migliore specificità è 1, mentre la peggiore è 0. Si può usare questa formula per il calcolo:
- False positive rate (o rateo falsi positivi): Il tasso di falsi positivi (FPR) viene calcolato come il numero di previsioni positive errate diviso per il numero totale di negativi. Il miglior tasso di falsi positivi è 0 mentre il peggiore è 1. Può anche essere calcolato come 1 – specificità.
- F-score (o punteggio f): è una media armonica ponderata delle metriche Precision e Recall in modo tale che il punteggio migliore sia 1 e il peggiore sia 0. Come regola generale, la media ponderata di F1 dovrebbe essere utilizzata per confrontare i modelli di classificatore, non la precisione globale.
Riportiamo i risultati di queste metriche che si ottengono dall’esempio sullo spam proposto sopra:
Matrice di confusione multiclasse
Per misurare i risultati degli algoritmi di machine learning, la precedente matrice di confusione non sarà sufficiente. Avremo bisogno di una generalizzazione per il caso multi-classe.
Supponiamo di avere un campione di 25 animali, ad es. 7 gatti, 8 cani e 10 uccelli. La matrice di confusione del nostro algoritmo di riconoscimento può essere simile alla seguente tabella:
In questa matrice di confusione, il sistema predice correttamente sei degli otto cani effettivi, ma in due casi scambia un cane per un gatto.
I sette gatti sono stati correttamente riconosciuti in sei casi, ma in un caso un gatto è stato considerato un cane.
Di solito, è difficile prendere un uccello per un cane o un gatto, ma questo è quello che è successo al nostro classificatore in due casi. Eppure, otto uccelli su dieci erano stati riconosciuti correttamente.
Puoi vedere che tutte le previsioni corrette si trovano nella diagonale della tabella, quindi gli errori di previsione possono essere facilmente trovati, poiché saranno rappresentati da valori esterni alla diagonale.
Per calcolare i valori di True Positive, True Negative, False Positive e False Negative in una matrice di confusione multiclasse si può procedere a calcolare il valore singolo di TP, TN, FP e FN specifico per quella classe. Quindi avremo che:
Per la classe Cane:
TP = 6
TN = 6 + 8 = 14
FP = 1 + 1 = 2
FN = 2
Per la classe Gatto:
TP = 6
TN = 6 + 8 = 14
FP = 1
FN = 3
Per la classe Uccello:
TP = 8
TN = 6 + 6 = 12
FP = 2
FN = 0
Da ciò, possiamo procedere a calcolare le varie metriche viste e si può trarre quanto segue:
Le formule sono state calcolate come quanto riportato sopra. Il totale invece rappresenta una media dei valori ottenuti dalle 3 classi.
Matrice di confusione in Python
Nei problemi di machine learning in Python si può seguire la documentazione di scikit-learn per creare una matrice di confusione.
La matrice di confusione è quindi qua calcolata come un array, di 2 x 2 (se la matrice è binaria) o n x n (con n righe e colonne pari al numero di classi del problema di classificazione).
Per maggiori informazioni consiglio la lettura dei seguenti articoli (in lingua inglese):