Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Metriche | Confronto tra Modelli
Classificazione con Python

bookMetriche

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=correttecorrette+errate=TP+TNTP+TN+FP+FN\text{accuratezza} = \frac{\text{corrette}}{\text{corrette} + \text{errate}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Tuttavia, 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_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Dove

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} - numero totale di istanze positive (classe 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{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=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Utilizzando 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=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

La 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=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

L'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.

Note
Approfondisci

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():

12345678910111213
import 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))
copy
Note
Nota

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).

question mark

Quale metrica di valutazione fornisce un equilibrio tra precisione e richiamo, offrendo un unico punteggio che riflette entrambi?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

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

bookMetriche

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=correttecorrette+errate=TP+TNTP+TN+FP+FN\text{accuratezza} = \frac{\text{corrette}}{\text{corrette} + \text{errate}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Tuttavia, 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_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Dove

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} - numero totale di istanze positive (classe 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{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=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Utilizzando 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=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

La 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=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

L'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.

Note
Approfondisci

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():

12345678910111213
import 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))
copy
Note
Nota

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).

question mark

Quale metrica di valutazione fornisce un equilibrio tra precisione e richiamo, offrendo un unico punteggio che riflette entrambi?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 2
some-alt