Metriche
Fino a questo punto, abbiamo utilizzato l'accuratezza come principale metrica per valutare le prestazioni del modello. Tuttavia, l'accuratezza presenta alcune limitazioni. Discutiamo ora i suoi svantaggi e introduciamo 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:
accuratezza=corrette+erratecorrette=TP+TN+FP+FNTP+TNTuttavia, l'accuratezza presenta dei limiti. Ad esempio, immagina di dover prevedere se un paziente ha una malattia rara. Il dataset contiene il 99,9% di pazienti sani e solo lo 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, l'accuratezza bilanciata rappresenta una metrica più adeguata.
Accuratezza bilanciata
L'accuratezza bilanciata 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 positive (classe 0).
Nell'esempio della malattia rara, l'accuratezza bilanciata di un modello che predice sempre "sano" sarebbe 0,5 - evidenziando efficacemente il problema. Quindi, questo problema viene affrontato.
Tuttavia, l'accuratezza bilanciata non distingue ancora tra errori di tipo 1 ed errori di tipo 2 - proprio come l'accuratezza tradizionale. Qui entrano in gioco precisione e recall.
Precisione
La metrica della precisione indica quante delle istanze che il modello ha previsto come positive erano effettivamente positive. È la proporzione di predizioni positive corrette sul totale delle predizioni positive effettuate dal modello:
precision=TP+FPTPUtilizzando la metrica di precisione, è possibile comprendere con quale frequenza si verifica un errore di tipo 1. Un'elevata precisione indica che gli errori di tipo 1 sono rari, mentre una bassa precisione suggerisce che tali errori si verificano frequentemente.
Richiamo
La metrica di richiamo mostra la proporzione di casi positivi reali che il modello ha previsto correttamente:
recall=precision=TP+FNTPLa metrica di richiamo aiuta a comprendere con quale frequenza si verifica un errore di tipo 2. Un alto richiamo indica che gli errori di tipo 2 sono rari, mentre un basso richiamo significa che si verificano frequentemente.
Tuttavia, sia la precisione che il richiamo presentano delle limitazioni. Ad esempio, un modello che prevede solo la classe positiva (1) otterrà un richiamo perfetto, ma la sua precisione sarà scarsa. Al contrario, un modello che prevede correttamente solo un'istanza positiva e classifica tutto il resto come negativo avrà una precisione perfetta, ma un richiamo pessimo.
Questo dimostra che, sebbene sia facile costruire un modello con precisione perfetta o richiamo perfetto, è molto più difficile realizzarne uno che si comporti bene su entrambi i fronti. 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 precisione e richiamo. La media armonica è preferita rispetto alla media aritmetica perché penalizza le situazioni in cui uno dei valori (precisione o richiamo) è basso, rendendola una misura più bilanciata delle prestazioni di un modello.
F1=precision1+recall12=precision+recall2⋅precision⋅recallL'F1 score combina sia precisione che richiamo in un'unica metrica. Sarà elevato solo se entrambi i valori sono relativamente alti, risultando 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 visione generale delle prestazioni complessive del modello. Se è necessario un approfondimento sui tipi di errore commessi dal modello, la precisione aiuta a identificare gli errori di tipo 1, mentre il richiamo evidenzia gli errori di tipo 2. L'F1 score mostra quanto il modello sia bilanciato rispetto agli errori di tipo 1 e 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 desideri 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))
Supporto si riferisce al numero di occorrenze effettive di ciascuna classe nel set di test. Macro avg calcola la media di ciascuna metrica (precisione, richiamo, F1) su tutte le classi in modo uguale, senza considerare lo squilibrio tra le classi. Weighted avg calcola anch'essa la media delle metriche su tutte le classi, ma attribuisce un peso maggiore alle classi con più istanze (in base al loro supporto).
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
Can you explain the difference between precision and recall in more detail?
When should I use F1 score instead of accuracy?
How do I interpret the classification report output in scikit-learn?
Awesome!
Completion rate improved to 4.17
Metriche
Scorri per mostrare il menu
Fino a questo punto, abbiamo utilizzato l'accuratezza come principale metrica per valutare le prestazioni del modello. Tuttavia, l'accuratezza presenta alcune limitazioni. Discutiamo ora i suoi svantaggi e introduciamo 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:
accuratezza=corrette+erratecorrette=TP+TN+FP+FNTP+TNTuttavia, l'accuratezza presenta dei limiti. Ad esempio, immagina di dover prevedere se un paziente ha una malattia rara. Il dataset contiene il 99,9% di pazienti sani e solo lo 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, l'accuratezza bilanciata rappresenta una metrica più adeguata.
Accuratezza bilanciata
L'accuratezza bilanciata 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 positive (classe 0).
Nell'esempio della malattia rara, l'accuratezza bilanciata di un modello che predice sempre "sano" sarebbe 0,5 - evidenziando efficacemente il problema. Quindi, questo problema viene affrontato.
Tuttavia, l'accuratezza bilanciata non distingue ancora tra errori di tipo 1 ed errori di tipo 2 - proprio come l'accuratezza tradizionale. Qui entrano in gioco precisione e recall.
Precisione
La metrica della precisione indica quante delle istanze che il modello ha previsto come positive erano effettivamente positive. È la proporzione di predizioni positive corrette sul totale delle predizioni positive effettuate dal modello:
precision=TP+FPTPUtilizzando la metrica di precisione, è possibile comprendere con quale frequenza si verifica un errore di tipo 1. Un'elevata precisione indica che gli errori di tipo 1 sono rari, mentre una bassa precisione suggerisce che tali errori si verificano frequentemente.
Richiamo
La metrica di richiamo mostra la proporzione di casi positivi reali che il modello ha previsto correttamente:
recall=precision=TP+FNTPLa metrica di richiamo aiuta a comprendere con quale frequenza si verifica un errore di tipo 2. Un alto richiamo indica che gli errori di tipo 2 sono rari, mentre un basso richiamo significa che si verificano frequentemente.
Tuttavia, sia la precisione che il richiamo presentano delle limitazioni. Ad esempio, un modello che prevede solo la classe positiva (1) otterrà un richiamo perfetto, ma la sua precisione sarà scarsa. Al contrario, un modello che prevede correttamente solo un'istanza positiva e classifica tutto il resto come negativo avrà una precisione perfetta, ma un richiamo pessimo.
Questo dimostra che, sebbene sia facile costruire un modello con precisione perfetta o richiamo perfetto, è molto più difficile realizzarne uno che si comporti bene su entrambi i fronti. 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 precisione e richiamo. La media armonica è preferita rispetto alla media aritmetica perché penalizza le situazioni in cui uno dei valori (precisione o richiamo) è basso, rendendola una misura più bilanciata delle prestazioni di un modello.
F1=precision1+recall12=precision+recall2⋅precision⋅recallL'F1 score combina sia precisione che richiamo in un'unica metrica. Sarà elevato solo se entrambi i valori sono relativamente alti, risultando 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 visione generale delle prestazioni complessive del modello. Se è necessario un approfondimento sui tipi di errore commessi dal modello, la precisione aiuta a identificare gli errori di tipo 1, mentre il richiamo evidenzia gli errori di tipo 2. L'F1 score mostra quanto il modello sia bilanciato rispetto agli errori di tipo 1 e 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 desideri 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))
Supporto si riferisce al numero di occorrenze effettive di ciascuna classe nel set di test. Macro avg calcola la media di ciascuna metrica (precisione, richiamo, F1) su tutte le classi in modo uguale, senza considerare lo squilibrio tra le classi. Weighted avg calcola anch'essa la media delle metriche su tutte le classi, ma attribuisce un peso maggiore alle classi con più istanze (in base al loro supporto).
Grazie per i tuoi commenti!