Valutazione e Ottimizzazione dei Modelli ML
Model Fit, metriche di valutazione, ciclo di vita di un progetto ML e hyperparameter tuning
Model Fit
Una volta addestrato un modello di Machine Learning, la prima domanda da porsi è: quanto bene si adatta ai dati?
Il concetto di Model Fit descrive la relazione tra il modello e i dati, e può presentarsi in tre scenari.
Overfitting
Il modello funziona bene sui dati di addestramento ma non funziona bene su dati nuovi (dati di valutazione).
È come uno studente che memorizza le risposte esatte di un esame passato: ottiene il massimo su quell’esame, ma fallisce se le domande vengono riformulate. Il modello ha “memorizzato” i dati di training invece di imparare i pattern generali.
Underfitting
Il modello funziona male anche sui dati di addestramento.
Questo può indicare che il modello è troppo semplice per catturare la complessità dei dati, oppure che le feature dei dati sono insufficienti. È come uno studente che non ha studiato abbastanza: non riesce a rispondere nemmeno alle domande che ha già visto.
Balanced (Bilanciato)
Il modello non è né in overfitting né in underfitting: generalizza bene sia sui dati di addestramento che su dati nuovi. Questo è lo scenario ideale a cui si punta durante l’addestramento.
Per capire meglio perché un modello cade in overfitting o underfitting, è utile introdurre i concetti di Bias e Variance.
Bias e Variance
Bias e Variance sono due fonti di errore che ci aiutano a diagnosticare il comportamento di un modello e a capire come correggerlo.
Bias (Distorsione)
Il Bias è la differenza tra il valore predetto dal modello e il valore reale. Si verifica quando il modello fa assunzioni troppo semplicistiche sui dati.
- High Bias (Bias alto) = il modello non riesce ad adattarsi ai dati di training. Corrisponde all’underfitting
- Esempio: usare una regressione lineare (una retta) su un dataset che segue un andamento curvilineo
Come ridurre il Bias:
- Usare un modello più complesso
- Aumentare il numero di feature
Variance (Varianza)
La Variance misura quanto cambiano le prestazioni del modello se viene addestrato su un dataset differente ma con distribuzione simile.
- High Variance (Varianza alta) = il modello è molto sensibile ai cambiamenti nei dati di training. Corrisponde all’overfitting: funziona bene sui dati di training ma male su dati nuovi
- Il modello ha “imparato il rumore” nei dati, non solo i pattern
Come ridurre la Variance:
- Feature selection (meno feature, ma più importanti)
- Suddividere i dati in training e test set più volte
Il quadrante Bias-Variance
La relazione tra Bias e Variance può essere riassunta in un quadrante:
| Low Variance | High Variance | |
|---|---|---|
| High Bias | Underfitting | Pessimo scenario |
| Low Bias | Balanced (ideale) | Overfitting |
L’obiettivo è raggiungere il quadrante Low Bias + Low Variance: il modello si adatta bene ai dati di training e generalizza bene su dati nuovi.
Metriche di valutazione per la Classificazione
Per misurare concretamente quanto bene un modello di classificazione sta funzionando, si utilizza la Confusion Matrix (matrice di confusione).
Confusion Matrix
Prendiamo come esempio un modello che classifica le email come “spam” o “non spam”. Per ogni predizione del modello ci sono quattro possibili risultati:
| Predetto: Spam | Predetto: Non Spam | |
|---|---|---|
| Reale: Spam | True Positive (TP) | False Negative (FN) |
| Reale: Non Spam | False Positive (FP) | True Negative (TN) |
- True Positive (TP) - il modello ha predetto “spam” e l’email era effettivamente spam
- True Negative (TN) - il modello ha predetto “non spam” e l’email non era spam
- False Positive (FP) - il modello ha predetto “spam” ma l’email non era spam (falso allarme)
- False Negative (FN) - il modello ha predetto “non spam” ma l’email era spam (mancato rilevamento)
La Confusion Matrix può essere anche multi-dimensionale (es. positivo, neutro, negativo) per classificazioni con più di due classi.
Metriche derivate dalla Confusion Matrix
Da questi quattro valori si calcolano diverse metriche, ciascuna utile in scenari diversi:
Precision (Precisione)
[ Precision = \frac{TP}{TP + FP} ]
Risponde alla domanda: “Di tutte le email che il modello ha classificato come spam, quante erano davvero spam?”
Da preferire quando i falsi positivi sono costosi (es. non vogliamo che email importanti finiscano nello spam).
Recall (Richiamo)
[ Recall = \frac{TP}{TP + FN} ]
Risponde alla domanda: “Di tutte le email che erano realmente spam, quante sono state individuate dal modello?”
Da preferire quando i falsi negativi sono costosi (es. in campo medico, non vogliamo che una malattia passi inosservata).
F1 Score
[ F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall} ]
È la media armonica tra Precision e Recall. Da preferire quando si vuole un bilanciamento tra le due, specialmente con dataset sbilanciati.
Accuracy (Accuratezza)
[ Accuracy = \frac{TP + TN}{TP + TN + FP + FN} ]
Percentuale di predizioni corrette sul totale. Funziona bene solo con dataset bilanciati (numero simile di esempi positivi e negativi), ed è raramente usata da sola.
AUC-ROC
La curva AUC-ROC (Area Under the Curve - Receiver Operating Characteristic) è uno strumento per confrontare le prestazioni di più modelli di classificazione.
- Il valore va da 0 a 1 (1 = modello perfetto)
- Utilizza la sensitivity (true positive rate) e 1 - specificity (false positive rate)
- La curva mostra come varia il rapporto tra true positive e false positive a diverse soglie di decisione
In pratica, si confrontano le curve AUC-ROC di modelli diversi per scegliere quello con l’area sotto la curva più grande, che corrisponde al modello con le prestazioni migliori.
Metriche di valutazione per la Regressione
Quando il modello predice un valore numerico continuo (regressione), le metriche di classificazione non sono applicabili. Si usano metriche specifiche che misurano quanto le predizioni si discostano dai valori reali.
Prendiamo un esempio concreto: un modello che predice il punteggio di un esame in base alle ore di studio.
MAE - Mean Absolute Error
Misura l’errore medio assoluto tra i valori predetti e quelli reali.
Se il MAE è 5, significa che in media la predizione del modello è sbagliata di circa 5 punti rispetto al punteggio reale.
MAPE - Mean Absolute Percentage Error
Come il MAE, ma espresso in percentuale. Utile per confrontare errori su scale diverse.
RMSE - Root Mean Squared Error
Simile al MAE, ma dà più peso agli errori grandi (perché eleva al quadrato le differenze prima di fare la media). Se l’RMSE è 5, in media la predizione è sbagliata di circa 5 punti.
R² - R Squared
Misura la varianza spiegata dal modello, cioè quanto il modello riesce a catturare i pattern nei dati.
- Un valore vicino a 1 indica predizioni buone
- Se R² è 0.8, significa che l’80% delle variazioni nei punteggi può essere spiegato dalle ore di studio, e il restante 20% dipende da altri fattori (capacità naturale, fortuna, ecc.)
In sintesi: MAE, MAPE e RMSE misurano l’errore (quanto il modello sbaglia), mentre R² misura la varianza (quanto il modello capisce i dati).
Inferencing
Una volta addestrato e valutato, il modello viene messo in produzione per fare inferenze, cioè predizioni su dati nuovi. Esistono due modalità principali.
Real-time (Tempo reale)
Il modello deve prendere decisioni rapidamente man mano che i dati arrivano.
La velocità è prioritaria rispetto alla precisione perfetta.
Esempio tipico: un chatbot che deve rispondere immediatamente all’utente.
Batch (A blocchi)
Una grande quantità di dati viene analizzata tutta insieme.
È usato tipicamente per l’analisi dati, dove la velocità del risultato non è una preoccupazione ma l’accuratezza sì.
Esempio tipico: analisi notturna di tutte le transazioni del giorno per rilevare frodi.
Inferencing at the Edge
L’inferenza può avvenire anche su dispositivi edge, cioè dispositivi con minore capacità computazionale posizionati vicino a dove i dati vengono generati, spesso in luoghi con connessione internet limitata.
| SLM (Small Language Model) su dispositivo edge | LLM su server remoto | |
|---|---|---|
| Latenza | Molto bassa | Più alta |
| Capacità computazionale | Limitata | Elevata |
| Connessione | Funziona offline | Richiede connessione |
| Potenza del modello | Inferiore | Superiore |
La scelta tra le due opzioni dipende dal contesto: se serve bassa latenza e funzionamento offline, si usa un SLM locale; se serve un modello più potente e la connessione è disponibile, si usa un LLM remoto.
Fasi di un progetto di Machine Learning
Un progetto di Machine Learning segue un ciclo iterativo composto da diverse fasi, dalla definizione del problema alla messa in produzione e al monitoraggio continuo.
1. Definizione degli obiettivi di business
Gli stakeholder definiscono il valore, il budget e i criteri di successo del progetto.
Definire i KPI (Key Performance Indicators) è fondamentale per poter misurare il successo.
2. ML Problem Framing
Il problema di business viene convertito in un problema di Machine Learning.
In questa fase si determina se il ML è l’approccio appropriato, e collaborano data scientist, data engineer, ML architect e subject matter expert (SME).
3. Elaborazione dei dati
- Raccolta e integrazione dei dati (renderli centralmente accessibili)
- Preprocessing e visualizzazione dei dati (formato comprensibile)
- Feature Engineering: creare, trasformare ed estrarre variabili dai dati
4. Exploratory Data Analysis (EDA)
Prima di addestrare il modello, si visualizzano i dati con grafici per comprenderne la struttura.
Uno strumento chiave è la Correlation Matrix (matrice di correlazione), che mostra quanto le variabili sono “legate” tra loro. Ad esempio, in un dataset sulle prestazioni degli studenti:
| Ore studio | Punteggio | Ore sonno | Distrazioni | |
|---|---|---|---|---|
| Ore studio | 1 | 0.85 | 0.4 | -0.6 |
| Punteggio | 0.85 | 1 | 0.3 | -0.5 |
| Ore sonno | 0.4 | 0.3 | 1 | -0.2 |
| Distrazioni | -0.6 | -0.5 | -0.2 | 1 |
I valori vanno da -1 a 1: vicino a 1 indica forte correlazione positiva, vicino a -1 forte correlazione negativa, vicino a 0 nessuna correlazione.
Da questa matrice si può dedurre che le ore di studio (0.85) sono la feature più importante per predire il punteggio, mentre le distrazioni hanno un impatto negativo (-0.5).
5. Sviluppo del modello
- Training, tuning e valutazione del modello
- Processo iterativo: si torna indietro a fare ulteriore feature engineering e si regolano gli hyperparameter
6. Re-training
Se i risultati non sono soddisfacenti, si analizzano dati e feature per migliorare il modello e si regolano gli hyperparameter.
7. Deployment
Se i risultati sono buoni, il modello viene distribuito e messo in produzione.
Si sceglie la modalità di deployment: real-time, serverless, asincrono, batch, on-premises…
8. Monitoring
Si implementa un sistema di monitoraggio per verificare le prestazioni nel tempo:
- Rilevamento precoce di problemi
- Debug per comprendere il comportamento del modello
9. Iterazioni
Il modello viene continuamente migliorato e perfezionato man mano che nuovi dati diventano disponibili. I requisiti possono cambiare nel tempo, e l’iterazione è essenziale per mantenere il modello accurato e rilevante.
Hyperparameter Tuning
Gli hyperparameter sono impostazioni che definiscono la struttura del modello e il processo di apprendimento. A differenza dei parametri del modello (che vengono appresi durante il training), gli hyperparameter vengono definiti prima dell’addestramento.
Il tuning degli hyperparameter consiste nel trovare i valori ottimali per massimizzare le prestazioni del modello. Un buon tuning migliora l’accuratezza, riduce l’overfitting e migliora la capacità di generalizzazione.
Hyperparameter principali
Learning Rate (Tasso di apprendimento)
Determina quanto grandi o piccoli sono i passi con cui il modello aggiorna i propri pesi durante il training.
- Un learning rate alto porta a una convergenza più rapida, ma rischia di “saltare oltre” la soluzione ottimale
- Un learning rate basso produce una convergenza più precisa, ma molto più lenta
Batch Size (Dimensione del batch)
Il numero di esempi di training utilizzati per aggiornare i pesi del modello in una singola iterazione.
- Batch piccoli portano a un apprendimento più stabile, ma richiedono più tempo
- Batch grandi sono più veloci, ma possono portare ad aggiornamenti meno stabili
Number of Epochs (Numero di epoche)
Indica quante volte il modello itera sull’intero dataset di training.
- Troppe poche epoche possono causare underfitting (il modello non ha imparato abbastanza)
- Troppe epoche possono causare overfitting (il modello ha memorizzato i dati)
Regularization (Regolarizzazione)
Regola il bilanciamento tra un modello semplice e uno complesso.
Aumentare la regolarizzazione aiuta a ridurre l’overfitting.
Come trovare i valori ottimali
- Grid Search - si provano tutte le combinazioni possibili di valori predefiniti
- Random Search - si provano combinazioni casuali di valori
Prevenire l’Overfitting
L’overfitting è uno dei problemi più comuni nel Machine Learning. Si verifica quando il modello produce buone predizioni sui dati di training, ma non sui dati nuovi.
Cause dell’overfitting
- Il dataset di training è troppo piccolo e non rappresenta tutti i possibili valori in input
- Il modello si è addestrato troppo a lungo sullo stesso set di dati
- La complessità del modello è troppo alta e il modello impara anche dal “rumore” nei dati di training
Come prevenirlo
- Aumentare la dimensione del dataset - più dati diversificati aiutano il modello a generalizzare
- Early stopping - fermare l’addestramento prima che il modello inizi a memorizzare i dati
- Data augmentation - aumentare la diversità del dataset generando variazioni dei dati esistenti (es. ruotare o ritagliare immagini)
- Regolare gli hyperparameter - modificare i valori degli hyperparameter esistenti (ma non è possibile “aggiungerne” di nuovi)
- Ensembling - combinare le predizioni di più modelli diversi per ottenere risultati più accurati e robusti
Quando il Machine Learning NON è appropriato
Non tutti i problemi richiedono il Machine Learning. Per i problemi deterministici, dove la soluzione può essere calcolata con precisione, è meglio scrivere codice tradizionale.
Esempio: “Un mazzo contiene cinque carte rosse, tre carte blu e due carte gialle. Qual è la probabilità di pescare una carta blu?”
La risposta è 3 su 10 (30%) e si calcola con una semplice divisione. Se usassimo un algoritmo di ML (Supervised, Unsupervised o Reinforcement Learning), otterremmo solo un’approssimazione del risultato, non la risposta esatta.
Anche se oggi gli LLM hanno capacità di ragionamento, per problemi con soluzioni calcolabili in modo preciso restano comunque una soluzione “peggiore” rispetto al codice tradizionale.
In sintesi: il Machine Learning eccelle nei problemi dove non esiste una formula precisa o dove i pattern nei dati sono troppo complessi per essere programmati manualmente. Per tutto il resto, il codice tradizionale rimane la scelta migliore.