La matrice di confusione è utilizzata per valutare le metriche dei modelli di classificazione (molto popolari nel data mining). Mette in evidenza il confronto tra le classi predette e quelle reali per fare una stima dell’affidabilità del classificatore stesso. Inoltre, permette di identificare il tipo di errore di classificazione.
Come è fatta la matrice di confusione?
Se prendiamo in considerazione un modello di classificazione binaria, ovvero un modello che può predire due classi, la matrice ha dimensione 2×2. Nel caso di classificazione binaria, la classe rara è anche chiamata classe positiva, mentre la classe che include la maggioranza dei record è detta classe negativa.
In dettaglio:
- True Positive (TP): il numero di casi positivi correttamente identificati dal modello;
- False Negative (FN): il numero di casi positivi erroneamente classificati come negativi dal modello;
- False Positive (FP): il numero di casi negativi erroneamente classificati come positivi dal modello;
- True Negative (TN): il numero di casi negativi correttamente identificati dal modello.
Predetto True | Predetto False | |
---|---|---|
Reale True | True Positive (TP) | False Negative (FN) |
Reale False | False Positive (FP) | True Negative (TN) |
Dalla matrice di confusione è possibile derivare altre metriche chiave da utilizzare nella valutazione di un modello di classificazione:
Accuratezza
L’accuratezza rappresenta la percentuale totale di predizioni corrette (sia positive che negative) rispetto al totale delle predizioni fatte. Questa è la misura più intuitiva delle prestazioni generali del modello. L’accuratezza non è una metrica adeguata nel caso in cui le classi siano sbilanciate.
Accuratezza = (TP + TN) / (TP + TN + FP + FN)
Precision
La precisione prende in considerazione solo gli esempi positivi. È calcolata come il rapporto tra i veri positivi e la somma dei veri positivi e dei falsi positivi. Misura la frazione di record risultati effettivamente positivi tra tutti quelli sono stati classificati come tali.
Precisione = TP / TP + FP
Recall
La metrica recall misura la capacità del modello di identificare tutti i casi rilevanti all’interno di un dataset, calcolando il rapporto tra i veri positivi e la somma dei veri positivi e dei falsi negativi. Misura la frazione di record positivi correttamente classificati.
Recall = TP / TP + FN
F1-Score
L’F1-score è la media armonica di precisione e recall. Questa metrica è particolarmente utile quando si vuole trovare un equilibrio tra precisione e recall, soprattutto se la distribuzione delle classi è sbilanciata.
F1-Score = 2 × ((PrecisionexRecall) / (Precisione+Recall))
Esempio di utilizzo della matrice di confusione
Per esempio, supponiamo di fare classificazione binaria per identificare se un email è spam o no. Dopo aver addestrato il modello su training set, lo valutiamo sul test set per determinare la sua efficacia. Utilizziamo una matrice di confusione per visualizzare le prestazioni del modello.
Ipotizziamo che il set di test contenga 1.000 email:
- 800 non spam;
- 200 spam.
In particolare, risultano:
- True Positive (TP): 160 – Il modello ha correttamente identificato 160 email come spam;
- False Negative (FN): 40 – Il modello ha mancato di identificare 40 email spam come tali.
- False Positive (FP): 40 – Il modello ha erroneamente classificato 40 email non spam come spam;
- True Negative (TN): 760 – Il modello ha correttamente identificato 760 email come non spam;
Predetto True | Predetto False | |
---|---|---|
Reale True | 160 (TP) | 40 (FN) |
Reale False | 40 (FP) | 760 (TN) |
Utilizziamo la matrice di confusione per calcolare alcune metriche chiave:
- Accuratezza: (TP + TN) / (TP + TN + FP + FN) = (160 + 760) / (160 + 760 + 40 + 40) = 0.92
- Precisione: TP / TP + FP = 160 / 160 + 40 = 0.8
- Recall: TP / TP + FN = 160 / 160 + 40 = 0.8
- F1-score: 2 × ((PrecisionxRecall) / (Precision+Recall)) = 2 × (( 0.8 x 0.8 ) / ( 0.8 + 0.8 )) = 0.8
Esempio di matrice di confusione in Python
Ecco adesso un esempio di come realizzare una matrice di confusione in Python, in particolare per valutare i risultati di un albero decisionale (ma applicabile a qualsiasi altro classificatore).
from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import confusion_matrix import matplotlib.pyplot as plt import seaborn as sns X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Modello di classificazione = albero di decisione model = DecisionTreeClassifier() model.fit(X_train, y_train) # Effettua le previsioni sul set di test y_pred = model.predict(X_test) # Genera la matrice di confusione cm = confusion_matrix(y_test, y_pred) # Visualizza la matrice di confusione sns.heatmap(cm, annot=True, fmt='d', cmap='Blues') plt.xlabel('Predicted') plt.ylabel('True') plt.title('Confusion Matrix for Decision Tree Classifier') plt.show()