Metriche
Scorri per mostrare il menu
Fino a questo punto, è stata utilizzata l'accuratezza come principale metrica per valutare le prestazioni del modello. Tuttavia, l'accuratezza presenta alcune limitazioni. Verranno ora discussi i suoi svantaggi e introdotte diverse metriche aggiuntive - basate su TP, TN, FP e FN - che aiutano a risolvere questi problemi.
Accuratezza
L'accuratezza rappresenta la proporzione di previsioni corrette:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNTuttavia, l'accuratezza presenta delle limitazioni. Ad esempio, immagina di dover prevedere se un paziente ha una malattia rara. Il dataset contiene 99,9% di pazienti sani e solo 0,1% con la malattia. In questo caso, prevedere sempre che il paziente sia sano porterebbe a un'accuratezza di 0,999 – anche se un modello del genere sarebbe completamente inutile.
Dataset di questo tipo sono detti sbilanciati e, in questi casi, la balanced accuracy è una metrica migliore da utilizzare.
Balanced accuracy
La balanced accuracy calcola separatamente la proporzione di predizioni positive corrette e la proporzione di predizioni negative corrette, quindi le media. Questo approccio attribuisce uguale importanza a ciascuna classe, indipendentemente da quanto il dataset sia sbilanciato.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNDove
- P=TP+FN - numero totale di istanze positive (classe 1);
- N=TN+FP - numero totale di istanze negative (classe 0).
Nell'esempio della malattia rara, la balanced accuracy di un modello che prevede sempre "sano" sarebbe 0,5 – evidenziando efficacemente il problema. Quindi, questo problema viene affrontato.
Tuttavia, la balanced accuracy ancora non distingue tra errori di tipo 1 ed errori di tipo 2 – proprio come l'accuratezza tradizionale. È qui che entrano in gioco precision e recall.
Precision
La metrica precision indica quante delle istanze che il modello ha previsto come positive erano effettivamente positive. È la proporzione di veri positivi sul totale delle previsioni positive effettuate dal modello:
precision=TP+FPTPUtilizzando la metrica precision, è possibile comprendere con quale frequenza si verifica un errore di tipo 1. Un valore elevato di precision indica che gli errori di tipo 1 sono rari, mentre un valore basso suggerisce che tali errori sono frequenti.
Recall
La metrica recall mostra la proporzione di casi positivi reali che il modello ha previsto correttamente:
recall=TP+FNTPLa metrica recall aiuta a comprendere con quale frequenza si verifica un errore di tipo 2. Un valore elevato di recall indica che gli errori di tipo 2 sono rari, mentre un valore basso significa che si verificano frequentemente.
Tuttavia, sia la precision che la recall presentano delle limitazioni. Ad esempio, un modello che predice solo la classe positiva (1) otterrà un recall perfetto, ma la sua precision sarà scarsa. Al contrario, un modello che predice correttamente solo un'istanza positiva e classifica tutto il resto come negativo avrà una precision perfetta, ma una recall pessima.
Questo dimostra che, sebbene sia facile costruire un modello con precision perfetta o recall perfetta, è molto più difficile crearne uno che abbia buoni risultati in entrambe. Per questo motivo è importante considerare entrambe le metriche – e fortunatamente esiste una metrica che le combina.
F1 Score
L'F1 score è la media armonica di precision e recall. La media armonica è preferita rispetto alla media aritmetica perché penalizza le situazioni in cui uno dei valori (precision o recall) è basso, rendendola una misura più equilibrata delle prestazioni di un modello.
F1=precision1+recall12=precision+recall2⋅precision⋅recallL'F1 score combina sia precision che recall in un'unica metrica. Sarà elevato solo se sia precision che recall sono relativamente alti, rendendolo una misura utile quando è necessario bilanciare entrambi i tipi di errore.
La scelta della metrica appropriata dipende dal compito specifico. Accuratezza (o accuratezza bilanciata per dataset sbilanciati) è intuitiva e fornisce una valutazione generale delle prestazioni complessive del modello. Se è necessario un approfondimento sui tipi di errori commessi dal modello, la precisione aiuta a identificare gli errori di tipo 1, mentre il recall evidenzia gli errori di tipo 2. Il punteggio F1 mostra quanto il modello sia bilanciato rispetto agli errori di tipo 1 e di tipo 2.
Un'altra metrica comunemente utilizzata è ROC/AUC, di cui puoi leggere nell' questo articolo.
Metriche in Python
Scikit-learn fornisce implementazioni per tutte queste metriche nel modulo sklearn.metrics:
from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score
accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
Se si desidera ottenere metriche come precision, recall e F1-score tutte insieme, sklearn mette a disposizione la funzione classification_report():
12345678910111213import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
Support indica il numero di occorrenze effettive di ciascuna classe nel set di test. Macro avg calcola la media di ciascuna metrica (precision, recall, F1) su tutte le classi in modo uguale, senza considerare lo sbilanciamento tra le classi. Weighted avg calcola la media delle metriche su tutte le classi, ma attribuisce un peso maggiore alle classi con più istanze (in base al loro support).
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione