Vai al contenuto principale

Precision vs Recall: la guida essenziale per il Machine Learning

L'accuracy non basta. Scopri la differenza tra precision e recall, comprendi il trade-off e scegli la metrica giusta per il tuo modello.
· 12 min leggi

Scopri con l'IA

Un modello di machine learning con il 98% di accuracy suona impressionante–ma lo è davvero? Quando hai a che fare con eventi rari come frodi o malattie, l'accuracy spesso crea un falso senso di sicurezza.

Qui entrano in gioco precision e recall. In questo articolo vedremo come queste due metriche vadano oltre la semplice accuracy per misurare non solo quanto spesso hai ragione, ma esattamente come sbagli.

Se vuoi andare oltre la teoria e padroneggiare la classificazione, il corso Fraud Detection in Python è il passo successivo perfetto.

Perché l'accuracy non basta

Nella maggior parte dei casi, l'accuracy è la metrica naturale usata per misurare quanto bene un modello statistico o di machine learning predice un certo label. Si calcola confrontando il numero di istanze correttamente previste con il numero totale di osservazioni. 

In generale, se un modello identifica costantemente il label corretto con alta accuracy, sta funzionando bene. Tuttavia, i dataset sbilanciati, in cui una classe contiene significativamente più campioni dell'altra, distorcono l'accuracy. Questi dataset sono comuni nel rilevamento delle frodi o nella diagnosi di malattie.

Supponiamo che un modello classifichi le frodi con un'accuracy del 98%. A prima vista, questo tasso sembra fantastico. Ma se la frode rappresenta solo il 2% delle transazioni nel dataset? In questo caso, un modello potrebbe scegliere sempre "non frode" e ottenere comunque quel 98% di accuracy senza intercettare alcuna frode, che non è ciò che vogliamo. 

Chiaramente, queste situazioni richiedono metriche più sfumate. Due metriche comunemente usate sono precision e recall. 

Cosa sono precision e recall?

Ecco la versione breve:

  • Precision (Qualità): misura quanto sono affidabili le tue predizioni positive. Se il modello dice "frode", è davvero frode?
  • Recall (Quantità): misura quanto bene hai catturato i casi positivi reali. Il modello ha intercettato tutte le frodi o alcune sono sfuggite?

Per capire come calcolare queste metriche, dobbiamo prima definire la terminologia usata in una confusion matrix.

True positive, false positive e negativi 

Considera una società di carte di credito che usa un modello di machine learning per rilevare transazioni fraudolente. Supponiamo che, su un campione di 10.000 transazioni, ci siano 9.800 transazioni legittime e 200 casi di frode.

Per misurare l'efficacia del modello, designa una tra "frode" o "non frode" come caso positivo e l'altra come caso negativo. Poiché i casi di frode sono quelli di interesse, etichettali come casi "positivi". (Questo, ovviamente, non implica che la frode sia positiva in senso etico; l'etichetta “positivo” indica solo quale caso ci interessa.)

Quando il modello viene eseguito, le transazioni con un punteggio di rischio sopra una certa soglia di probabilità, diciamo 70%, sono considerate frodi. I casi previsti come fraudolenti vengono confrontati con quelli che lo sono effettivamente.

Per tenere in ordine tutti questi dati, usiamo la seguente nomenclatura. 

  • True positives (TP): 160 casi di frode sono stati correttamente previsti come frode.
  • True negatives (TN): 9500 casi sono stati correttamente identificati come non frode.
  • False positives (FP): 300 casi sono stati segnalati erroneamente come frode.
  • False negatives (FN): 40 casi sono stati contrassegnati erroneamente come non frode.

La seconda lettera (P o N) indica se la previsione era positiva o negativa, e la prima lettera mostra se quella previsione era vera (T) o falsa (F). 

Un "falso positivo" indica che il sistema ha previsto il caso come positivo, ma in realtà era negativo. Ad esempio, un falso negativo è un caso che era previsto come negativo, ma in realtà è positivo.

Confusion matrix

Tutte queste informazioni sono comunemente visualizzate nella cosiddetta confusion matrix, che traccia quanto spesso il modello confonde previsioni sbagliate con risultati reali (FN, FP). La confusion matrix ci aiuta a distinguere tra ciò che il modello ha previsto e ciò che è realmente accaduto. La confusion matrix del nostro esempio è questa:

 

Frode reale (positivo reale)

Legittimo reale (negativo reale)

Frode predetta (positivo predetto)

160 (TP)

300 (FP)

Legittimo predetto (negativo predetto)

40 (FN)

9500 (TN)

Ora diamo un'occhiata ai totali per righe e colonne. Le somme di riga indicano i casi totali predetti e le somme di colonna indicano i totali reali.

 

Frode reale (positivo reale)

Legittimo reale (negativo reale)

 

Frode predetta (positivo predetto)

160 (TP)

300 (FP)

460 (TP + FP) Totale positivi predetti

Legittimo predetto (negativo predetto)

40 (FN)

9500 (TN)

9540 (FN + TN) Totale negativi predetti

 

200 (TP + FN) Totale positivi reali

9800 (FP + TN) Totale negativi reali

10.000

Cosa rappresentano questi totali?

  • Il totale della prima riga (460) rappresenta il numero totale di casi di frode predetti (TP + FP).
  • Il totale della seconda riga (9.540) rappresenta il numero totale di casi legittimi predetti (FN + TN).
  • Il totale della prima colonna (200) rappresenta il numero totale di casi di frode reali (TP + FN).
  • Il totale della seconda colonna (9.800) rappresenta il numero totale di casi legittimi reali (FP + TN).
  • Il totale complessivo (10.000) è pari alla dimensione totale del nostro campione.

Cos'è la precision?

Precision misura la qualità delle tue predizioni positive. Ci dice quante dei casi predetti come positivi erano effettivamente positivi. 

Un modello preciso significa avere pochissimi falsi allarmi. Se il modello dice che qualcosa è vero, con ogni probabilità lo è. Per esempio, se un gioco online banna qualcuno per cheating, deve essere vero. Troppi ban non meritati allontanano gli utenti legittimi e portano a recensioni negative. 

Nella terminologia vista sopra, la precision è pari al rapporto tra true positives e positivi predetti.

Precision.svg

Nell'esempio sopra, la precision è 160/460, ovvero circa il 34,8%.

Cos'è il recall?

Recall misura la copertura. Mostra quante dei positivi reali sono stati predetti come tali. È definito come il rapporto tra true positives e positivi reali totali.

Recall.svg

Pensa alle diagnosi di cancro per un primo follow-up. È meglio sbagliare per eccesso di diagnosi o per difetto? La maggior parte sarebbe d'accordo sulla prima opzione. 

Per lo screening precoce, ricevere un falso allarme può essere scioccante. Ma è catastrofico essere informati di non avere il cancro quando in realtà lo si ha, soprattutto considerando che potresti perdere un trattamento potenzialmente salvavita.

Nell'esempio sopra, il recall è 160/200, ovvero l'80%.

Il trade-off tra precision e recall

Tra precision e recall c'è un rapporto di tiro alla fune. Tipicamente, all'aumentare della precision il recall diminuisce, e viceversa.

Per capire perché, torniamo all'esempio sulle frodi. 

La maggior parte delle frodi è stata intercettata, ma ci sono stati molti falsi positivi. Diciamo che, a causa delle lamentele dei clienti, il management decide di aumentare la soglia decisionale da 0,7 a 0,8. Perché una transazione sia segnalata come frode, ora deve avere un punteggio di almeno 0,8 invece di 0,7.

Questo ha reso il modello più conservativo. Ha predetto la frode meno spesso. Meno transazioni sono state segnalate erroneamente come frode, ma al costo di più casi veramente fraudolenti sfuggiti. Dopo aver cambiato la soglia, il numero di falsi positivi è diminuito da 300 a 60, ma il numero di falsi negativi è aumentato da 40 a 80. 

La confusion matrix del nuovo modello è questa:

 

Frode reale (positivo reale)

Legittimo reale (negativo reale)

 

Frode predetta (positivo predetto)

120 (TP)

60 (FP)

180 (TP + FP) Totale positivi predetti

Legittimo predetto (negativo predetto)

80 (FN)

9740 (TN)

9820 (FN + TN) Totale negativi predetti

 

200 (TP + FN) Totale positivi reali

9800 (FP + TN) Totale negativi reali

10.000

Come possiamo vedere, 120 dei 180 casi di frode predetti erano effettivamente fraudolenti, quindi la precision è aumentata dal 34,8% al 66,7%. 

Il prezzo di questa maggiore precision sta in un recall ridotto: 120 su 200 casi fraudolenti sono stati predetti come tali, il che significa che il recall è sceso dall'80% iniziale all'attuale 60%.

Il modello ora intercetta complessivamente meno casi di frode, ma quando segnala una frode è molto più sicuro. Questo mostra l'importanza di bilanciare entrambe le metriche, cosa di cui parleremo più avanti. 

La precision-recall curve

Per visualizzare il trade-off tra precision e recall, i data scientist usano la Precision-Recall (PR) curve. 

Questo grafico riporta la precision sull'asse y e il recall sull'asse x per ogni possibile soglia decisionale (da 0 a 1). Abbassando la soglia per catturare più casi positivi (aumentando il recall), inevitabilmente segnali più falsi allarmi (riducendo la precision). 

Il modello "perfetto" raggiungerebbe l'angolo in alto a destra (100% di precision e recall), ma nella realtà devi scegliere un punto su questa curva che soddisfi i requisiti specifici del tuo business.

Nel nostro esempio sulle frodi, abbiamo un modello che restituisce un punteggio di frode per ogni transazione. Se il punteggio di una transazione è almeno pari alla soglia, allora viene segnalata come frode. Abbassando la soglia, otteniamo più positivi predetti, il che tipicamente cattura più veri positivi (aumento del recall) ma anche più falsi allarmi (diminuzione della precision).

Vediamo come potrebbe apparire tutto questo in pratica. Supponi che la tua azienda elabori 10.000 transazioni al giorno. Poiché il tasso di frode è stimato al 2%, ti aspetti 200 transazioni fraudolente al giorno. Supponi anche che il team antifrode possa esaminare 200 transazioni segnalate (positivi predetti) al giorno.

Valuti alcune soglie e trovi questi risultati:

  • Con una soglia di 0,9, ci sono 100 positivi predetti, con una precision di 0,8 (80 frodi reali, 20 falsi allarmi) e un recall di 0,4 (intercetti 80 casi di frode su 200). Stai sottoutilizzando la capacità perché segnali solo 100 al giorno mentre potresti esaminarne 200 al giorno. 
  • Con una soglia di 0,5, ci sono 500 positivi predetti, con una precision di 0,35 (175 frodi reali, 325 falsi allarmi) e un recall di 0,875 (intercetti 175 casi di frode su 200). A questa soglia, sei oltre la capacità, dato che non puoi esaminare 500 casi segnalati.
  • Con una soglia di 0,7, ci sono 200 positivi predetti, con una precision di 0,6 (120 frodi reali, 80 falsi allarmi) e un recall di 0,6 (intercetti 120 casi di frode su 200). Probabilmente userai questa soglia, poiché puoi sfruttare la piena capacità ottenendo al contempo un recall discreto di 0,6.

Precision-recall curve

La curva ti dice quanta precision puoi "comprare" a un dato tasso di recall (o viceversa).

Quando usare precision vs. recall

A causa del rapporto di trade-off tra precision e recall, la metrica corretta dipende dal tuo caso d'uso specifico.

Quando usare la precision

Esiste una relazione inversa tra precision e falsi positivi. Quindi, un modello preciso è quello che distingue correttamente tra true positives e false positives. È affidabile.

Ottimizza per la precision quando il costo di un falso positivo è elevato. Esempi di casi includono:

  • Azioni irreversibili: giustizia automatizzata o sistemi di ban degli account. Accusare un innocente o eliminare definitivamente l'account di un utente a causa di un errore del modello (False Positive) provoca danni irreparabili.
  • Interventi ad alto costo: perforazioni petrolifere o arresto di una linea di assemblaggio. Se agire su una predizione positiva costa milioni, devi essere sicuro che la predizione sia corretta prima di procedere.
  • Filtro antispam: caselle email. È fastidioso vedere un'email di spam (False Negative), ma è inaccettabile che un'importante offerta di lavoro finisca nella posta indesiderata (False Positive).

Quando usare il recall

Analogamente, c'è una relazione inversa tra recall e falsi negativi. Molti falsi negativi inducono un recall basso. Di conseguenza, un modello con alto recall distingue correttamente tra true positives e false negatives. È sicuro.

Se è più importante evitare di perdere un caso reale che accettare falsi allarmi, dovresti dare priorità al recall rispetto alla precision. Esempi d'uso includono:

  • Sicurezza medica: screening di malattie (ad esempio, cancro o sepsi). Perdere un paziente malato può essere fatale, mentre un falso allarme comporta ulteriori test, un costo tollerabile.
  • Cybersecurity: rilevamento di malware o intrusioni di rete. Meglio segnalare come sospetti alcuni accessi innocenti che lasciare che un singolo hacker violi il sistema senza essere rilevato.
  • Qualità manifatturiera: rilevamento dei difetti. Spedire un prodotto difettoso (False Negative) crea responsabilità di sicurezza e rovina la reputazione, quindi è meglio scartare alcuni pezzi al limite che lasciarne passare uno difettoso.

F1 score per bilanciare precision e recall

Se non sei sicuro se ottimizzare un modello per la precision o per il recall, o vuoi semplicemente tenerle entrambe in considerazione, puoi consultare l'F1 score. 

L'F1 Score è definito come la media armonica di precision e recall, ed è usato quando vuoi puntare a un equilibrio tra le due metriche. 

F1.svg

Se precision e recall sono uguali, l'F1 score è pari a quel valore. Se una delle due si avvicina a zero, però, anche l'F1 sarà molto basso.

Nell'esempio sopra, la precision è 66,7% e il recall è 60%. Usando la formula indicata sopra, otteniamo un F1 score di circa il 63,2%:

F1 example.svg

La seguente tabella confronta l'F1 score con accuracy, precision e recall.

Metrica

Domanda a cui risponde

Quando ottimizzare questa metrica

Esempi

Accuracy

"Con quale frequenza siamo corretti in generale?"

Le classi sono bilanciate e i costi di FP e FN sono simili.

Classificazione di cifre.

Precision

"Su tutti i positivi predetti, con quale frequenza abbiamo avuto ragione?"

Quando gli FP sono costosi, punitivi o creano disagi ai clienti.

Blocchi frodi, ban di utenti e azioni mediche invasive.

Recall

"Di tutti i positivi reali, quanti ne abbiamo segnalati?"

I falsi negativi sono inaccettabili.

Screening medico, rilevamento intrusioni.

F1

"Qual è l'equilibrio tra precision e recall?"

Ti interessano entrambi: positivi e falsi allarmi.

Selezione iniziale di modelli per problemi sbilanciati.

Calcolare precision e recall in Python

Ci sono molti modi per calcolare precision, recall e F1-score in Python. Di seguito presenterò due approcci: applicare direttamente le formule e usare le funzioni dedicate del pacchetto scikit-learn.

Calcolare precision e recall usando le formule

Se conosci i numeri della confusion matrix, puoi facilmente calcolare le metriche usando le loro formule presentate sopra.

# Confusion matrix numbers
TP = 120
FP = 60
FN = 80
TN = 9740

# Formulas
precision = TP / (TP + FP)
recall = TP / (TP + FN)
f1 = 2 * precision * recall / (precision + recall)

# Output
print(f"{'Precision':<10} {precision:.1%}")
print(f"{'Recall':<10} {recall:.1%}")
print(f"{'F1':<10} {f1:.1%}")
Precision	66.7%
Recall		60.0%
F1		63.2%

L'output di questo codice concorda con i nostri calcoli precedenti.

Calcolare precision e recall con scikit-learn

Puoi anche usare la libreria scikit-learn per calcolare le metriche direttamente dai dati. Nell'esempio seguente, simuliamo y_true e y_predicted. Calcoliamo poi la precision usando il metodo precision_score(y_true, y_false). Calcoliamo in modo analogo recall e F1 score. Infine, stampiamo i risultati.

import numpy as np
from sklearn.metrics import precision_score, recall_score, f1_score

# Simulate Data (y_true and y_pred)
TP, FP, FN, TN = 120, 60, 80, 9740
y_true = np.array(TP * [1] + FP * [0] + FN * [1] + TN * [0])
y_pred = np.array(TP * [1] + FP * [1] + FN * [0] + TN * [0])

# Compute metrics with scikit-learn
precision = precision_score(y_true, y_pred, zero_division=0)
recall = recall_score(y_true, y_pred, zero_division=0)
f1 = f1_score(y_true, y_pred, zero_division=0)

# Print aligned output using f-strings (no manual spaces, no colon)
print(f"{'Precision':<10} {precision:.1%}")
print(f"{'Recall':<10} {recall:.1%}")
print(f"{'F1':<10} {f1:.1%}")
Precision	66.7%
Recall		60.0%
F1		63.2%

Come previsto, questi numeri concordano con i nostri calcoli precedenti.

Conclusione

Sebbene l'accuracy sia un utile punto di partenza, spesso nasconde i dettagli necessari per capire perché un modello sta fallendo. Precision e recall ti offrono un quadro più chiaro obbligandoti a considerare il trade-off tra falsi allarmi e rilevamenti mancati. 

In definitiva, scegliere la metrica giusta non è solo un problema matematico; è una decisione pratica su quale tipo di errore il tuo sistema può permettersi di commettere.

Pronto a costruire i tuoi modelli di machine learning? Inizia oggi con il Machine Learning Fundamentals in Python skill track!

Precision vs Recall FAQ

Qual &egrave; la differenza tra recall e precision?

La precision misura la qualità delle tue predizioni positive. Ci dice quante dei casi predetti come positivi erano effettivamente positivi ed è definita come il rapporto tra true positives e positivi predetti.

Il recall misura la copertura. Mostra quante dei positivi reali sono stati predetti come tali. È definito come il rapporto tra true positives e positivi reali totali.

Quale metrica dovrei ottimizzare per ridurre i falsi positivi?

Precision. Una precision bassa indica che il modello sta segnalando troppi elementi come positivi che non lo sono.

Quale metrica dovrei ottimizzare per ridurre i falsi negativi?

Recall. Un recall basso indica che i positivi reali sfuggono.

Quale metrica conta di pi&ugrave; in una diagnosi medica?

Recall. Alcuni falsi allarmi possono essere tollerati se significano meno diagnosi mancate.

Quale metrica conta di pi&ugrave; in un filtro antispam?

Precision. Classificare erroneamente un'email come spam è fastidioso, ma perdere un'email importante è inaccettabile.

Mark Pedigo

Autore

Mark Pedigo

Mark Pedigo, PhD, è un affermato data scientist con competenze in data science per la sanità, programmazione e didattica. Con un dottorato in Matematica, una laurea in Informatica e un Professional Certificate in AI, Mark unisce conoscenze tecniche e problem solving pratico. La sua carriera comprende ruoli nella rilevazione delle frodi, nella previsione della mortalità infantile e nella previsione finanziaria, oltre a contributi al software di stima dei costi della NASA. Come docente, ha insegnato su DataCamp e alla Washington University di St. Louis e ha fatto da mentore a programmatori junior. Nel tempo libero, Mark si gode la natura del Minnesota con la moglie Mandy e il cane Harley e suona il pianoforte jazz.

Argomenti

Correlato