Vai al contenuto principale

Overfitting vs. Underfitting: una guida pratica alla diagnostica dei modelli

Una guida dettagliata su overfitting e underfitting nel machine learning, inclusi come identificare ciascuna modalità di errore, perché accade e come risolverla tramite il trade-off bias-varianza.
Aggiornato 12 giu 2026  · 12 min leggi

Sai perché il tuo modello ha il 99% di accuratezza sui dati di training ma in produzione non azzecca nemmeno una previsione?

C’è differenza tra un modello che ha memorizzato e uno che ha imparato. La generalizzazione è l’obiettivo del machine learning: vuoi previsioni valide su dati che il modello non ha mai visto, non solo su quelli usati durante l’addestramento. Quando non succede, di solito ci si trova in uno di due casi.

Questi due casi sono overfitting e underfitting. Devi sapere quale dei due stai affrontando prima di poterlo risolvere.

In questo articolo ti mostrerò come riconoscere overfitting e underfitting, perché si verificano e i passi pratici per trovare l’equilibrio.

Che cos'è l'underfitting?

L'underfitting si verifica quando il tuo modello è troppo semplice per rappresentare ciò che accade davvero nei dati.

Immagina di prevedere i prezzi delle case con una singola regola: "ogni casa costa $300.000". Quella regola sarà sbagliata quasi ovunque. Non vede i quartieri, i metri quadri, il numero di camere da letto, il box auto o l’anno di costruzione. Il modello non ha la flessibilità necessaria per seguire il pattern.

Puoi individuare l'underfitting sempre allo stesso modo. L'accuratezza sul training è bassa, e anche quella sul test è bassa. Entrambi i numeri sono scarsi, ma la cosa chiave è che lo sono insieme.

Un caso classico è adattare una linea retta a dati curvilinei. La linea taglia a metà e perde la forma. Nessuna quantità extra di dati di training potrà salvarla, perché il modello in sé non può rappresentare la relazione.

Esempio di underfitting

Esempio di underfitting

Che cos'è l'overfitting?

L'overfitting è il problema opposto. Il modello è troppo complesso.

Invece di apprendere il pattern generale, memorizza il set di training. Ogni punto di rumore, ogni outlier strano, ogni picco e valle, ogni coincidenza nei dati riceve attenzione come se fosse un pattern reale. Il modello diventa quasi perfetto sui dati su cui è stato addestrato.

La cosa positiva dell'overfitting è che lo riconosci facilmente. L'accuratezza sul training sembra ottima, ma quella sul test è pessima.

Pensa a uno studente che memorizza le risposte dell'esame parola per parola senza imparare davvero la materia. Fa un ottimo punteggio sulle prove pratiche e probabilmente fallisce su quella reale.

Esempio di overfitting

Esempio di overfitting

Overfitting vs Underfitting: differenze chiave

Ora che li hai visti entrambi, la differenza è più facile da cogliere. I modelli in underfitting non sanno performare sui dati che hanno visto. I modelli in overfitting non sanno performare sui dati che non hanno visto.

I due si presentano in modo diverso durante l'addestramento:

  • L'underfitting si manifesta come prestazioni piatte e mediocri ovunque: il modello non impara mai molto da nulla
  • L'overfitting si manifesta come un divario, in cui gli score di training continuano a salire mentre quelli di test ristagnano o peggiorano nel tempo

Anche le cause si rispecchiano. L'underfitting deriva dal fare troppo poco: modelli semplici e feature mancanti. L'overfitting deriva dal fare troppo: modelli complessi e troppe feature.

Ecco un riepilogo dei due:

Underfitting rispetto a overfitting

Underfitting rispetto a overfitting

Come identificare overfitting e underfitting

Sapere come appaiono in teoria è una cosa, intercettarli nei tuoi modelli è un’altra.

La cosa più semplice è confrontare l'errore di training con quello di test e guardare le learning curve.

Errore di training vs test

Il controllo più rapido è dividere i dati in un training set e un test set, addestrare il modello e osservare l'errore su ciascuno.

