F1 Score nel Machine Learning: una metrica bilanciata tra precision e recall
Comprendi come l’F1 score valuta le prestazioni del modello combinando precision e recall. Scopri il suo utilizzo nella classificazione binaria e multiclasse, con esempi in Python.
Quando crei modelli basati sul ML, valutare le prestazioni del modello è importante quanto addestrarlo. Anche se l’accuracy è spesso la metrica predefinita, può essere fuorviante, soprattutto in dataset sbilanciati in cui una classe domina i dati.
L’F1 score è la media armonica di precision e recall. Bilancia il compromesso tra falsi positivi e falsi negativi e fornisce una misura più accurata delle prestazioni del modello.
In applicazioni come rilevamento di frodi, diagnosi medica, filtraggio dello spam e rilevamento dei guasti, la sola accuracy non basta a raccontare tutta la storia. Un modello può ottenere un’alta accuracy, ma se non riesce a rilevare casi critici rari, potrebbe fare più danni che benefici. L’F1 score copre questo rischio. Se sei ancora alle prime armi con le metriche di valutazione, potresti voler esplorare le basi in Machine Learning Fundamentals in Python prima di proseguire.
Cos’è l’F1 score?
L’F1 score misura l’equilibrio tra precision e recall per un modello. Va da 0 a 1, dove 1 indica precision e recall perfette e 0 implica prestazioni scarse.
La precision aiuta a valutare quante tra tutte le predizioni positive del modello erano corrette.
La recall è utile per analizzare quante istanze sono state classificate correttamente dal modello tra tutti i veri positivi.
L’F1 score combina entrambe in un unico valore, penalizzando i modelli che vanno bene in una ma non nell’altra. Per esempio, un modello con alta recall ma bassa precision può intercettare correttamente tutte le istanze positive, ma generare troppi falsi positivi. La misura F1 assicura che entrambe le componenti vengano considerate insieme.
Formula dell’F1 score e spiegazione
La formula dell’F1 score è:
Dove la precision è definita così:
E la formula della recall è:
Qui, TP = True Positives, FP = False Positives e FN = False Negatives.
La media armonica è usata al posto della media aritmetica perché la prima penalizza le grandi differenze. In caso di alta precision ma bassa recall (o viceversa), l’F1 score scenderà sensibilmente, riflettendo lo squilibrio.
F1 score vs accuracy
L’accuracy determina le predizioni corrette sul totale delle predizioni:
Pur essendo valida per set con classi bilanciate, l’accuracy è fuorviante in problemi con classi sbilanciate.
Esempio:
Se un sistema di filtraggio dello spam contiene il 90% di messaggi spam e il 10% di messaggi non spam, un classificatore ingenuo che classifica tutte le email come "spam" ottiene il 90% di accuracy ma non classifica mai correttamente le email non spam. Questo è inutile nella pratica.
Qui la misura F1 è più accurata, perché tiene conto del costo dei falsi positivi e dei falsi negativi, cosa che l’accuracy non fa.
F1 score per classificazione binaria e multiclasse
Classificazione binaria
Nella classificazione binaria, l’F1 score è calcolato rispetto alla classe positiva. Ad esempio, nei test medici, la classe positiva potrebbe rappresentare “malattia presente”.
Classificazione multiclasse
Nei problemi multiclasse, gli F1 score vengono estesi usando metodi di media:
Metodo
Descrizione
Idealeper
Macro
Calcola l’F1 in modo indipendente per ogni classe, poi fa la media.
Dataset bilanciati, stesso peso per tutte le classi.
Weighted
Fa la media degli F1 pesandoli per il supporto di classe (numero di campioni per classe).
Dataset sbilanciati.
Micro
Aggrega i contributi di tutte le classi per calcolare un F1 globale.
Situazioni in cui conta di più la performance complessiva.
Questa flessibilità rende l’F1 score applicabile a un’ampia varietà di problemi di classificazione.
Come calcolare l’F1 score in Python
La libreria scikit-learn include funzioni semplici per calcolare l’F1 score.
Esempio di classificazione binaria
Inizia valutando un semplice problema di classificazione binaria in cui le predizioni sono 0 o 1. La funzione f1_score() calcola direttamente l’F1 score usando le etichette vere e quelle predette.
from sklearn.metrics import f1_score
# True labels
y_true =[0,1,1,1,0,1,0,1]# Predicted labels
y_pred =[0,1,0,1,0,1,1,1]# Calculate F1 Scoreprint("F1 Score:",round(f1_score(y_true, y_pred, average='binary'),2))Offerto da
Poi puoi estendere lo stesso approccio ai problemi multiclasse, in cui il modello predice più di due classi. Il parametro average controlla come gli F1 vengono aggregati tra le classi: le opzioni comuni includono 'macro', 'micro' e 'weighted'.
Macro F1:0.65
Micro F1:0.67
Weighted F1:0.64
precision recall f1-score support
00.671.000.80210.500.330.40320.750.750.754
accuracy 0.679
macro avg 0.640.690.659
weighted avg 0.650.670.649Offerto da
Quando calcoliamo F1 o Fβ nella classificazione multiclasse o multilabel, dobbiamo decidere come fare la media dei punteggi tra le diverse classi. Il parametro average in scikit-learn offre alcune opzioni:
Binary si usa nel caso di due classi. Ci concentriamo sulla classe positiva e calcoliamo precision, recall e F1 principalmente per quella classe.
Micro prevede l’aggregazione dei contributi di tutte le classi e poi la media per calcolare la metrica media. In pratica, somma i veri positivi, i falsi negativi e i falsi positivi totali tra le classi e poi calcola precision, recall e F1 su queste somme. Il micro-averaging è utile per vedere le prestazioni complessive indipendentemente dallo sbilanciamento delle classi.
Macro: calcoliamo la metrica per ciascuna classe e poi facciamo la media non pesata. Questo non dà un trattamento proporzionale alle dimensioni delle classi ed è quindi ragionevole se tutte le classi sono di uguale importanza, anche se il dataset è sbilanciato.
Weighted è simile a macro, ma non assegna lo stesso peso a ogni classe. Pesa i punteggi in base al numero di istanze vere per classe. Questo implica che le classi più grandi contano di più nel punteggio finale. Il weighted averaging è utile quando cerchiamo una visione equilibrata senza ignorare la distribuzione delle classi.
Samples: si usa nei problemi multilabel, in cui un campione può appartenere a più di una classe. Qui la metrica è calcolata per ogni istanza e poi mediata su tutte le istanze.
Queste opzioni di mediazione ci permettono di adattare l’F1 o l’Fβ allo scenario del problema. Per esempio, se classifichiamo malattie rare per cui le classi minoritarie sono di primaria importanza, macro o Fβ con β > 1 sarebbero appropriati. Ma se cerchiamo l’accuratezza per classe su tutte le classi, il micro o il weighted averaging offrono un quadro migliore.
Per esigenze più sofisticate, scikit-learn fornisce anche fbeta_score(), che generalizza l’F1. Una comprensione più approfondita di questi strumenti fa parte del percorso di carriera Machine Learning Scientist in Python.
Generalizzare l’F1 score con l’Fβ score
L’Fβ score generalizza l’F1 score a seconda che la priorità sia la precision o la recall:
𝛃 > 1 dà più peso alla recall.
𝛃 < 1 mette maggior enfasi sulla precision.
Esempi
L’F2 score si applica alla diagnosi medica, dove mancare una malattia (falso negativo) è peggio di un falso allarme.
L’F0.5 score è preferibile nel filtraggio dello spam, dove i falsi positivi (scambiare email vere) sono più costosi.
Caso d’uso: rilevare il diabete con F1 vs accuracy
Supponiamo un dataset medico in cui solo il 5% dei pazienti ha effettivamente il diabete. Un modello addestrato per il rilevamento del diabete può avere un’accuracy del 95%. Ma questa accuracy del 95% può essere facilmente ottenuta prevedendo sempre "nessun diabete" per tutti, rendendo questo modello inutile.
Invece, usiamo l’F1 score per misurare il modello.
from sklearn.metrics import f1_score, fbeta_score, confusion_matrix
# Suppose these are results from a diabetes detection model
y_true =[0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1]# true outcomes
y_pred =[0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1]# model predictionsprint("Accuracy:",round((sum([yt == yp for yt, yp inzip(y_true, y_pred)])/len(y_true)),2))print("F1 Score:",round(f1_score(y_true, y_pred),2))print("F2 Score (recall-focused):",round(fbeta_score(y_true, y_pred, beta=2),2))Offerto da
Accuracy:0.88
F1 Score:0.8
F2 Score (recall-focused):0.71Offerto da
Perché scegliere F1 o F2 in questo caso?
L’accuracy è fuorviante a causa del forte sbilanciamento delle classi.
L’F1 score assicura che siano considerati sia i falsi positivi (classificare erroneamente pazienti sani come diabetici) sia i falsi negativi (non diagnosticare il diabete).
In questo caso d’uso, la recall è preziosa perché una diagnosi mancata può cambiare la vita. L’F2 score è quindi più appropriato, poiché dà maggiore peso alla recall.
Questo mostra come la famiglia di metriche F1 fornisca una misura più pratica e utile dell’accuracy nei casi d’uso clinici.
Punti chiave
L’F1 score ci ricorda che la valutazione dei modelli non è solo una questione di numeri. Si tratta di capire i compromessi dietro ogni predizione. Questo è importante perché nelle applicazioni reali, mancare un caso critico può avere conseguenze serie.
Mentre continui a costruire e perfezionare i modelli, sviluppare un’intuizione per metriche come l’F1 ti aiuterà a fare scelte più consapevoli del contesto sulle prestazioni. Per approfondire l’applicazione di questi concetti a dataset reali, dai un’occhiata al percorso di carriera Machine Learning Scientist with Python, dove imparerai a valutare, ottimizzare e distribuire modelli in modo efficace in una varietà di casi d’uso.
Sono una stratega ed eticista dell’AI che lavora all’intersezione tra data science, prodotto e ingegneria per creare sistemi di machine learning scalabili. Inserita tra i "Top 200 Business and Technology Innovators" al mondo, ho la missione di democratizzare il machine learning e di eliminare il gergo tecnico affinché tutti possano partecipare a questa trasformazione.
FAQ
Qual è l’importanza dell’F1 score nel machine learning?⌄
L’F1 score è la media armonica di precision (quante predizioni positive erano corrette) e recall (quante effettive positive sono state rilevate). Fornisce una singola metrica che riflette entrambi i tipi di errore.
Perché l’F1 score è preferito all’accuracy in dataset sbilanciati?⌄
L’accuracy può essere fuorviante quando una classe domina i dati, perché un modello può prevedere bene la classe maggioritaria ma fallire su quella minoritaria. L’F1 score considera sia falsi positivi sia falsi negativi, offrendo una valutazione più equa in questi casi.
Qual è la differenza tra F1 e Fβ?⌄
L’F1 score pesa allo stesso modo precision e recall, mentre l’Fβ consente di regolare quell’equilibrio. Per esempio, F2 dà più peso alla recall (utile nella diagnosi medica) e F0.5 favorisce la precision (utile nel rilevamento dello spam).
Qual è un buon valore di F1 score?⌄
Un F1 score vicino a 1 indica forte precision e recall. Cosa sia “buono” dipende dal dominio. Per esempio, 0,8 può essere eccellente in sanità ma basso nel rilevamento dello spam.
Come posso calcolare l’F1 score in Python?⌄
L’F1 score può essere calcolato facilmente con la funzione f1_score() di scikit-learn. Supporta impostazioni binarie, multiclasse e multilabel con un parametro average per diverse strategie di aggregazione.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Quando crei modelli basati sul ML, valutare le prestazioni del modello è importante quanto addestrarlo. Anche se l’accuracy è spesso la metrica predefinita, può essere fuorviante, soprattutto in dataset sbilanciati in cui una classe domina i dati.
L’F1 score è la media armonica di precision e recall. Bilancia il compromesso tra falsi positivi e falsi negativi e fornisce una misura più accurata delle prestazioni del modello.
In applicazioni come rilevamento di frodi, diagnosi medica, filtraggio dello spam e rilevamento dei guasti, la sola accuracy non basta a raccontare tutta la storia. Un modello può ottenere un’alta accuracy, ma se non riesce a rilevare casi critici rari, potrebbe fare più danni che benefici. L’F1 score copre questo rischio. Se sei ancora alle prime armi con le metriche di valutazione, potresti voler esplorare le basi in Machine Learning Fundamentals in Python prima di proseguire.
Cos’è l’F1 score?
L’F1 score misura l’equilibrio tra precision e recall per un modello. Va da 0 a 1, dove 1 indica precision e recall perfette e 0 implica prestazioni scarse.
L’F1 score combina entrambe in un unico valore, penalizzando i modelli che vanno bene in una ma non nell’altra. Per esempio, un modello con alta recall ma bassa precision può intercettare correttamente tutte le istanze positive, ma generare troppi falsi positivi. La misura F1 assicura che entrambe le componenti vengano considerate insieme.
Formula dell’F1 score e spiegazione
La formula dell’F1 score è:
Dove la precision è definita così:
E la formula della recall è:
Qui, TP = True Positives, FP = False Positives e FN = False Negatives.
La media armonica è usata al posto della media aritmetica perché la prima penalizza le grandi differenze. In caso di alta precision ma bassa recall (o viceversa), l’F1 score scenderà sensibilmente, riflettendo lo squilibrio.
F1 score vs accuracy
L’accuracy determina le predizioni corrette sul totale delle predizioni:
Pur essendo valida per set con classi bilanciate, l’accuracy è fuorviante in problemi con classi sbilanciate.
Esempio:
Se un sistema di filtraggio dello spam contiene il 90% di messaggi spam e il 10% di messaggi non spam, un classificatore ingenuo che classifica tutte le email come "spam" ottiene il 90% di accuracy ma non classifica mai correttamente le email non spam. Questo è inutile nella pratica.
Qui la misura F1 è più accurata, perché tiene conto del costo dei falsi positivi e dei falsi negativi, cosa che l’accuracy non fa.
F1 score per classificazione binaria e multiclasse
Classificazione binaria
Nella classificazione binaria, l’F1 score è calcolato rispetto alla classe positiva. Ad esempio, nei test medici, la classe positiva potrebbe rappresentare “malattia presente”.
Classificazione multiclasse
Nei problemi multiclasse, gli F1 score vengono estesi usando metodi di media:
Metodo
Descrizione
Ideale per
Macro
Calcola l’F1 in modo indipendente per ogni classe, poi fa la media.
Dataset bilanciati, stesso peso per tutte le classi.
Weighted
Fa la media degli F1 pesandoli per il supporto di classe (numero di campioni per classe).
Dataset sbilanciati.
Micro
Aggrega i contributi di tutte le classi per calcolare un F1 globale.
Situazioni in cui conta di più la performance complessiva.
Questa flessibilità rende l’F1 score applicabile a un’ampia varietà di problemi di classificazione.
Come calcolare l’F1 score in Python
La libreria
scikit-learninclude funzioni semplici per calcolare l’F1 score.Esempio di classificazione binaria
Inizia valutando un semplice problema di classificazione binaria in cui le predizioni sono 0 o 1. La funzione
f1_score()calcola direttamente l’F1 score usando le etichette vere e quelle predette.Esempio di classificazione multiclasse
Poi puoi estendere lo stesso approccio ai problemi multiclasse, in cui il modello predice più di due classi. Il parametro
averagecontrolla come gli F1 vengono aggregati tra le classi: le opzioni comuni includono'macro','micro'e'weighted'.Quando calcoliamo
F1oFβnella classificazione multiclasse o multilabel, dobbiamo decidere come fare la media dei punteggi tra le diverse classi. Il parametro average in scikit-learn offre alcune opzioni:Binary si usa nel caso di due classi. Ci concentriamo sulla classe positiva e calcoliamo
precision,recalleF1principalmente per quella classe.Micro prevede l’aggregazione dei contributi di tutte le classi e poi la media per calcolare la metrica media. In pratica, somma i veri positivi, i falsi negativi e i falsi positivi totali tra le classi e poi calcola precision, recall e F1 su queste somme. Il micro-averaging è utile per vedere le prestazioni complessive indipendentemente dallo sbilanciamento delle classi.
Macro: calcoliamo la metrica per ciascuna classe e poi facciamo la media non pesata. Questo non dà un trattamento proporzionale alle dimensioni delle classi ed è quindi ragionevole se tutte le classi sono di uguale importanza, anche se il dataset è sbilanciato.
Weighted è simile a macro, ma non assegna lo stesso peso a ogni classe. Pesa i punteggi in base al numero di istanze vere per classe. Questo implica che le classi più grandi contano di più nel punteggio finale. Il weighted averaging è utile quando cerchiamo una visione equilibrata senza ignorare la distribuzione delle classi.
Samples: si usa nei problemi multilabel, in cui un campione può appartenere a più di una classe. Qui la metrica è calcolata per ogni istanza e poi mediata su tutte le istanze.
Queste opzioni di mediazione ci permettono di adattare l’F1 o l’Fβ allo scenario del problema. Per esempio, se classifichiamo malattie rare per cui le classi minoritarie sono di primaria importanza, macro o Fβ con β > 1 sarebbero appropriati. Ma se cerchiamo l’accuratezza per classe su tutte le classi, il micro o il weighted averaging offrono un quadro migliore.
Per esigenze più sofisticate, scikit-learn fornisce anche
fbeta_score(), che generalizza l’F1. Una comprensione più approfondita di questi strumenti fa parte del percorso di carriera Machine Learning Scientist in Python.Generalizzare l’F1 score con l’Fβ score
L’Fβ score generalizza l’F1 score a seconda che la priorità sia la precision o la recall:
Esempi
Caso d’uso: rilevare il diabete con F1 vs accuracy
Supponiamo un dataset medico in cui solo il 5% dei pazienti ha effettivamente il diabete. Un modello addestrato per il rilevamento del diabete può avere un’accuracy del 95%. Ma questa accuracy del 95% può essere facilmente ottenuta prevedendo sempre "nessun diabete" per tutti, rendendo questo modello inutile.
Invece, usiamo l’F1 score per misurare il modello.
Perché scegliere F1 o F2 in questo caso?
In questo caso d’uso, la recall è preziosa perché una diagnosi mancata può cambiare la vita. L’F2 score è quindi più appropriato, poiché dà maggiore peso alla recall.
Questo mostra come la famiglia di metriche F1 fornisca una misura più pratica e utile dell’accuracy nei casi d’uso clinici.
Punti chiave
L’F1 score ci ricorda che la valutazione dei modelli non è solo una questione di numeri. Si tratta di capire i compromessi dietro ogni predizione. Questo è importante perché nelle applicazioni reali, mancare un caso critico può avere conseguenze serie.
Mentre continui a costruire e perfezionare i modelli, sviluppare un’intuizione per metriche come l’F1 ti aiuterà a fare scelte più consapevoli del contesto sulle prestazioni. Per approfondire l’applicazione di questi concetti a dataset reali, dai un’occhiata al percorso di carriera Machine Learning Scientist with Python, dove imparerai a valutare, ottimizzare e distribuire modelli in modo efficace in una varietà di casi d’uso.