F1-Score
L'F1-score è la media armonica di precisione e richiamo, quindi rimane basso a meno che entrambi non siano elevati. Formula, F-beta, F1 macro rispetto a micro e uso nel rilevamento.
Il punteggio F1 è un'unica metrica che combina precisione e richiamo come media armonica: F1 = 2 × precisione × richiamo / (precisione + richiamo). Varia da 0 a 1 e raggiunge 1 solo quando un modello non ha falsi positivi né falsi negativi. La media armonica tende verso il valore più basso dei suoi input, quindi F1 rimane basso quando precisione o richiamo sono bassi; per questo è la misura riepilogativa più usata nei problemi sbilanciati, come il rilevamento dei difetti, il controllo delle frodi e il recupero di documenti, in cui l'accuratezza è fuorviante. Il punteggio F1 è chiamato anche punteggio F bilanciato o misura F e, nelle maschere binarie di pixel, corrisponde al coefficiente Dice.
Come si calcola il punteggio F1#
Espresso usando i conteggi della matrice di confusione, F1 = 2TP / (2TP + FP + FN). I veri negativi non compaiono mai nella formula, quindi F1 misura solo la capacità del modello di gestire la classe positiva. È adatto alle attività in cui gli esempi positivi sono rari e quelli negativi sono poco interessanti; quando invece i veri negativi sono importanti, il coefficiente di correlazione di Matthews o l'accuratezza bilanciata coprono tutte e quattro le celle. Ciò che distingue F1 da una semplice media è la media armonica: un modello con precisione pari a 1.0 e richiamo pari a 0.1 ha una media aritmetica di 0.55 e un F1 di 0.18.
F-beta e medie multiclasse#
F1 attribuisce lo stesso peso a precisione e richiamo. Il punteggio F-beta generale considera il richiamo β volte più importante della precisione; F2 privilegia quindi il richiamo, come nello screening medico, dove non rilevare un caso è costoso, mentre F0.5 privilegia la precisione, come nel filtraggio dello spam, dove un falso allarme è costoso.
Con più di due classi, F1 viene calcolato per ogni classe e poi mediato:
- F1 macro: la media non ponderata dei punteggi per classe, perciò una classe rara conta quanto una classe comune.
- F1 ponderato: la media dei punteggi per classe ponderata in base al numero di esempi reali di ogni classe.
- F1 micro: un unico F1 calcolato aggregando TP, FP e FN di tutte le classi. Nelle attività multiclasse con etichetta singola equivale all'accuratezza.
from sklearn.metrics import f1_score
# Imbalanced inspection labels: 8 good parts, 2 defective parts
y_true = ["ok"] * 8 + ["defect"] * 2
y_pred = ["ok"] * 7 + ["defect"] + ["defect", "ok"]
# F1 for each class, then two ways to average them
per_class = f1_score(y_true, y_pred, labels=["ok", "defect"], average=None)
print(f"F1 ok: {per_class[0]:.3f}, F1 defect: {per_class[1]:.3f}")
print(f"Macro F1: {f1_score(y_true, y_pred, average='macro'):.3f}")
print(f"Micro F1: {f1_score(y_true, y_pred, average='micro'):.3f}")Lo script stampa un F1 di 0.875 per i pezzi conformi e di 0.500 per i difetti, un F1 macro di 0.688 e un F1 micro di 0.800. Il modello etichetta correttamente 8 pezzi su 10, quindi l'F1 micro equivale alla sua accuratezza di 0.80; l'F1 macro è più basso perché la classe dei difetti, meno performante, conta quanto la classe maggioritaria.
F1 nel rilevamento di oggetti#
Un rilevatore ha valori di precisione e richiamo per ogni soglia di confidenza, quindi anche una curva F1 al variare della confidenza. Il picco della curva indica la soglia di confidenza che bilancia al meglio i falsi rilevamenti e gli oggetti mancati, ovvero il singolo punto operativo in cui opera un modello in produzione. La metrica F1 affianca la precisione media (mAP), che integra i risultati su tutte le soglie per ordinare i modelli. Per YOLO26, la validazione salva questa curva come BoxF1_curve.png e riporta precisione, richiamo e F1 per classe alla soglia di confidenza in cui la F1 media raggiunge il picco.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validation sweeps confidence thresholds and saves BoxF1_curve.png
metrics = model.val(data="coco8.yaml")
# Precision, recall, and F1 at the confidence where mean F1 peaks
print(f"Precision: {metrics.box.mp:.3f}")
print(f"Recall: {metrics.box.mr:.3f}")
print(f"Mean F1: {metrics.box.f1.mean():.3f}")L'F1 medio calcola la media dei valori di F1 per classe, quindi può differire leggermente dalla media armonica di precisione media e richiamo medio riportati sopra.