Con l'underfitting, entrambi gli errori saranno alti. Il modello non ha imparato bene i dati di training e non andrà meglio su dati mai visti. Hai lo stesso risultato scarso su entrambi i fronti.

Con l'overfitting, l'errore di training sarà molto basso mentre quello di test resta alto. Il modello ha memorizzato i dati di training, ma questa conoscenza non si trasferisce.

Visualizzazione errore training vs test

Visualizzazione errore training vs test

Vuoi analizzare il divario tra questi due numeri. Un divario piccolo con errori alti indica underfitting. Un grande divario con errore di training basso ed errore di test alto indica overfitting. Un divario piccolo con errori bassi su entrambi è l'obiettivo, perché significa che il modello ha appreso la rappresentazione reale dei dati.

Learning curve

Le learning curve tracciano l'errore di training e di validazione rispetto alla dimensione del training set, o rispetto alle iterazioni di training. Mostrano cosa succede durante l'apprendimento del modello.

In un modello underfit, entrambe le curve si appiattiscono rapidamente su un errore alto. Aggiungere più dati non aiuta, perché il modello non può rappresentare il pattern alla base. Entrambe le curve restano alte.

Curve di un modello underfit

Curve di un modello underfit

In un modello overfit, la curva di training scende quasi a zero mentre quella di validazione resta alta. Il divario tra le due si allarga man mano che l'addestramento continua. Quel divario crescente è l'overfitting in un grafico.

Curve di un modello overfit

Curve di un modello overfit

Un modello sano mostra entrambe le curve che scendono e si incontrano su un errore basso, con un piccolo divario tra loro.

Perché si verificano overfitting e underfitting

Una volta che sai riconoscerli, la domanda successiva è perché compaiono. Entrambi derivano da una mancata corrispondenza tra modello e problema, ma in direzioni opposte.

Cause dell'underfitting

L'underfitting quasi sempre si riconduce a una di tre cose.

  • Il modello è troppo semplice: un modello lineare non può rappresentare una relazione curva. Il modello non ha la capacità di cui il problema ha bisogno.
  • Le feature sono insufficienti: anche un modello capace andrà in underfitting se gli fornisci input sbagliati. Prevedere i prezzi delle case dal CAP non ha senso, e ignora metri quadri, camere da letto, stato, età e dimensione del lotto. Il modello non ha nulla di utile su cui lavorare.
  • Training insufficiente: il modello non ha avuto abbastanza profondità, abbastanza iterazioni, abbastanza epoche o sufficienti aggiustamenti del learning rate per arrivare a una buona soluzione. L'addestramento si è semplicemente fermato troppo presto.

Cause dell'overfitting

L'overfitting nasce dal dare al modello più libertà di quanta i dati richiedano.

  • Il modello è troppo complesso: una rete neurale profonda con milioni di parametri addestrata su un dataset minuscolo ha ampio margine per memorizzare. La capacità supera quanto il problema richiede.
  • Troppe feature: quando hai più feature che pattern significativi nei dati, il modello apprende correlazioni che esistono per caso nel tuo campione di training ma non generalizzano.
  • Dataset troppo piccolo: con pochi dati di training, anche una complessità moderata può memorizzare l’intero set. Non ci sono abbastanza esempi da cui il modello possa generalizzare.
  • Training troppo lungo: il modello ha continuato ad aggiustare i pesi dopo aver già appreso il pattern reale, iniziando a adattarsi al rumore. Da quel punto in poi, più training peggiora le cose.

Il trade-off bias-varianza

Il trade-off bias-varianza spiega perché le prestazioni del modello dipendono dal trovare il punto giusto in cui il modello generalizza bene su dati non visti senza semplificare troppo il problema o andare in overfitting sul training set.

Bias alto

Il bias è l'errore che deriva dalle assunzioni del modello sui dati. Un modello con bias alto ha assunzioni forti e semplicistiche. Non riesce a rappresentare la reale complessità di ciò che accade nei dati.

Questo è esattamente l'underfitting. Il modello è troppo rigido per adattarsi ai pattern, quindi produce previsioni sballate, indipendentemente da quanti dati gli dai.

