Un modello assegna un punteggio alto a molti contatti commerciali, ma il team vendite scopre che parecchi non diventeranno clienti. La confusion matrix, o matrice di confusione, mostra quali previsioni sono corrette e quali errori commette il classificatore, anche se da sola non dice ancora quale errore costi di più alla tua azienda.

La matrice mostra dove il modello sbaglia, non se l’errore è accettabile
- Diagonale: raccoglie le previsioni corrette; le altre celle mostrano gli errori.
- Falso positivo: il modello segnala un caso che in realtà è negativo.
- Falso negativo: il modello non rileva un caso che in realtà è positivo.
- Classi rare: una buona accuracy complessiva può nascondere un richiamo molto basso.
- Soglia: cambiarla modifica il compromesso fra falsi allarmi e casi mancati.
Le quattro celle distinguono previsioni corrette ed errori
Immagina un classificatore che decide se un lead acquisterà. La matrice incrocia la classe reale con quella prevista: i casi corretti finiscono sulla diagonale, mentre gli scambi fra classi rivelano gli errori da esaminare.
| Esito | Classe reale positiva | Classe reale negativa |
|---|---|---|
| Predetto positivo | Vero positivo (TP): il lead acquista ed è segnalato. | Falso positivo (FP): il lead non acquista, ma viene segnalato. |
| Predetto negativo | Falso negativo (FN): il lead acquista, ma non viene segnalato. | Vero negativo (TN): il lead non acquista e non viene segnalato. |
La disposizione di righe e colonne può cambiare da uno strumento all’altro: controlla sempre le etichette prima di interpretare i numeri. Per esempio, la documentazione di scikit-learn definisce le righe come classi reali e le colonne come classi previste; altri strumenti possono presentare l’orientamento opposto. Un asse letto al contrario trasforma facilmente un falso positivo in un falso negativo.
Una accuracy del 90% può nascondere zero vendite individuate
Quando una classe è rara, l’accuracy può rassicurare senza descrivere il comportamento che interessa al business. Considera 1.000 lead, di cui 100 acquistano: un modello che classifica tutti come “non acquisterà” raggiunge il 90% di accuracy, ma non segnala neppure un futuro cliente.
Un secondo modello produce 72 veri positivi, 108 falsi positivi, 28 falsi negativi e 792 veri negativi. L’accuracy sale all’86,4%, ma ora il richiamo è 72% e la precisione è 40%: trova la maggior parte dei clienti, mentre soltanto 4 segnalazioni positive su 10 si traducono in acquisti. La scelta dipende dalla capacità del team di seguire quei contatti, non dal confronto isolato fra percentuali.
| Situazione osservata | Possibile lettura | Passo successivo |
|---|---|---|
| Accuracy alta, richiamo vicino a zero | Il modello può ignorare la classe minoritaria. | Esamina la matrice per classe e confronta il risultato con un modello di riferimento. |
| Molti falsi positivi | Il team può sprecare tempo su contatti poco promettenti. | Verifica il costo del follow-up e valuta una soglia più alta. |
| Molti falsi negativi | Possibili clienti interessanti restano fuori dal processo commerciale. | Valuta una soglia più bassa se il costo dei contatti aggiuntivi è sostenibile. |
| Conteggi modesti o classi molto sbilanciate | Una singola percentuale può essere instabile o fuorviante. | Controlla i numeri assoluti per classe e prova dati di valutazione più rappresentativi. |
Per questo considero l’accuracy un indicatore iniziale, non un verdetto. Nei casi sbilanciati affiancherei almeno precisione e richiamo, poi deciderei quale errore pesa di più nel processo concreto.
Precisione e richiamo rispondono a due domande diverse
La precisione risponde a: «Tra i casi segnalati dal modello, quanti sono davvero positivi?». Il richiamo chiede invece: «Tra tutti i positivi reali, quanti ne abbiamo trovati?». Un valore alto per una metrica non garantisce un valore alto anche per l’altra.
Se un falso negativo significa perdere una vendita importante, può avere senso privilegiare il richiamo e accettare più segnalazioni da verificare. Se ogni falso positivo innesca un controllo costoso o un blocco ingiustificato, la precisione può diventare prioritaria. L’F1 combina precisione e richiamo in un solo punteggio, ma non incorpora automaticamente il costo economico specifico degli errori.
La tabella può mostrare più classi, per esempio “acquisto immediato”, “interesse futuro” e “nessun interesse”. In quel caso, le celle fuori diagonale indicano quali categorie vengono confuse fra loro: scambiare un acquisto imminente con un interesse futuro può richiedere una risposta diversa dallo scambiarlo con un contatto inattivo.
La soglia va scelta in base al costo dell’errore
Un classificatore può restituire una probabilità o un punteggio; la soglia trasforma quel valore in una decisione di classe. Alzarla tende a ridurre le segnalazioni positive, abbassandola il modello ne produce di più: per questo cambiano anche falsi positivi e falsi negativi. La soglia predefinita non è una regola di business.
- Se un caso positivo mancato costa più di una verifica aggiuntiva, prova soglie più basse e osserva come cresce il richiamo.
- Se i falsi allarmi saturano il team o attivano procedure onerose, prova soglie più alte e controlla precisione e falsi negativi.
- Se entrambi gli errori hanno conseguenze rilevanti, confronta le soglie sul set di validazione e scegli usando costi operativi espliciti.
La guida di Google for Developers sulle soglie sottolinea che il valore 0,5 non è adatto automaticamente a ogni problema, soprattutto quando le classi sono sbilanciate o i due tipi di errore hanno conseguenze diverse. La matrice, dunque, va ricalcolata alla soglia che si intende davvero mettere in produzione.
La normalizzazione aiuta a leggere classi di dimensioni diverse
Con una classe molto frequente e una rara, i conteggi grezzi possono dominare la lettura visiva. La normalizzazione converte le celle in proporzioni, ma il risultato cambia secondo il riferimento scelto: righe, colonne oppure intera popolazione. Una percentuale senza denominatore dichiarato è ambigua.
In scikit-learn, il parametro normalize può normalizzare rispetto alle classi reali (true), a quelle previste (pred) o al totale (all). La prima vista aiuta a vedere quanti esempi reali di ogni classe vengono riconosciuti; la seconda chiarisce la composizione delle previsioni assegnate a ciascuna classe. Conserva anche i conteggi assoluti: una percentuale elevata basata su pochi esempi può cambiare rapidamente con nuovi dati.
Per problemi multilabel, in cui un record può avere più etichette contemporaneamente, una singola matrice multiclass non descrive necessariamente ogni etichetta nel modo atteso. La funzione multilabel_confusion_matrix di scikit-learn produce invece una matrice binaria per ciascuna classe, utile quando vuoi individuare quali etichette specifiche vengono perse o assegnate in eccesso.
Una matrice utile porta a una decisione operativa
Una tabella piena di numeri non decide da sola chi contattare, quali transazioni fermare o quali casi inviare a revisione. La decisione nasce quando colleghi ogni cella a una conseguenza: tempo del team, ricavi mancati, costi di controllo o rischio operativo.
Ritengo che la lettura più solida parta dagli errori che il processo può tollerare, poi confronti le metriche e la soglia su dati mai usati per addestrare il modello. Se il flusso cambia, cambiano anche la frequenza delle classi e il costo dei falsi allarmi: la matrice va quindi riletta, non archiviata come una valutazione definitiva.