Bias e varianza: il trade-off che non muore mai
Ogni decisione su un modello — più parametri, più dati, più regolarizzazione — è una scommessa su come si distribuisce l’errore tra una componente sistematica e una rumorosa. Capire questa decomposizione è capire dove ha senso spendere.
Perché questo capitolo
Sezione intitolata “Perché questo capitolo”Quando uno sviluppatore guarda un modello che non funziona, la prima domanda è: “che cosa cambio?”. Più dati. Un modello più grande. Un modello più piccolo. Più regolarizzazione. Meno regolarizzazione. Una loss diversa. Un altro tokenizer. Le opzioni sono molte e la pressione di provarne una a caso è alta.
La decomposizione bias-varianza è la lente che rende quella domanda decidibile invece che ginnica. Spezza l’errore atteso in tre componenti — una irriducibile e due su cui si può agire — e dice cosa muove ciascuna leva. Più capacity riduce il bias e gonfia la varianza. Più dati riducono la varianza ma non toccano il bias. Più regolarizzazione fa l’opposto della capacity. Capire quale dei due termini sta dominando il tuo errore è la differenza tra debugging mirato e tentativi alla cieca.
C’è un secondo motivo, meno ovvio, per cui questo capitolo conta nel 2026. La curva a U classica — quella che si vede in ogni manuale di machine learning — è stata pubblicamente smentita dal regime moderno delle reti sovra-parametrizzate. I large language model hanno miliardi di parametri e meno token di training di quanti ne servirebbero per “saturare” il modello in senso classico, eppure generalizzano. Il fenomeno si chiama double descent ed è ancora oggetto di studio. Senza la cornice classica non si capisce perché sia sorprendente; senza la cornice moderna non si capisce perché la regola “modello più piccolo = meno overfit” sia diventata fuorviante.
Contesto
Sezione intitolata “Contesto”Il dilemma fra bias e varianza ha una data e tre nomi. Stuart Geman, statistico americano, Elie Bienenstock, neuroscienziato franco-americano, e René Doursat, ricercatore in sistemi complessi, lo formalizzarono per le reti neurali nel 1992 in un paper diventato canonico, Neural Networks and the Bias/Variance Dilemma, pubblicato su Neural Computation. La decomposizione in sé era nota nella statistica già prima — appare in forma riconoscibile nei lavori sulla teoria della stima fin dagli anni Cinquanta — ma è stato Geman a metterla al centro del discorso ML.
Negli anni successivi due filoni hanno attraversato il dilemma da direzioni opposte. Leo Breiman, statistico di Berkeley, nel 1996 pubblicò Bagging Predictors sulla rivista Machine Learning: prese l’idea di addestrare lo stesso modello su molti bootstrap sample e mediarne le predizioni. Il risultato è una riduzione di varianza senza aumento di bias atteso. Pochi mesi dopo, Yoav Freund e Robert Schapire, due informatici teorici di AT&T, pubblicarono A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting: AdaBoost. Combinare weak learner sequenzialmente, riponderando gli esempi sbagliati, riduce il bias. Bagging e boosting, insieme, dimostravano che le due metà del trade-off potevano essere attaccate con strumenti complementari.
Pedro Domingos, professore a Washington, nel 2000 con A Unified Bias-Variance Decomposition mostrò che la decomposizione MSE è un caso particolare e che per loss diverse — zero-one, log-loss — bias e varianza non si sommano puramente. Interagiscono. La decomposizione resta utile come linguaggio, ma cessa di essere un teorema pulito.
Tra il 2000 e il 2010 il dilemma è entrato nei manuali. Trevor Hastie, Robert Tibshirani e Jerome Friedman, statistici di Stanford, ne hanno fatto un capitolo centrale di The Elements of Statistical Learning (2009), il riferimento canonico del campo. Christopher Bishop, ricercatore di Microsoft Research, ha proposto in Pattern Recognition and Machine Learning (2006) la lettura bayesiana, dove la regolarizzazione coincide con la scelta di un prior. La cornice bias-varianza, in quel periodo, sembrava chiusa: una bella decomposizione, una curva U, qualche metodo per stimarla.
Il filone si riapre nel 2019. Mikhail Belkin, statistico di Ohio State, con Daniel Hsu, Siyuan Ma e Soumik Mandal, pubblicò Reconciling Modern Machine-Learning Practice and the Classical Bias–Variance Trade-off su PNAS. Documentò empiricamente che oltre la soglia di interpolazione — quando il modello ha abbastanza parametri da fittare perfettamente il training set — l’errore di test ricomincia a scendere. Il fenomeno, chiamato double descent, è stato confermato e ampliato da Preetum Nakkiran e collaboratori nel 2020 con Deep Double Descent: Where Bigger Models and More Data Hurt.
Il grafo concettuale è quindi: probabilità (capitolo 103) e Bayes (capitolo 104) forniscono il linguaggio dell’aspettazione. Il principio dell’errore atteso si lega alla cross-entropy e all’entropia (capitolo 105) perché ogni loss è una scelta su come pesare gli errori. La discesa del gradiente (capitolo 107) è lo strumento che, in pratica, sceglie quale modello scrivere dato un dataset; la curse of dimensionality (capitolo 110) spiega perché in alta dimensione la varianza è particolarmente difficile da domare.
L’intuizione
Sezione intitolata “L’intuizione”Due angoli, prima del formalismo. Sono distinti. Il primo è geometrico, il secondo è epistemico.
Angolo uno: il tiro al bersaglio
Sezione intitolata “Angolo uno: il tiro al bersaglio”Immagina di avere un bersaglio e di sparare quaranta colpi. Il bersaglio rappresenta la funzione vera, il centro è il punto giusto. Ogni colpo è un modello addestrato su un dataset diverso (estratto dalla stessa popolazione). Quattro situazioni possibili:
- Tutti i colpi vicini al centro: bias basso, varianza bassa. Modello giusto, ben addestrato. Caso ideale.
- Tutti i colpi raggruppati ma fuori dal centro: bias alto, varianza bassa. Il modello è coerente con sé stesso ma sistematicamente sbagliato. Underfitting.
- Colpi sparpagliati attorno al centro: bias basso, varianza alta. Il modello “in media” trova la cosa giusta, ma il singolo addestramento è instabile. Overfitting.
- Colpi sparpagliati e fuori dal centro: bias alto, varianza alta. Il caso peggiore.
Questa è ANALOGIA, non equivalenza. Aiuta a visualizzare i due assi; non dimostra nulla. La metafora si rompe se si chiede “ma il bersaglio fisico è uguale per tutti i colpi mentre la funzione vera dipende da x?”. Sì: l’analogia vale punto per punto, non globalmente. Per ogni x fissato c’è un bersaglio e quaranta colpi.
Angolo due: semplicità contro complessità
Sezione intitolata “Angolo due: semplicità contro complessità”Pensa ad addestrare un modello come a “scegliere una funzione da una famiglia”. La famiglia è dettata dall’architettura: regressione lineare = tutte le rette; polinomi di grado tre = tutte le cubiche; rete neurale con N parametri = tutte le funzioni rappresentabili da quei pesi.
Una famiglia ristretta non riesce a piegarsi alla forma vera del fenomeno. Per quanti dati le dai, sbaglierà sempre nello stesso modo: un modello lineare non spiegherà mai una sinusoide. Bias alto.
Una famiglia ricchissima riesce a fittare qualunque cosa, incluso il rumore del singolo dataset. Cambi i dati, cambia drasticamente la funzione scelta. Varianza alta.
Bias e varianza, da questo angolo, sono il prezzo dei due errori opposti: scegliere una famiglia troppo piccola per la realtà, o scegliere una famiglia troppo grande per i dati che hai.
L’angolo geometrico rende visibile cosa sta succedendo. L’angolo epistemico spiega perché succede.
La meccanica
Sezione intitolata “La meccanica”Set-up: cosa è random e cosa no
Sezione intitolata “Set-up: cosa è random e cosa no”Prima di scrivere formule conviene chiarire chi è la variabile aleatoria e chi è fisso. È il punto che genera più confusione nelle prime esposizioni.
Fisso, nella derivazione: il punto x in cui valutiamo l’errore. La famiglia di modelli (architettura, iperparametri). La distribuzione P(x, y) del mondo, da cui si campiona.
Random: il dataset D, in quanto campione di taglia N estratto da P. Il rumore ε del singolo punto y. Il modello f̂_D, in quanto funzione del dataset random.
L’aspettazione che ci interessa è doppia: media sui possibili dataset D e media sul rumore. Il bias e la varianza che otterremo non sono proprietà del singolo modello che hai addestrato — sono proprietà della procedura di addestramento applicata alla distribuzione, viste attraverso il punto x.
Sia x un input. La realtà che vogliamo predire ha forma:
dove f è la funzione vera (sconosciuta) e ε è rumore con media zero e varianza σ², indipendente da x. Il rumore non è un difetto del modello: è la parte del mondo che il dato osservato non determina. Misurazioni imprecise, eventi non registrati, fluttuazioni intrinseche.
Da un dataset D di N esempi, addestriamo un modello f̂_D. Il modello è una funzione di D, non solo dell’architettura. Cambiando D (ricampionando dalla stessa popolazione), cambia f̂_D.
L’oggetto che ci interessa è l’errore atteso al quadrato per un punto fisso x, dove l’aspettazione è presa su due fonti di casualità: il rumore ε e il dataset D.
Derivazione
Sezione intitolata “Derivazione”Riscriviamo il termine dentro la parentesi aggiungendo e sottraendo due quantità:
Il primo termine è ε per costruzione. Il secondo è la differenza tra la funzione vera in x e la predizione media del modello (media su tutti i dataset possibili). Il terzo è la deviazione del modello specifico dalla sua media.
Quadrando e prendendo l’aspettazione, restano tre termini al quadrato e tre prodotti incrociati. Ciascun prodotto incrociato si annulla:
- ε è indipendente da D ed ha media zero, quindi i prodotti che lo contengono si annullano in aspettazione.
- (f(x) - E_D[f̂_D(x)]) è deterministico una volta fissata la distribuzione di D, quindi esce dal valore atteso. Resta moltiplicato per E_D[E_D[f̂_D(x)] - f̂_D(x)] = 0.
Si ottiene così:
Questo è un TEOREMA, non un’analogia. Per la loss MSE, sotto le ipotesi enunciate (rumore additivo a media zero, indipendente dai feature), la decomposizione è esatta.
Tre termini, tre cause, tre leve.
- σ² è l’irriducibile. Nessun modello, per quanto bravo, può batterlo. È il floor dell’errore.
- bias² misura il pregiudizio: quanto, in media sui dataset, il modello manca il vero f(x). Riguarda la famiglia di funzioni scelta.
- varianza misura l’instabilità: quanto la predizione fluttua attorno alla sua media al variare del dataset.
Il caso non-MSE
Sezione intitolata “Il caso non-MSE”Per loss diverse dall’MSE — zero-one (errore di classificazione), log-loss (cross-entropy), hinge — la decomposizione pulita non vale. Pedro Domingos in A Unified Bias-Variance Decomposition (ICML 2000) propose una generalizzazione operativa, ma con un’avvertenza: bias e varianza interagiscono. Per lo zero-one loss, ad esempio, una varianza alta può ridurre l’errore atteso quando la predizione media è dalla parte sbagliata della soglia. La cornice resta utile come linguaggio diagnostico, smette di essere un teorema con somma additiva.
Regolarizzazione come spostamento
Sezione intitolata “Regolarizzazione come spostamento”Aggiungere una penalità alla loss riduce la flessibilità effettiva del modello. La famiglia non cambia formalmente — i pesi possono ancora assumere qualunque valore — ma l’ottimizzatore preferisce soluzioni “vicine a zero” o sparse. Il risultato è varianza più bassa al costo di bias più alto.
Per la regressione ridge (penalità L2), c’è un’EQUIVALENZA argomentabile con un approccio bayesiano: assumendo un prior gaussiano N(0, τ²I) sui pesi e un likelihood gaussiano per il rumore, la stima MAP coincide con la regressione ridge dove λ = σ²/τ². Più stretto è il prior (τ piccolo), più forte è la regolarizzazione. Si rimanda al capitolo bayes-base (104) per il dettaglio.
Le altre forme:
- L1 (lasso): induce sparsità (alcuni pesi esattamente zero). Equivale a un prior Laplaciano.
- Dropout: durante l’addestramento, spegne casualmente neuroni con probabilità p. Approssima un bagging implicito su sotto-reti.
- Data augmentation: aumenta varietà del dataset, riducendo la varianza dello stimatore.
- Early stopping: ferma il training quando la val loss smette di scendere. In molti regimi è equivalente a una L2 implicita, con λ proporzionale al numero di passi non fatti.
Bagging e boosting
Sezione intitolata “Bagging e boosting”Sono i due strumenti complementari per attaccare i due termini.
Bagging (Leo Breiman 1996, Bagging Predictors): si campiona con reinserimento dal dataset D ottenendo D₁, …, D_M. Si addestra f̂_m su ciascun D_m. La predizione finale è la media (o voto, per classificazione). Se i singoli f̂_m sono “instabili” (alta varianza, basso bias) e ragionevolmente decorrelati, la varianza della media decresce con M. Il bias atteso resta lo stesso. La random forest è bagging applicato ad alberi decisionali, con un trucco aggiuntivo per decorrelare: a ogni split si considera solo un subset random delle feature.
Boosting (Yoav Freund e Robert Schapire 1997, AdaBoost): si addestrano modelli sequenzialmente. Ogni modello si focalizza sugli errori del precedente, riponderando gli esempi sbagliati. La predizione finale è una combinazione pesata dei weak learner. L’effetto è di ridurre il bias: aggregando weak learner si ottiene uno strong learner. La varianza può crescere se si boosta troppo a lungo, e in pratica si usa early stopping.
Jerome Friedman, Trevor Hastie e Robert Tibshirani nel 2000 (Additive Logistic Regression: A Statistical View of Boosting) hanno reinquadrato boosting come fitting additivo iterativo, gettando le basi per gradient boosting e XGBoost.
Double descent
Sezione intitolata “Double descent”Il fenomeno scoperto empiricamente da Belkin et al. nel 2019 e ampliato da Nakkiran et al. nel 2020 rompe il quadro classico nel regime sovra-parametrizzato.
Consideriamo un dataset di N punti e un modello con P parametri. Variando P:
- P piccolo (P ≪ N): regime classico, U-shape. Aumentando P il bias scende, la varianza sale, c’è un minimo intermedio.
- P ≈ N: soglia di interpolazione. Il modello ha appena abbastanza parametri per fittare perfettamente il training set. La varianza esplode: tra le poche soluzioni che interpolano, l’ottimizzatore ne trova una arbitrariamente sensibile ai dati.
- P ≫ N: regime sovra-parametrizzato. Il test error riprende a scendere, spesso al di sotto del minimo del primo regime.
Le spiegazioni proposte sono di natura mista. In regime sovra-parametrizzato esistono infinite soluzioni che interpolano perfettamente il training set; SGD ne preferisce alcune (per ragioni implicite nel suo dinamismo) che hanno proprietà di generalizzazione migliori — tipicamente quelle a norma minima o a margine più ampio. La cornice classica della varianza, che assume P fissato e N che cresce, smette di descrivere bene il fenomeno.
Stabilità degli stimatori
Sezione intitolata “Stabilità degli stimatori”Una nozione che chiarisce perché bagging funziona: la stabilità di uno stimatore è una proprietà che misura quanto la predizione cambia se cambiamo un singolo esempio del training set. Olivier Bousquet e André Elisseeff (2002, Stability and Generalization, JMLR) hanno formalizzato il legame: stimatori stabili generalizzano meglio. Alberi decisionali profondi sono notoriamente instabili — basta uno split diverso vicino alla radice e l’intero albero cambia. Modelli lineari regolarizzati sono stabili.
Bagging interviene esattamente su questa instabilità: la media di stimatori instabili è uno stimatore stabile. Boosting, al contrario, sfrutta deliberatamente l’instabilità: ogni weak learner è scelto perché si focalizza su esempi diversi.
La stabilità è un concetto tecnicamente distinto dalla varianza ma operativamente vicino. Per scopi diagnostici, “instabile” e “high-variance” sono sinonimi sufficienti.
Pseudocodice: bootstrap per stimare bias e varianza
Sezione intitolata “Pseudocodice: bootstrap per stimare bias e varianza”import numpy as np
def estimate_bias_variance(model_factory, X_train, y_train, X_test, f_true, B=200): """ model_factory: callable che restituisce un modello fresh f_true: funzione vera (per esperimenti sintetici) """ n = len(X_train) preds = np.zeros((B, len(X_test)))
for b in range(B): # bootstrap sample con reinserimento idx = np.random.choice(n, size=n, replace=True) Xb, yb = X_train[idx], y_train[idx] m = model_factory() m.fit(Xb, yb) preds[b] = m.predict(X_test)
mean_pred = preds.mean(axis=0) # E_D[f̂_D(x)] bias_sq = (mean_pred - f_true(X_test)) ** 2 variance = preds.var(axis=0) # noise stimato a parte se si conosce sigma^2
return bias_sq.mean(), variance.mean()Il codice prende un dataset, ne campiona B versioni con reinserimento, addestra B modelli e calcola le predizioni medie e le loro varianze sul test set. Se f_true è noto (caso sintetico), si calcola il bias direttamente; altrimenti si stima.
Esempio 1: regressione polinomiale di grado 1, 3, 9
Sezione intitolata “Esempio 1: regressione polinomiale di grado 1, 3, 9”Dataset: venti punti generati da y = sin(2πx) + ε, con x ∈ [0, 1], ε ~ N(0, 0.1²).
Adattiamo tre polinomi: grado 1 (lineare), grado 3, grado 9.
- Grado 1: la retta non riesce a seguire la sinusoide. L’errore di training è grande, l’errore di test è altrettanto grande, il gap è piccolo. Bias enorme, varianza piccola: ogni nuovo dataset produce una retta simile, sempre fuori dalla sinusoide. Underfitting.
- Grado 3: il polinomio segue una sinusoide approssimata abbastanza bene. Il bias è piccolo, la varianza è moderata. Ricampionando il dataset il polinomio cambia ma resta nella zona giusta.
- Grado 9: ha dieci coefficienti per venti punti. Riesce a passare quasi esattamente per ogni punto, oscillando selvaggiamente tra i punti. L’errore di training è quasi zero. L’errore di test è altissimo. Cambiando dataset il polinomio cambia drasticamente: bias quasi zero (in media trova la sinusoide), varianza enorme.
Esempio 2: bootstrap che verifica la decomposizione
Sezione intitolata “Esempio 2: bootstrap che verifica la decomposizione”Riprendiamo il setup precedente e lanciamo lo pseudocodice della sezione meccanica con B = 500 bootstrap, model_factory che restituisce un polinomio del grado scelto, f_true(x) = sin(2πx).
Risultati tipici (medie su test set di mille punti, σ² noto pari a 0.01):
| Grado | bias² medio | varianza media | noise | totale stimato | MSE test misurato |
|---|---|---|---|---|---|
| 1 | 0.21 | 0.004 | 0.01 | 0.224 | 0.227 |
| 3 | 0.008 | 0.012 | 0.01 | 0.030 | 0.032 |
| 9 | 0.001 | 0.45 | 0.01 | 0.461 | 0.458 |
La somma stimata di bias² + varianza + noise approssima il MSE misurato sul test set, dentro l’errore di stima del bootstrap. La decomposizione regge come oggetto numerico, non solo come idea.
Il grado 3 minimizza la somma: è il punto a U dove bias e varianza si bilanciano. Il grado 1 paga in bias, il grado 9 in varianza.
Esempio 3: random forest contro singolo albero
Sezione intitolata “Esempio 3: random forest contro singolo albero”Prendiamo un dataset tabulare di previsione medica: cinquemila pazienti, venti feature cliniche, target binario (diagnosi positiva/negativa).
Un singolo albero decisionale profondo (max_depth=20, no pruning) raggiunge il 100% di accuracy su training e il 73% su test. Cambiando random seed (e quindi l’ordine di considerazione delle feature ai split) l’accuracy di test oscilla tra 68% e 76%. Bias quasi zero, varianza enorme.
Una random forest con 200 alberi addestrati sugli stessi dati, ciascuno su un bootstrap sample con feature subsampling a sqrt(20) = 4 feature per split, raggiunge il 99% di training e l’82% di test. Cambiando random seed la val accuracy oscilla tra 81% e 83%. Il bias è simile (era già basso), la varianza è collassata.
La dimostrazione operativa è diretta: bagging fa quello che la teoria promette. Per modelli instabili high-variance / low-bias, mediare predizioni decorrelate converte l’instabilità in stima più stabile, senza pagare in bias.
Una variante illuminante: se uso random forest con max_depth=2 (alberi shallow, bias intrinsecamente alto), l’accuracy resta sul 75% indipendentemente dal numero di alberi. Mediare modelli che sono già coerentemente sbagliati non li corregge: bagging riduce varianza, non bias.
Esempio 4: kNN, scegliere k
Sezione intitolata “Esempio 4: kNN, scegliere k”L’algoritmo k-nearest-neighbors classifica un punto guardando i k vicini più prossimi e prendendo la classe maggioritaria.
- k = 1: il modello memorizza esattamente il training set. Bias minimo (può rappresentare qualunque pattern), varianza altissima (cambiando un singolo punto del training, le predizioni nelle vicinanze cambiano).
- k = N (tutto il dataset): il modello predice sempre la classe maggioritaria globale, indipendentemente da x. Bias massimo, varianza zero.
- k intermedio (tipicamente 5, 10, 20 a seconda di N): bilanciamento.
Il caso kNN è particolarmente pulito perché il trade-off è governato da un singolo iperparametro discreto. Si fa cross-validation su una griglia {1, 3, 5, 10, 20, 50, 100} e si sceglie. È un esercizio standard del corso introduttivo a ML, ma resta una delle dimostrazioni più tangibili della curva U classica.
Esempio 5: model size in fine-tuning di un LLM
Sezione intitolata “Esempio 5: model size in fine-tuning di un LLM”Scenario reale: hai un modello pre-addestrato (diciamo un open-weights da sette miliardi di parametri) e vuoi fine-tunarlo su un dataset interno di tremila esempi domanda-risposta in italiano. Hai a disposizione due alternative per il backbone: la versione base 7B e una più piccola, 1.3B.
Intuizione classica: con tremila esempi, il 7B “overfitterà” perché P ≫ N. Meglio il modello piccolo.
Realtà osservata nel 2026: il 7B fine-tunato con LoRA (rank 8, learning rate basso, early stopping) supera il 1.3B su validation, anche con un training set piccolo. Diverse ragioni concorrono e nessuna è una decomposizione bias-varianza pura:
- Il pre-training fornisce un prior fortissimo. Il fine-tuning sposta i pesi solo localmente.
- LoRA limita i parametri effettivamente aggiornati a una frazione minuscola del modello, riducendo varianza.
- Si è in regime sovra-parametrizzato del backbone, dove il double descent suggerisce che “più grande” non implica “più overfit”.
La cornice classica suggerisce caution sul 7B; la cornice moderna spiega perché spesso vince comunque. La regola operativa diventa: regolarizzare via LoRA + early stopping + validation set rigoroso, non scegliere il modello più piccolo per default.
Nota: questo è un riferimento all’oggi (2026), in linea con il registro operativo del libro. Le scaling laws sono empirismo del trade-off in regime sovra-parametrizzato, non sua negazione.
Bias-varianza per il classification gap
Sezione intitolata “Bias-varianza per il classification gap”Una situazione comune nel debugging di un classificatore: training accuracy 95%, test accuracy 78%. Gap di 17 punti. È overfitting? Forse. La risposta dipende da qual è il floor irriducibile del task — se l’irriducibile è all’80%, il modello è quasi ottimo e il gap riflette la naturale lossiness del task. Se l’irriducibile è al 5%, il gap è enorme e il modello sta lasciando capacity sul tavolo.
Una euristica per stimare il floor: calcola l’accuracy umana sullo stesso task, su un sotto-set scelto con cura. Per task di percezione (image classification, speech recognition) gli umani sono il proxy del floor. Per task dove gli umani sbagliano sistematicamente (predizione di domanda di mercato, eventi rari) il floor è strutturalmente più alto e il gap riflette varianza più che capacity insufficiente.
Senza una stima del floor, “il modello è in overfit” è un’affermazione mal specificata. Sapere il floor cambia il piano d’azione.
Diagnostica operativa: leggere le curve di learning
Sezione intitolata “Diagnostica operativa: leggere le curve di learning”Saper guardare due curve insieme — training error e validation error in funzione di una variabile (epoche, taglia del dataset, complessità del modello) — è il modo pratico di tradurre la teoria in azioni.
Caso underfit (alto bias): training error e validation error entrambi alti, gap fra loro piccolo. Aggiungere dati non aiuta (le curve resterebbero parallele alte). Bisogna aumentare capacity, ridurre regolarizzazione, cambiare famiglia di modelli, aggiungere feature più espressive.
Caso overfit (alta varianza): training error basso, validation error alto, gap grande. Aggiungere dati aiuta (la val curve scenderebbe avvicinandosi alla train). In alternativa: aumentare regolarizzazione, ridurre capacity, fare data augmentation, applicare early stopping, fare bagging.
Caso ambiguo: train error basso, val error basso, gap moderato. Probabilmente sei vicino al sweet spot. Tuning fine via cross-validation può ancora dare miglioramenti, ma il margine è piccolo.
Caso patologico: training error alto, validation error basso. Quasi sempre è un bug (data leakage al contrario, set scambiati, normalizzazione fatta male). Va indagato prima di qualunque altra azione.
Applicazioni pratiche
Sezione intitolata “Applicazioni pratiche”Cross-validation per stimare la generalizzazione
Sezione intitolata “Cross-validation per stimare la generalizzazione”K-fold cross-validation è lo strumento standard. Si divide il dataset in k parti, si addestra k volte usando k-1 parti come training e una come validation, si media. Tipicamente k = 5 o k = 10. È un compromesso: k piccolo dà stima più rumorosa ma più veloce; k grande dà stima più stabile ma costosa. Leave-one-out (k = N) è asintoticamente corretto ma high-variance.
flowchart LR
D[Dataset D] --> S[Split in k fold]
S --> F1[Fold 1 = val, resto = train]
S --> F2[Fold 2 = val, resto = train]
S --> Fk[Fold k = val, resto = train]
F1 --> M1[Train modello, valuta]
F2 --> M2[Train modello, valuta]
Fk --> Mk[Train modello, valuta]
M1 --> A[Errore medio]
M2 --> A
Mk --> A
A --> E[Stima di generalizzazione]
Figura 5 — schema della k-fold cross-validation come stima dell’errore di generalizzazione tramite media degli errori sui k fold
flowchart LR
D[Dataset D] --> S[Split in k fold]
S --> F1[Fold 1 = val, resto = train]
S --> F2[Fold 2 = val, resto = train]
S --> Fk[Fold k = val, resto = train]
F1 --> M1[Train modello, valuta]
F2 --> M2[Train modello, valuta]
Fk --> Mk[Train modello, valuta]
M1 --> A[Errore medio]
M2 --> A
Mk --> A
A --> E[Stima di generalizzazione]
Figura 5 — flowchart in mermaid showing dataset D split into k folds, each iteration trains on k-1 folds and validates on one, final estimate is the mean across iterations
Regolarizzazione: scegliere λ via validation
Sezione intitolata “Regolarizzazione: scegliere λ via validation”La forza della penalità L2 (il λ) è un iperparametro. Si fissa una griglia di valori (es. {0.001, 0.01, 0.1, 1, 10}) e per ciascuno si stima l’errore di validation via cross-validation. Si sceglie il λ che minimizza. Lo stesso approccio per dropout rate, learning rate, profondità della rete.
Bagging in produzione: random forest e ensemble
Sezione intitolata “Bagging in produzione: random forest e ensemble”Random forest è bagging di alberi decisionali con feature subsampling. È robusto, gira veloce, dà spesso baseline competitive senza tuning eccessivo. Il numero di alberi M è “più è meglio è” fino a saturazione (centinaia, raramente migliaia). La varianza decresce come 1/M se gli alberi fossero perfettamente decorrelati; in pratica decresce più lentamente.
Boosting: gradient boosting e XGBoost
Sezione intitolata “Boosting: gradient boosting e XGBoost”XGBoost, LightGBM, CatBoost sono implementazioni efficienti di gradient boosting. Vincono ancora oggi su molti dataset tabulari, anche contro deep learning. La regolarizzazione è esplicita (max depth, learning rate, L1/L2 sui leaf weight) e si tuna via validation.
Early stopping
Sezione intitolata “Early stopping”Tieni fuori una validation set, valuta loss ogni epoca, ferma il training quando la val loss smette di scendere per N epoche consecutive (patience). Salva i pesi del miglior checkpoint. Strumento universale, costo nullo, efficacia alta.
Bayesian model averaging
Sezione intitolata “Bayesian model averaging”Una versione più rigorosa del bagging: invece di mediare uniformemente le predizioni di M modelli, si pesa ciascuno per la sua posterior probability data il dataset. Costoso da calcolare in pratica ma teoricamente ottimale sotto il modello bayesiano. Le ensemble pratiche (random forest, deep ensemble) sono approssimazioni grezze di questa idea: trattano tutti i modelli come ugualmente probabili.
Deep ensemble
Sezione intitolata “Deep ensemble”Per reti neurali, addestrare K reti dalla stessa architettura ma con diversi seed di inizializzazione e mediarne le predizioni è una forma robusta di bagging. Lakshminarayanan, Pritzel, Blundell (2017, Simple and Scalable Predictive Uncertainty Estimation Using Deep Ensembles) hanno mostrato che questa strategia migliora sia accuracy sia calibration, spesso meglio di approcci bayesiani approssimati come MC Dropout. Il costo è K volte il training; il guadagno è varianza ridotta e una stima dell’incertezza più affidabile.
Self-consistency negli LLM
Sezione intitolata “Self-consistency negli LLM”Quando un modello produce una catena di reasoning per risolvere un problema, una singola generazione è rumorosa: la stessa domanda dà risposte diverse a temperatura > 0. Self-consistency (Wang et al. 2022) campiona K trace e prende la risposta più frequente. È bagging implicito sulle traiettorie di reasoning, riduce la varianza della singola generazione. Il costo è K volte il calcolo; il guadagno è in robustezza.
Data augmentation come riduttore di varianza
Sezione intitolata “Data augmentation come riduttore di varianza”Per immagini: rotazioni, crop, flip, color jitter. Per testo: paraphrasing, back-translation, token masking. Per audio: SpecAugment, time stretching. L’effetto è ampliare la diversità del training set senza raccogliere nuovi dati. Da prospettiva bias-varianza, ogni augmentation iniettata è una forma di prior: stiamo dichiarando che certe trasformazioni preservano il label. Riduce la varianza del modello finale, e (se i prior sono corretti) non introduce bias significativo. Se i prior sono sbagliati — ad esempio flippare orizzontalmente cambia la semantica del label — introduce bias.
Scaling laws come empirismo
Sezione intitolata “Scaling laws come empirismo”Le scaling laws (Kaplan et al. 2020, Chinchilla 2022) mostrano che la loss decresce come legge di potenza in N (dati), P (parametri), C (compute), nei regimi che hanno studiato. Sono mappe empiriche del trade-off in regime sovra-parametrizzato: dato un budget compute, c’è un’allocazione ottimale tra dati e parametri. Non sono in contraddizione con la decomposizione bias-varianza; ne sono il prolungamento empirico fuori dall’asymptotics classico.
Dove si rompe
Sezione intitolata “Dove si rompe”Il quadro che abbiamo costruito ha confini precisi. Ignorarli porta a sbagliare decisioni.
L’assunzione i.i.d. spesso è falsa. La decomposizione assume che train e test siano campionati dalla stessa distribuzione, indipendentemente. In produzione la distribuzione cambia: gli utenti del 2025 non sono quelli del 2023, le query di un agente cambiano col tempo. Il distribution shift introduce un termine di errore che la decomposizione bias-varianza non cattura. Esistono framework dedicati (covariate shift, label shift, concept drift) ma sono separati dal trade-off classico.
È un framework asintotico. La decomposizione è “in attesa su tutti i dataset di taglia N”. Quando ne hai uno solo (la situazione normale), bias e varianza non sono direttamente misurabili. Sono costrutti concettuali utili a guidare il debugging, non numeri che salgono dal terminale. Le stime via bootstrap sono approssimazioni rumorose.
La decomposizione MSE non si trasferisce. Per zero-one loss, log-loss, ranking, F1, le formule cambiano e bias e varianza diventano interagenti. L’analisi di Domingos (2000) mostra che per zero-one loss una varianza alta può ridurre l’errore atteso quando la predizione media è dalla parte sbagliata della soglia decisionale — un fenomeno controintuitivo che la cornice MSE non prevede.
Double descent rompe la U classica. Sopra la soglia di interpolazione, aumentare i parametri non aumenta la varianza nel senso classico; il regime cambia regime. Per LLM e deep nets moderni, la regola “modello più piccolo riduce overfit” è scorretta come default. La regolarizzazione effettiva viene da SGD, dall’architettura, dal pre-training, in modi che non si vedono nei pesi grezzi.
Calibration è ortogonale. Un classificatore può avere accuracy alta e probabilità mal calibrate (Guo et al. 2017, On Calibration of Modern Neural Networks): quando dice “probabilità 0.9” non è effettivamente giusto il novanta per cento delle volte. Bias e varianza non parlano di calibration. Per applicazioni dove le probabilità contano (decisioni con costo asimmetrico, RL, abstention), serve uno strumento aggiuntivo (Platt scaling, temperature scaling, isotonic regression).
Sotto-popolazioni nascondono varianza. Una metrica aggregata media sopra utenti, lingue, domini, periodi temporali. Una performance media buona può nascondere varianza altissima per gruppi specifici. Per agenti LLM che servono utenti eterogenei, segregare le metriche per categoria è la differenza tra avere un sistema affidabile e averne uno che rompe per un sottoinsieme silenzioso. Questo è anche un tema di fairness, non solo di affidabilità statistica.
Cambiare struttura non è scivolare lungo la curva. La curva U classica suppone una famiglia di modelli parametrizzata in modo continuo (gradi del polinomio, profondità della rete). Passare da MLP a transformer non è un punto più a destra: è un’altra curva intera. Il framework non guida la scelta di architettura, solo la scelta di capacity entro una stessa famiglia.
Il rumore irriducibile non è osservabile. σ² è un’astrazione. In pratica si stima la sua grandezza dai residui del miglior modello disponibile, ma non si separa nettamente dal bias residuo. Quando si dice “il modello è arrivato al floor”, si sta facendo un’inferenza, non una misura.
Bias inteso male. La parola “bias” nel framework statistico è tecnica e neutra: errore sistematico tra predizione media e verità. Nel discorso pubblico su AI, “bias” significa anche pregiudizio sociale (gender bias, racial bias). Le due nozioni si toccano — un dataset non rappresentativo produce bias statistico che si manifesta come bias sociale — ma non sono identiche. Questo capitolo parla solo del bias statistico. Il bias nel senso etico-sociale richiede strumenti aggiuntivi: definizioni di fairness, audit, mitigation specifiche.
La varianza non è un nemico assoluto. In RL e in scenari di esplorazione attiva, una certa varianza è desiderabile perché spinge l’agente a provare azioni nuove. Strumenti come ε-greedy o Thompson sampling iniettano deliberatamente varianza nelle decisioni. La cornice bias-varianza è un framework supervisionato; va riadattato per regimi non supervisionati o decisionali.
Per task agentici l’i.i.d. cade ancora più drammaticamente. Un agente esegue azioni, raccoglie nuovi feedback, modifica lo stato. Il dataset implicito di “esperienze” non è i.i.d.: è generato in modo correlato dallo stesso agente. Bias e varianza non sono il framework giusto in questo regime; servono strumenti di RL (regret, exploration-exploitation) e di causal inference.
Collegamenti
Sezione intitolata “Collegamenti”- probabilita-base (capitolo 103): fornisce il linguaggio dell’aspettazione e della varianza usato nella decomposizione.
- bayes-base (capitolo 104): l’equivalenza ridge ↔ prior gaussiano è una specifica MAP bayesiana; serve come prerequisito per capire la regolarizzazione come prior.
- entropia-cross-entropy (capitolo 105): per loss diverse dall’MSE (log-loss, cross-entropy) la decomposizione cambia forma; capire la log-loss è capire perché.
- discesa-gradiente (capitolo 107): SGD è l’ottimizzatore che, in regime sovra-parametrizzato, sceglie tra le infinite soluzioni che interpolano; la sua “implicit regularization” è centrale per capire il double descent.
- curse-dimensionalita (capitolo 110): in alta dimensione la varianza è particolarmente difficile da controllare — più gradi di libertà, più sensibilità ai dettagli del singolo dataset.
- regolarizzazione (in preparazione): sviluppa gli strumenti — L1, L2, dropout, early stopping — qui solo abbozzati come spostamenti del trade-off.
- valutazione modelli (in preparazione): cross-validation, hold-out, metriche di test sono gli strumenti operativi per stimare bias e varianza in pratica.
- random-forest (in preparazione): bagging applicato ad alberi è la realizzazione canonica di “ridurre varianza”.
- gradient-boosting (in preparazione): boosting è la realizzazione canonica di “ridurre bias”.
- scaling-laws (in preparazione): empirismo del trade-off in regime sovra-parametrizzato moderno.
Tre miti da sfatare
Sezione intitolata “Tre miti da sfatare”Mito 1: “Più dati risolvono tutto”. Falso quando il problema è bias. Se il modello è strutturalmente incapace di rappresentare la funzione vera, dargli un milione di esempi in più non lo cambia: continuerà a sbagliare nello stesso modo coerente. Più dati riducono solo la varianza.
Mito 2: “Modello più piccolo = meno overfit”. Falso nel regime sovra-parametrizzato moderno (deep nets, LLM). Sotto la soglia di interpolazione vale; sopra, ridurre i parametri spesso peggiora le performance. La regola corretta è “regolarizza”, non “rimpicciolisci”.
Mito 3: “Cross-validation elimina l’overfit”. Falso. Cross-validation stima la generalizzazione, non la migliora. Se selezioni iperparametri sulla base di cross-validation troppo aggressivamente, finisci per overfittare la stessa cross-validation (il famoso “selection bias”). La pratica corretta è separare un test set finale che non viene mai usato per scelte di iperparametri.
Una nota storica sulle parole
Sezione intitolata “Una nota storica sulle parole”Il termine “bias” in statistica viene da Karl Pearson nei primi del Novecento, in opposizione a “unbiased estimator”. Indicava una proprietà desiderabile o non desiderabile dello stimatore. Solo a metà secolo, con il lavoro su decision theory di Abraham Wald e l’idea di “minimum mean square error”, la decomposizione moderna ha preso forma. Il dilemma — il fatto che ridurre uno aumenta l’altro nei regimi tipici — è un’osservazione successiva, parte folklore statistico, parte risultato formalizzato negli anni Settanta-Ottanta nelle reti neurali e nel kernel smoothing.
L’uso del termine “varianza” nel framework è specifico: non è la varianza della distribuzione P(y|x), ma la varianza della procedura di stima. È la stessa parola in due sensi vicini. Un’attenzione che la prima esposizione spesso glissa.
Sintesi operativa
Sezione intitolata “Sintesi operativa”Tre frasi da appendere al muro.
Primo: l’errore di un modello è la somma di tre cose, non di una. Un risultato deludente può venire da bias, da varianza o da rumore irriducibile, e la cura è diversa per ciascuno.
Secondo: aggiungere dati riduce la varianza ma non il bias. Aggiungere capacity riduce il bias ma alza la varianza. Regolarizzare scambia bias per varianza nella direzione opposta.
Terzo: nel regime sovra-parametrizzato moderno, la regola “più piccolo è meglio per evitare overfit” è obsoleta. La regolarizzazione effettiva viene da SGD, dal pre-training, dalla scelta di architettura, in modi che non si vedono contando i parametri.
Per andare oltre
Sezione intitolata “Per andare oltre”- Geman, S., Bienenstock, E., Doursat, R. (1992), Neural Networks and the Bias/Variance Dilemma. Il paper canonico, leggibile, mostra anche perché la regolarizzazione esplicita è preferibile a una scelta architetturale rigida.
- Hastie, T., Tibshirani, R., Friedman, J. (2009), The Elements of Statistical Learning, capitolo 7. Trattazione standard di model assessment, cross-validation, bootstrap, criteri AIC/BIC. Riferimento per il rigore statistico.
- Belkin, M., Hsu, D., Ma, S., Mandal, S. (2019), Reconciling Modern Machine-Learning Practice and the Classical Bias–Variance Trade-off, PNAS. Il paper che documenta il double descent, accessibile e con figure chiare.
- Nakkiran, P., et al. (2020), Deep Double Descent: Where Bigger Models and More Data Hurt, ICLR. Estensione empirica su deep nets, mostra che il fenomeno appare anche aumentando i dati.
- Domingos, P. (2000), A Unified Bias-Variance Decomposition, ICML. Per chi vuole capire come la cornice si estende oltre l’MSE e dove smette di essere additiva.
- Bousquet, O., Elisseeff, A. (2002), Stability and Generalization, JMLR. Trattazione formale del legame tra stabilità di uno stimatore e capacità di generalizzare; complemento teorico alla cornice bias-varianza.
- Lakshminarayanan, B., Pritzel, A., Blundell, C. (2017), Simple and Scalable Predictive Uncertainty Estimation Using Deep Ensembles, NeurIPS. Mostra che una semplice ensemble di reti neurali batte approcci bayesiani approssimati su accuracy e calibration.