Se addestri 100 volte un modello con bias alto su campioni diversi, tutte e 100 le versioni faranno errori simili. Le loro previsioni si raggruppano attorno alla risposta sbagliata.

Varianza alta

La varianza è l'errore che deriva da un modello troppo sensibile ai dati specifici su cui è stato addestrato. Un modello con varianza alta coglie ogni piccolo pattern, di solito il rumore.

Questo è l'overfitting. Il modello si adatta molto da vicino al training set, ma piccoli cambiamenti nei dati di training portano a previsioni molto diverse.

Se addestri 100 volte un modello con varianza alta su campioni diversi, otterrai 100 modelli molto diversi. Le loro previsioni sono ovunque, anche sullo stesso input.

Il compromesso

Non puoi eliminare del tutto né bias né varianza, puoi solo spostarti tra i due.

Riduci il bias rendendo il modello più complesso, e la varianza sale. Riduci la varianza semplificando il modello, e il bias sale. L'obiettivo è trovare la via di mezzo, dove l'errore totale è al minimo.

Esempio di trade-off bias-varianza

Esempio di trade-off bias-varianza

Come risolvere l'underfitting

Una volta diagnosticato l'underfitting, hai varie strade per risolverlo. Tutte danno al modello più capacità di rappresentare i pattern nei tuoi dati.

  • Aumenta la complessità del modello: passa a un modello più flessibile. Da regressione lineare a regressione polinomiale, o da un albero poco profondo a uno più profondo.
  • Aggiungi più feature: introduci nuovi input che abbiano davvero valore. Crea termini di interazione, feature polinomiali o feature specifiche del dominio a cui il modello non aveva accesso.
  • Allunga l'addestramento: il modello potrebbe non aver avuto tempo sufficiente per convergere. Dagli più epoche o un diverso schedule del learning rate.
  • Riduci la regolarizzazione: la regolarizzazione mantiene un modello semplice, l'opposto di ciò che serve contro l'underfitting. Abbassa l'intensità della regolarizzazione o rimuovila del tutto, per dare più libertà al modello.

Alcune buone feature spesso incidono più di un cambio di architettura. Parti da lì prima di modificare il modello stesso.

Come risolvere l'overfitting

Per correggere l'overfitting devi fare l'opposto. Vuoi vincolare il modello in modo che smetta di memorizzare i dati di training.

  • Raccogli più dati: un dataset più grande rende molto più difficile la memorizzazione. Più esempi costringono a trovare pattern che reggono su tutto il set, non solo su poche righe.
  • Applica regolarizzazione: L1 e L2 aggiungono una penalità per pesi grandi, evitando che il modello si affidi troppo a una singola feature. È uno dei rimedi più affidabili.
  • Riduci la complessità del modello: se il modello è troppo grande per i dati, ridimensionalo. Usa meno parametri, alberi più superficiali o reti più piccole.
  • Usa la cross-validation: La cross-validation fornisce una stima più onesta di come il modello si comporterà su dati non visti. Ti offre più split training-test da un singolo dataset.
  • Applica il dropout per le reti neurali: Dropout disattiva casualmente una percentuale di neuroni durante l'addestramento. Ciò costringe la rete ad apprendere rappresentazioni ridondanti, riducendo la dipendenza da un singolo neurone.
  • Interrompi il training in anticipo: osserva l'errore di validazione e ferma l'addestramento quando inizia ad aumentare, anche se l'errore di training continua a diminuire. Si chiama early stopping, ed è uno dei cambiamenti più semplici da implementare.

Regolarizzazione ed early stopping sono di solito le prime cose da provare. Non costano nulla e quasi sempre aiutano.

Overfitting e underfitting in modelli diversi

Famiglie di modelli diverse mostrano underfitting e overfitting a modo loro. Ecco come tre casi comuni possono fallire in entrambe le direzioni.

Modelli lineari

  • Underfit: i modelli lineari assumono una relazione lineare. Quando il pattern reale è curvo, il modello non riesce a seguirlo, indipendentemente dalla quantità di dati.
  • Overfit: aggiungendo abbastanza termini polinomiali o di interazione, anche la regressione lineare può memorizzare il rumore. Metodi di regolarizzazione come Ridge e Lasso esistono soprattutto per gestire questo problema.

