Introduzione
I modelli di Machine Learning forniscono sempre delle previsioni che hanno un carattere probabilistico. Anche quando riportiamo dei risultati in forma assoluta (es: la diagnosi fornita dal modello è positiva, vi è la malattia) dobbiamo ricordarci che, dietro le quinte, il modello ha fornito una probabilità superiore ad una soglia che abbiamo fissato, e, in base a questa soglia, abbiamo deciso che il modello ha detto: "SI"
Ovviamente, non possiamo attenderci che il modello produca sempre risultati corretti. Anche se ci limitiamo alla valutazione su un insieme di dati di test, in generale su molti di questi dati il modello fornirà una previsione corretta, ma su alcuni, si spera pochi, produrrà una previsione sbagliata.
E' importante misurare le prestazioni del modello. Soltanto quanto si misura si può migliorare.
Ma esistono differenti metriche utilizzabili per quantificare la "bontà di un modello. Alcune sono più "a grana larga", altre consentono di tenere sotto controllo alcuni aspetti di maggior dettaglio.
Esaminiamo le varie metriche dandone la definizione. Chiariamo la loro utilità e gli eventuali limiti.
Le metriche
Le metriche che esaminerò sono:
- Accuratezza
- Matrice di confusione
- Precision e Recall
- F1_SCORE
Settiamo lo scenario
Nel seguito mi limiterò, per semplicità, a considerare un modello di classificazione binaria. Quindi la predizione può cadere in una di due sole classi (0,1).
Accuratezza
L'accuratezza è definita come la frazione dell'insieme di dati di test su di cui il modello fornisce una previsione corretta. E' per definizione un numero compreso tra 0 ed 1. A volte è espressa in percentuale.
ACC = # di previsioni corrette/ # di campioni nell'insieme di test (1)
Un'accuratezza pari a 0.98 vuol dire che, su 100 campioni, il nostro modello fornisce previsioni sbagliate soltanto su 2 campioni.
L'accuratezza è sicuramente una prima metrica da prendere in considerazione. Un'accuratezza troppo bassa, per il caso d'uso in esame, rende il modello poco o per nulla adatto. E, spesso, nello sviluppo di un nuovo modello si ha a disposizione un modello di confronto, un "benchmark", la cui accuratezza dobbiamo superare. Ad esempio, nel caso di un modello di classificazione binaria sicuramente l'accuratezza del nostro modello deve essere superiore al 50% (la prestazione del modello banale, in cui si tira una moneta e si decide: TESTA = SI).
Ma l'accuratezza non distingue tra falsi positivi e falsi negativi. In tutta una serie di situazioni è importante distinguerli e quantificarli e, pertanto, quindi abbiamo a disposizione altre metriche.
Matrice di confusione
Consideriamo un esempio concreto. Immaginiamo che sulla base di dati tratti da prelievi istologici il nostro modello debba prevedere se un campione di tessuto proviene da un tumore benigno o maligno (è il caso del Wisconsin Breast Cancer Dataset).
In questo caso:
- falso positivo: il modello prevede "maligno" ma nella realtà non lo è (è benigno, per fortuna)
- falso negativo: il modello prevede "benigno" ma è "maligno"
Le due situazioni non si equivalgono. Se il nostro obiettivo è di tutelare la salute del paziente, è preferibile diagnosticare "maligno" ed indirizzare verso ulteriori esami di approfondimento piuttosto che rischiare che un caso da trattare venga ignorato. In altre parole consideriamo un falso negativo più dannoso che un falso positivo.
La matrice di confusione consente di rappresentare un livello di dettaglio maggiore della sola accuratezza, quantificando separatamente i falsi positivi ed i falsi negativi
Confusion Matrix
Valori | predetti | |
Valori | TP | FN |
reali | FP | TN |
per aiutare ad interpretare:
- lungo l'asse X i valori predetti
- lungo l'asse y i valori reali
- prima i casi positivi e poi i casi negativi
Ovviamente:
- Le predizioni corrette sono: TP + TN
- Le sbagliate: FP + FN
- ACC = (TP + TN)/(TP + TN + FP + FN)
La matrice di confusione fornisce tutti i dati per valutare accuratamente se sono più presenti i FP o i FN
Una considerazione importante nello sviluppo del modello: come dicevamo prima, ogni modello setta una soglia di decisione (es: se la probabilità è > 0.7 decido: POSITIVO). Possiamo ridurre il numero di FP alzando la soglia di decisione, ma in questo modo aumentiamo anche i FN. E' un "tradeoff".
Precisione e Recall
Queste altre due metriche prestazionali vogliono quantificare il tasso di Veri Positivi (TP) e di Veri Negativi (TN) in modo da poter stabilire come massimizzarli, ad esempio cambiando la Decision Threshold.
Queste sono le definizioni (2):
PREC = TP / (TP + FP)
REC = TP/P
Ove:
- TP = numero di veri positivi
- FP: numero di falsi positivi
- P = numero totale di campioni positivi nel SET
Una semplice interpretazione di Precision e Recall mi è stata offerta da uno dei bellissimi corsi di A. NG su Coursera.
La Precisione è la "frazione di casi identificati come positivi che sono correttamente positivi. Ad esempio, nel caso di un modello rivolto alla diagnosi di una malattia, la precisione è la frazione di pazienti identificati come malati che sono correttamente malati"
Il Recall invece è la "frazione di positivi che sono identificati dal modello come positivi".
La Precisione peggiora se vi sono tanti falsi positivi. Il Recall peggiora se vi sono tanti falsi negativi.
Un'altra metrica a volte utilizzata è l'F1-score calcolato a partire dalla Precision e Recall (3)
F1-score = 2 x PREC x REC/(PREC + REC)
Alcune considerazioni finali
Abbiamo parlato di soglia di decisione (decision threshold) di un modello. Se utilizziamo delle librerie software per implementare il modello è molto probabile che esse abbiano dei default pre-definiti. Dobbiamo conoscerli.
Ad esempio, se utilizziamo SCIKIT-LEARN e come classificatore LogisticRegression dobbiamo sapere che per default la soglia di classificazione è impostata a 0.5 (ovvero è scelta la classe con maggiore probabilità).
Ovviamente, la soglia di classificazione deve essere, a tutti gli effetti, considerata un iper-parametro del modello e deve essere definita in base al contesto e gli obiettivi che ci proponiamo.