Alberi decisionali

  • Underfit: un albero poco profondo può fare solo pochi split. Con due o tre decisioni, non riesce a rappresentare pattern che richiedono più sfumature.
  • Overfit: gli alberi profondi tendono all'overfitting. Un albero che continua a dividere finché ogni foglia contiene un solo esempio di training otterrà un'accuratezza perfetta sul training e scarsa sul test. Ecco perché esistono parametri come max_depth, min_samples_split e il pruning.

Reti neurali

  • Underfit: reti troppo piccole per il problema andranno in underfitting. Vale anche per reti in cui il training si ferma troppo presto o in cui l'ottimizzatore resta bloccato in una soluzione subottimale.
  • Overfit: è più comune nel deep learning. Una rete con milioni di parametri può memorizzare anche dataset grandi con abbastanza epoche. Dropout, weight decay, data augmentation ed early stopping esistono per evitarlo.

Altri esempi di overfitting vs underfitting

Ora ti guiderò attraverso due esempi classici con codice che renderanno questi pattern facili da vedere.

Regressione polinomiale

Una sinusoide rumorosa è un buon caso di test. Quando adatti polinomi di gradi diversi, puoi vedere cambiare il comportamento del modello.

import numpy as np

# Data
np.random.seed(7)
X = np.linspace(0, 1, 30)
y_true = np.sin(2 * np.pi * X)
y = y_true + np.random.normal(0, 0.2, X.shape)

# Fit polynomials of three degrees
X_smooth = np.linspace(0, 1, 300)
degrees = [1, 3, 15]

for degree in degrees:
    coefs = np.polyfit(X, y, deg=degree)
    y_pred = np.polyval(coefs, X_smooth)

Esempio di regressione polinomiale

Esempio di regressione polinomiale

Il grado 1 è una retta che va in underfitting. Non riesce a seguire affatto la curva. Il grado 3 rappresenta la forma reale. Assorbe un po’ di rumore ma resta vicino alla verità. Il grado 15 va in overfitting, serpeggiando tra ogni punto di training e generando grandi oscillazioni tra di essi.

Alberi decisionali con profondità variabile

La stessa storia si vede con gli alberi decisionali. Puoi addestrare alberi di profondità crescente sugli stessi dati e misurare l'errore su training e test set.

import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Data
np.random.seed(11)
X = np.linspace(0, 10, 250).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.3, 250)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0
)

depths = range(1, 21)
train_errors = []
test_errors = []

for depth in depths:
    tree = DecisionTreeRegressor(max_depth=depth, random_state=0)
    tree.fit(X_train, y_train)
    train_errors.append(mean_squared_error(y_train, tree.predict(X_train)))
    test_errors.append(mean_squared_error(y_test, tree.predict(X_test)))

Esempio di albero decisionale

Esempio di albero decisionale

L'errore di training diminuisce man mano che l'albero diventa più profondo, avvicinandosi infine a zero quando ogni foglia contiene un solo punto di training. L'errore di test scende inizialmente mentre l'albero cattura le relazioni reali nei dati, poi risale quando split più profondi iniziano ad adattarsi al rumore. Il minimo si trova alla profondità che bilancia i due.

Errori comuni nella diagnosi delle prestazioni di un modello

Anche scegliendo la metrica giusta, è facile trarre conclusioni errate. Ecco cosa non dovresti fare quando valuti le prestazioni di un modello:

  • Valutare solo l'accuratezza sul training: l'accuratezza sul training ti dice quanto bene il modello si adatta a dati che ha già visto. Non ti dice nulla su come si comporterà su nuovi input. Misura sempre su un set separato prima di trarre conclusioni.
  • Ignorare i dati di validazione: i dati di validazione servono per ottimizzare scelte come architettura, iperparametri e punto di arresto. Il modello farà overfit sia sul training set sia sul test set se li riusi troppe volte.
  • Presumere che più complessità sia sempre meglio: un modello più grande non significa automaticamente più capace. Se i tuoi dati sono pochi o le relazioni sono semplici, la complessità ridurrà solo le prestazioni. Parti semplice e aggiungi capacità solo quando la diagnostica lo richiede.
  • Confondere rumore e segnale: non ogni pattern nei dati di training merita di essere appreso. Fluttuazioni casuali, bias di campionamento, outlier e artefatti di raccolta possono sembrare significativi a un modello flessibile. Se non sai spiegare perché una relazione dovrebbe esistere, trattala con cautela.

Dovresti sempre controllare tutti e quattro prima di chiudere con un modello. La maggior parte dei fallimenti in produzione è legata a uno (o più) di questi aspetti.

Conclusione

Underfitting e overfitting sono i due modi in cui un modello fallisce nel generalizzare. Uno resta troppo semplice per apprendere il pattern. L'altro prova a imparare ogni punto del tuo dataset.

L'obiettivo reale del training è mettersi nel mezzo, dove bias e varianza sono bilanciati e l'errore totale è al minimo.

Le prestazioni in validazione sono la metrica che ti dice dove sei. Tienile d'occhio durante l'addestramento e lascia che la differenza tra errore di training e di validazione guidi le tue decisioni. Se l'errore di validazione smette di migliorare mentre quello di training continua a scendere, hai superato il punto ottimale. Se entrambi restano alti, non ci sei ancora arrivato.

Vuoi imparare concetti di data science più avanzati e diventare pronto per il lavoro nel 2026? Iscriviti al nostro Machine Learning Engineer track per passare dalle basi all'MLOps.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Senior Data Scientist con base in Croazia. Top Tech Writer con oltre 700 articoli pubblicati, per più di 10 milioni di visualizzazioni. Autore del libro Machine Learning Automation with TPOT.

FAQs

Qual è la differenza tra overfitting e underfitting?

L'underfitting si verifica quando un modello è troppo semplice per rappresentare i pattern nei tuoi dati, quindi ha prestazioni scarse sia su training sia su test set. L'overfitting è l'opposto: il modello impara troppo bene i dati di training, incluso il rumore, quindi va benissimo in training ma fallisce su dati nuovi. Entrambi producono previsioni deboli, ma per motivi diversi.

Come faccio a sapere se il mio modello è in overfitting o underfitting?

Confronta l'errore di training con quello di test. Se entrambi sono alti, sei in underfitting. Se l'errore di training è molto basso ma quello di test è alto, sei in overfitting. Anche le learning curve aiutano, dato che in un modello overfit gli errori di training e validazione divergono, mentre in un underfit restano piatti su un errore alto.

Che cos'è il trade-off bias-varianza?

Il bias è l'errore di un modello troppo semplice, la varianza è l'errore di un modello troppo sensibile ai dati di training. Ridurre uno di solito aumenta l'altro, quindi l'obiettivo è trovare il bilanciamento in cui l'errore totale è al minimo. I modelli con il miglior equilibrio generalizzano meglio su nuovi dati.

Raccogliere più dati risolve l'overfitting?

Di solito aiuta, ma non è una soluzione garantita. Più dati rendono più difficile per un modello memorizzare, quindi deve trovare pattern che valgano su tutto il set. Ma se il tuo modello è troppo complesso per il problema o le tue feature sono perlopiù rumore, più dati non basteranno. In questi casi spesso funzionano meglio regolarizzazione e modelli più semplici.

Posso usare l'early stopping per prevenire l'overfitting nelle reti neurali?

Sì, ed è uno dei rimedi più semplici da implementare. Osserva l'errore di validazione durante l'addestramento e ferma quando si stabilizza o inizia ad aumentare, anche se l'errore di training continua a diminuire. Questo intercetta il punto in cui il modello ha imparato il pattern reale e sta iniziando ad adattarsi al rumore. La maggior parte dei framework di deep learning ha callback di early stopping integrati.

Argomenti

Impara con DataCamp

Corso

Feature Engineering per il Machine Learning in Python

4 h
38.8K
Crea nuove funzionalità per migliorare le prestazioni dei tuoi modelli di Machine Learning.
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

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.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra altroMostra altro