Bootstrap: stimare l'incertezza ricampionando i dati
Quando non esiste una formula per lo standard error, si simula la distribuzione campionaria pescando dal campione stesso — con reinserimento, migliaia di volte.
Perché questo capitolo
Sezione intitolata “Perché questo capitolo”Hai un numero: la mediana dei tempi di risposta di un servizio, il coefficiente di correlazione fra due metriche, l’accuratezza di un modello su quattrocento problemi di un benchmark. Il numero da solo non basta. La domanda vera dell’inferenza statistica è sempre la stessa: quanto cambierebbe se rifacessi l’esperimento? Senza una barra d’errore attorno a quel numero, non sai se un miglioramento è reale o è il rumore del campione che ti è capitato.
Per la media campionaria sai rispondere: il teorema del limite centrale ti regala una distribuzione normale e una formula chiusa per lo standard error. Ma prova a chiederti lo standard error della mediana, o di un rapporto fra due somme, o del coefficiente di correlazione, o della differenza fra due punteggi F1. Le formule analitiche o non esistono, o esistono solo sotto assunzioni distributive — tipicamente la normalità della popolazione — che nella pratica raramente reggono. Per decenni la statistica ha affrontato questo muro con approssimazioni laboriose, derivate a mano caso per caso.
Il punto non è accademico. La maggior parte dei numeri che contano davvero in un sistema reale non sono medie semplici. Un tempo di risposta si riassume con la mediana o con il 95-esimo percentile, non con la media, perché la media è schiacciata dagli outlier. Una metrica di qualità è un F1 o un’AUC. Un confronto fra due versioni è una differenza fra due di queste quantità. Per ognuno di questi numeri, la domanda “quanto è incerto?” è legittima e spesso decisiva — e per nessuno di essi il manuale di statistica classica ha una formula pronta. È in questo vuoto che il bootstrap diventa lo strumento di lavoro quotidiano.
Il bootstrap aggira il muro con una mossa che, a prima vista, sembra barare: invece di calcolare la distribuzione campionaria con la matematica, la simula ricampionando dai dati che già hai. È uno dei metodi più usati della statistica applicata, e capirlo bene cambia il modo in cui leggi qualsiasi numero prodotto da un campione — incluso ogni punteggio su un leaderboard di modelli. Questo capitolo lo costruisce dall’intuizione, ne mostra le tre famiglie di intervalli di confidenza, traccia il ponte verso il bagging e le random forest del machine learning, e dedica ampio spazio ai casi in cui il metodo, silenziosamente, fallisce.
C’è una seconda ragione, meno ovvia, per cui questo capitolo conta per chi costruisce sistemi di intelligenza artificiale. Il bootstrap non è solo uno strumento di misura: è anche un ingrediente di modelli. Il bagging e le random forest — fra le tecniche di machine learning più solide e usate — sono il ricampionamento bootstrap applicato direttamente all’apprendimento, non a posteriori per metterci una barra d’errore. Capire il bootstrap come metodo inferenziale e capire perché una random forest funziona sono, una volta scavato, la stessa comprensione. Questo capitolo le tiene insieme di proposito: la prima metà costruisce il bootstrap come strumento di incertezza, la seconda mostra che lo stesso meccanismo, con uno scopo diverso, diventa un algoritmo di predizione.
Contesto
Sezione intitolata “Contesto”Nel 1979 Bradley Efron, statistico americano di Stanford, pubblica sul giornale The Annals of Statistics (vol. 7, n. 1, pp. 1-26) un articolo dal titolo “Bootstrap Methods: Another Look at the Jackknife”. È uno dei primi metodi statistici nati esplicitamente per essere eseguiti da un calcolatore: senza un computer che ripeta migliaia di volte lo stesso calcolo, il bootstrap è impraticabile. Appartiene a una classe che gli statistici chiamano computer-intensive, metodi che diventano possibili solo quando il costo del calcolo crolla.
Per cogliere quanto sia un cambio di paradigma, conviene ricordare cosa significava “calcolare un intervallo di confidenza” prima del 1979. Significava aprire un libro, trovare la formula adatta allo stimatore e alle assunzioni del caso, e — se la formula non c’era — derivarne una nuova, un lavoro matematico che poteva richiedere settimane e una preparazione specialistica. Il bootstrap rende quel lavoro, nella maggioranza dei casi pratici, superfluo: si scrive un ciclo di poche righe e si lascia girare. Non è un miglioramento incrementale di una tecnica esistente, è un modo diverso di pensare al problema. Per questo il bootstrap viene spesso citato come l’esempio per eccellenza di come il calcolo a basso costo abbia cambiato non solo la velocità ma la forma della statistica.
Il nome viene da un’espressione idiomatica inglese: “to pull oneself up by one’s bootstraps”, tirarsi su per i lacci degli stivali — fare qualcosa di apparentemente impossibile contando solo sulle proprie forze. È la sensazione esatta del metodo: stimare l’incertezza di uno stimatore senza raccogliere un solo dato nuovo, usando soltanto il campione che si ha già in mano.
Il momento storico conta. La statistica matematica del Novecento, prima del bootstrap, aveva costruito un repertorio raffinato di formule per la distribuzione campionaria: la di Student per la media, la chi-quadro per la varianza, la per i rapporti di varianze, le approssimazioni asintotiche per gli stimatori di massima verosimiglianza. Era un repertorio potente ma rigido: ogni formula valeva per uno stimatore specifico e sotto assunzioni specifiche, quasi sempre la normalità della popolazione. Per uno stimatore fuori dal repertorio non c’era risposta pronta — bisognava derivarne una nuova a mano, un lavoro da specialisti che poteva durare una carriera. Il bootstrap rovescia il rapporto fra matematica e calcolo: invece di pensare di più per calcolare di meno, calcola di più per pensare di meno. È un baratto reso conveniente solo dal crollo del costo del calcolo, e per questo non poteva nascere prima.
Il bootstrap non nasce nel vuoto. Il suo predecessore diretto è il jackknife, una tecnica proposta dallo statistico britannico Maurice Quenouille nel 1949 e sviluppata negli anni ‘50 da John Tukey, statistico americano dei Bell Labs (lo stesso che coniò il termine “bit” e “software”). Il sottotitolo dell’articolo di Efron — “Another Look at the Jackknife” — è una dichiarazione di intenti: il bootstrap viene presentato come la generalizzazione del jackknife, e una delle dimostrazioni centrali del paper è che il jackknife non è altro che un’approssimazione lineare del bootstrap. Torneremo su questa relazione.
Dopo il 1979 il metodo si diffonde rapidamente. Negli anni ‘80 Efron e altri ne sviluppano le varianti — il bootstrap bayesiano nel 1981, gli intervalli BCa nel 1987, l’approssimazione ABC nel 1992 — e nel 1993 esce An Introduction to the Bootstrap di Efron e Robert Tibshirani (statistico canadese, allora a Stanford), il libro che lo porta fuori dalla statistica matematica e dentro la cassetta degli attrezzi di chiunque analizzi dati. Oggi il bootstrap è implementato in ogni ambiente statistico e di data science, dalla funzione boot di R a scipy.stats.bootstrap di Python, ed è una delle prime tecniche che si insegna quando si vuole una barra d’errore senza fare assunzioni.
La fortuna del metodo si misura anche da una caratteristica didattica rara: è uno dei pochi strumenti statistici sofisticati che si può spiegare senza scrivere una sola formula difficile. L’idea — ricampiona dai tuoi dati e guarda quanto la statistica balla — sta in una frase, e l’algoritmo in cinque righe di pseudocodice. Questa accessibilità non è un dettaglio cosmetico: è una delle ragioni per cui il bootstrap ha attraversato il confine fra statistica e informatica applicata con tanta facilità, ed è il motivo per cui questo capitolo, pur arrivando dopo capitoli densi di formule, può costruire il suo argomento centrale quasi interamente con metafore concrete.
Nel grafo di questa Parte, il bootstrap si colloca subito dopo gli strumenti analitici dell’inferenza. La legge dei grandi numeri e il teorema del limite centrale danno la distribuzione campionaria della media per via matematica; gli intervalli di confidenza la traducono in una barra d’errore; la stima puntuale introduce bias, varianza e standard error di uno stimatore. Il bootstrap risponde alla stessa identica domanda di questi capitoli — qual è la distribuzione campionaria dello stimatore — ma con una strategia opposta: dove l’analisi deriva, il bootstrap simula.
L’intuizione
Sezione intitolata “L’intuizione”Prima del formalismo, due modi distinti di vedere la stessa idea. Tienili entrambi: il primo spiega perché il metodo dovrebbe funzionare, il secondo spiega come lo si esegue concretamente. I due angoli non sono ridondanti — sono complementari. Chi capisce solo il “come” sa eseguire il bootstrap ma non sa riconoscere quando non va usato; chi capisce solo il “perché” coglie l’idea ma fatica a tradurla in codice. La comprensione completa tiene insieme la giustificazione e la procedura, e le due sottosezioni che seguono servono esattamente a costruire entrambe.
Primo angolo: il campione come surrogato della popolazione
Sezione intitolata “Primo angolo: il campione come surrogato della popolazione”La realtà ha due livelli. C’è una popolazione — tutti i possibili tempi di risposta del servizio, tutti i possibili problemi che potresti dare al modello — descritta da una distribuzione di probabilità che chiamiamo . E c’è un campione di osservazioni, estratto da quella popolazione, che è tutto ciò che osservi davvero.
Lo stimatore — la mediana, la correlazione, l’accuratezza — è una funzione del campione. Il suo valore varia da campione a campione: se raccogliessi un secondo campione di osservazioni, otterresti un numero leggermente diverso. La distribuzione campionaria dello stimatore è il modo in cui questo numero si distribuirebbe ripetendo infinite volte il campionamento dalla popolazione. È esattamente ciò che vuoi conoscere, e ciò che, di norma, non puoi osservare: hai un campione solo, non infiniti.
Immagina, per un momento, di poter campionare dalla popolazione vera quante volte vuoi. Estrarresti un campione, calcoleresti lo stimatore, lo segneresti; estrarresti un secondo campione, di nuovo, e così via mille volte. L’istogramma di quei mille valori sarebbe la distribuzione campionaria, e da lì leggeresti standard error e intervalli senza bisogno di alcuna formula. Questo procedimento ideale ha un nome — simulazione Monte Carlo dalla popolazione — ed è esattamente ciò che vorresti fare, se solo avessi accesso alla popolazione. Il problema è che non ce l’hai: la popolazione è ignota, è ciò che stai cercando di studiare. Il bootstrap è la versione realizzabile di questo procedimento ideale, ottenuta con una sola sostituzione: dove servirebbe la popolazione vera, si mette la sua migliore stima.
Ecco la mossa del bootstrap. Non hai la popolazione , ma hai la sua migliore stima possibile: la distribuzione empirica, che chiameremo . La distribuzione empirica è semplicemente il campione stesso visto come distribuzione di probabilità, dove ognuno degli dati osservati ha peso . Se non puoi campionare dalla popolazione vera per studiare come varia lo stimatore, allora campiona dalla popolazione stimata .
È il principio plug-in: ovunque nella teoria comparirebbe la distribuzione vera , sostituiscila con la distribuzione empirica e procedi al calcolo. Il principio plug-in da solo non è il bootstrap — è un’idea più antica e più generale. Stimare la media della popolazione con la media del campione, per dire, è già un’applicazione del plug-in: la media vera è un integrale rispetto a , e sostituendo a quell’integrale diventa la media campionaria. Il bootstrap è il plug-in applicato a un oggetto particolare e più ambizioso: non un singolo numero, ma l’intera distribuzione campionaria di uno stimatore. Ed è qui che serve il calcolo, perché quella distribuzione, sotto , non si scrive con una formula: si ottiene simulando. Il bootstrap aggiunge quindi un terzo livello sotto i primi due, costruito per imitarli:
Popolazione produce campione; campione produce ricampione. Il modo in cui lo stimatore varia da ricampione a ricampione approssima il modo in cui varierebbe da campione a campione. Questa è l’intera scommessa del bootstrap: se il campione rappresenta bene la popolazione, allora la variabilità osservata al livello inferiore è una buona copia della variabilità al livello superiore.
Vale la pena nominare esplicitamente la relazione fra i due livelli, per non scivolare in una classe di affermazione sbagliata. Il livello campione/ricampione non è il livello popolazione/campione: è un’analogia costruita apposta perché lo imiti. Non c’è alcuna identità fra i due, e nessuna garanzia automatica che funzioni — la garanzia, quando c’è, è asintotica e condizionata. Tenere chiara questa distinzione evita l’errore concettuale più comune sul bootstrap, quello di trattarlo come se generasse dati veri o come se la distribuzione bootstrap fosse la vera distribuzione campionaria. È una copia, una buona copia sotto certe condizioni, e nient’altro.
Secondo angolo: il sacchetto di palline
Sezione intitolata “Secondo angolo: il sacchetto di palline”Mettiti i dati in un sacchetto, una pallina per osservazione: palline in tutto. Estrai una pallina, leggi il valore, rimettila dentro il sacchetto. Ripeti l’estrazione volte. Quello che ottieni è un ricampione bootstrap: un nuovo insieme di valori, della stessa dimensione dell’originale.
La parola chiave è “rimettila dentro”: il ricampionamento è con reinserimento (in inglese with replacement). La conseguenza è che alcune osservazioni dell’originale compaiono nel ricampione due o tre volte, mentre altre non compaiono affatto. Se invece estraessi senza reinserimento, ripescheresti ogni volta tutte e le palline e otterresti sempre lo stesso campione di partenza, soltanto in ordine diverso: informazione nuova zero. È il reinserimento che genera variabilità, ed è il reinserimento la differenza che separa il bootstrap dal jackknife e dai test di permutazione.
Un modo equivalente di descrivere un ricampione bootstrap è in termini di conteggi. Invece di pensare a quali valori sono stati pescati, pensa a quante volte ciascuno degli dati originali compare nel ricampione: il dato 1 compare volte, il dato 2 compare volte, e così via, con . I conteggi seguono una distribuzione nota — la multinomiale — e questo modo di vederla non è solo elegante: è la base di varianti efficienti del bootstrap, come quella che genera i conteggi da una distribuzione di Poisson per evitare di costruire fisicamente i ricampioni. Per gli scopi di questo capitolo basta l’immagine del sacchetto; ma sapere che dietro c’è una multinomiale aiuta a non vedere il bootstrap come un trucco e a collocarlo in un quadro probabilistico preciso.
Perché estrarre con reinserimento è la cosa giusta? Perché pescare volte con reinserimento da un sacchetto di dati equivale, esattamente, a campionare osservazioni dalla distribuzione empirica . I due angoli sono la stessa cosa: il sacchetto di palline è la distribuzione empirica, e ogni ricampione bootstrap è un campione di dimensione da .
C’è un dettaglio sottile da chiarire, perché è fonte di confusione frequente. Il ricampione ha la stessa dimensione dell’originale, non una più piccola. La tentazione di pescare meno di valori — diciamo — per “non riusare troppo i dati” è sbagliata: la dimensione del campione influenza la variabilità dello stimatore, e per imitare correttamente la variabilità del campione vero il ricampione deve avere la sua stessa dimensione. Pescare valori con reinserimento è esattamente ciò che riproduce un campione di dimensione dalla popolazione stimata. La ripetizione di alcuni dati e l’assenza di altri non è un difetto da minimizzare: è precisamente il meccanismo che genera la variabilità che si vuole misurare.
C’è un numero che cade fuori da questa procedura e che vale la pena fissare subito, perché tornerà centrale più avanti. Quanti dati distinti dell’originale finiscono in un ricampione bootstrap? La probabilità che una specifica osservazione non venga pescata in una singola estrazione è . Le estrazioni sono indipendenti, quindi la probabilità che non venga pescata in nessuna delle estrazioni è:
In parole povere, questa è la probabilità che un dato resti completamente fuori dal ricampione. Per grande, questa quantità tende a un limite notevole:
dove è la base dei logaritmi naturali. In parole: circa il 36,8% delle osservazioni resta fuori da ogni ricampione, e quindi un ricampione bootstrap contiene in media solo il 63,2% dei dati distinti dell’originale. Sembra un dettaglio aritmetico; nel ponte verso il machine learning diventa il fondamento di una tecnica chiamata out-of-bag error.
Perché la scommessa funziona, vista da vicino
Sezione intitolata “Perché la scommessa funziona, vista da vicino”Vale la pena spendere un paragrafo in più su perché la variabilità al livello inferiore — campione/ricampione — sia una copia affidabile della variabilità al livello superiore — popolazione/campione. La ragione profonda è un teorema sul comportamento della distribuzione empirica: man mano che cresce, la distribuzione empirica converge alla distribuzione vera , e ci converge in modo uniforme. È il teorema di Glivenko-Cantelli, a volte chiamato il “teorema fondamentale della statistica”. In parole povere, dice che con abbastanza dati il campione diventa una buona copia della popolazione.
Se è una buona copia di , allora campionare da — che è ciò che fa il bootstrap — imita bene il campionare da . La variabilità dello stimatore calcolato su ricampioni da approssima la variabilità dello stesso stimatore calcolato su campioni da . Questa è la giustificazione formale della scommessa, e spiega anche due cose annunciate altrove: perché il bootstrap è uno strumento asintotico — le sue garanzie valgono per grande, non per qualunque — e perché fallisce quando resta una cattiva copia di , cioè con campioni molto piccoli o popolazioni patologiche. Il bootstrap non aggira il bisogno di dati: lo trasforma in un calcolo invece che in una formula.
C’è una sottigliezza in più, che separa la consistenza del bootstrap dalla semplice convergenza di a . Non basta che il campione assomigli alla popolazione: serve anche che lo stimatore si comporti bene, che reagisca in modo regolare a piccole perturbazioni della distribuzione da cui si campiona. Per la media questa regolarità c’è; per il massimo non c’è, e infatti il massimo è l’esempio di rottura per eccellenza. La validità del bootstrap, dimostrata in generale da David Freedman e Peter Bickel all’inizio degli anni ‘80, dipende quindi da due ingredienti insieme: un campione abbastanza grande e uno stimatore abbastanza liscio. Quando uno dei due manca, la scommessa salta — ed è esattamente la mappa dei fallimenti che la sezione “Dove si rompe” percorrerà uno per uno.
La meccanica
Sezione intitolata “La meccanica”Fissiamo la notazione. Il campione è . Lo stimatore è una qualunque funzione del campione, che scriviamo : può essere la media, la mediana, una correlazione, un’accuratezza, qualsiasi cosa si calcoli a partire dai dati. Il valore calcolato sul campione vero lo chiamiamo stima osservata. L’asterisco, nella notazione che segue, marca tutto ciò che vive nel mondo bootstrap: è un ricampione, è lo stimatore calcolato su un ricampione. È una convenzione che torna in tutta la letteratura sul bootstrap e conviene farci l’occhio: l’asterisco distingue il livello campione/ricampione dal livello popolazione/campione.
L’algoritmo del bootstrap non parametrico è questo:
1. Calcola la stima osservata theta_hat = s(x).2. Per b = 1, 2, ..., B: a. Costruisci x*_b estraendo n osservazioni con reinserimento da x. b. Calcola theta_hat*_b = s(x*_b).3. L'insieme dei theta_hat*_b raccolti forma la distribuzione bootstrap.4. Standard error bootstrap = deviazione standard campionaria dei theta_hat*_b.5. Bias bootstrap = media dei theta_hat*_b - theta_hat.Riga per riga. Il passo 1 calcola il numero che ti interessa sul campione vero. Il passo 2 è il cuore: volte, costruisci un ricampione (estrazione con reinserimento, passo 2a) e ricalcola lo stesso stimatore su quel ricampione (passo 2b). Il passo 3 raccoglie i valori ottenuti: il loro istogramma è la stima bootstrap della distribuzione campionaria di . Da qui, il passo 4 legge lo standard error come la deviazione standard di quei valori, e il passo 5 stima il bias come scarto fra il centro della distribuzione bootstrap e la stima osservata.
Conviene fermarsi un istante sul passo 5, perché la stima del bias è un uso del bootstrap meno noto del calcolo dello standard error ma altrettanto importante. Il bias di uno stimatore è lo scarto sistematico fra il valore medio dello stimatore e il valore vero del parametro: alcuni stimatori, anche ragionevoli, tendono in media a sovrastimare o sottostimare. Il bootstrap lo stima per analogia: come la stima osservata sta al parametro vero, così la media dei valori bootstrap sta a . La differenza fra la media dei e è quindi la stima bootstrap del bias, e si può perfino usarla per correggere la stima — sottraendola — anche se la correzione va fatta con prudenza, perché può aumentare la varianza. Il punto generale: una volta che hai la distribuzione bootstrap, ne leggi standard error, bias, intervalli di confidenza, tutto dallo stesso istogramma.
Quanto deve valere , il numero di ricampioni? È una scelta computazionale, non statistica. Per stimare uno standard error bastano fra 200 e 1000; Efron osservò che già fra 50 e 200 produce standard error ragionevoli. Per gli intervalli di confidenza serve più materiale, perché si leggono le code della distribuzione bootstrap e le code sono più rumorose del centro: lì si usano fra 2000 e 10000. Un punto importante, su cui torneremo nella sezione sui fraintendimenti: alzare riduce solo il rumore della simulazione, non l’incertezza statistica di fondo. Con infinito ottieni la distribuzione bootstrap esatta, che resta comunque un’approssimazione limitata dalla dimensione del campione.
Un’osservazione operativa che fa risparmiare tempo: i ricampioni sono completamente indipendenti l’uno dall’altro. Il calcolo dello stimatore sul ricampione non usa nulla del ricampione . In gergo si dice che il bootstrap è embarrassingly parallel, “imbarazzantemente parallelo”: distribuire i ricalcoli su tutti i core di una macchina, o su un cluster, non richiede coordinamento e dà uno speedup quasi lineare. È una proprietà che ritroveremo, identica, nel bagging.
Un avvertimento implementativo che salva da bug sottili: la riproducibilità. Poiché il bootstrap usa numeri casuali, due esecuzioni dello stesso codice danno intervalli leggermente diversi a meno di fissare il seme del generatore — nel codice degli esempi, np.random.default_rng(0). Senza un seme fisso, due colleghi che lanciano la stessa analisi ottengono numeri diversi, e diventa impossibile capire se una discrepanza è un errore o solo il rumore Monte Carlo. Fissare il seme, e riportarlo, è parte dell’igiene di un’analisi bootstrap seria. Con abbastanza grande la differenza fra due semi è trascurabile, ma “trascurabile” non significa “zero”, e in un confronto al limite della significatività anche un decimo di punto conta.
Non parametrico contro parametrico
Sezione intitolata “Non parametrico contro parametrico”L’algoritmo appena visto è la versione non parametrica: ricampiona direttamente dai dati osservati, senza assumere nulla sulla forma della distribuzione della popolazione. È il caso puro e il default.
Esiste anche un bootstrap parametrico. La differenza sta nel passo 2a. Invece di pescare dai dati, si assume che la popolazione segua una famiglia distributiva nota — per esempio una normale — se ne stimano i parametri dai dati (di solito con il metodo della massima verosimiglianza, che sceglie i parametri rendendo massima la probabilità dei dati osservati), e si generano i ricampioni simulando da quella distribuzione fittata. È più efficiente quando il modello distributivo è davvero corretto, perché sfrutta informazione in più. Ma reintroduce esattamente il rischio che il bootstrap non parametrico evitava: se la famiglia distributiva è sbagliata, le conclusioni lo sono. Il bootstrap parametrico è utile soprattutto quando è piccolo, e la distribuzione empirica è troppo grezza per fare da surrogato affidabile.
Un terzo caso ricorre nella regressione: il bootstrap dei residui. Si fitta il modello, si calcolano i residui (gli scarti fra valori osservati e predetti), si ricampionano i residui con reinserimento, e li si riattacca ai valori predetti per costruire dataset sintetici. Mantiene fissa la struttura dei predittori e assume che gli errori abbiano tutti la stessa varianza (omoschedasticità). Quando questa assunzione non regge, si preferisce ricampionare le righe intere.
Le due strategie in regressione — ricampionare i residui o ricampionare le righe — corrispondono a due idee diverse di cosa sia “casuale” nei dati. Ricampionare i residui tratta i valori dei predittori come fissi, dati, non soggetti a variazione: la sola casualità è nell’errore attorno alla retta. Ricampionare le righe intere tratta ogni osservazione — predittori inclusi — come una pescata casuale dalla popolazione. La prima è naturale in un esperimento dove i predittori sono stati scelti dallo sperimentatore; la seconda in uno studio osservazionale dove anche i predittori sono dati che capitano. Sceglierne una è una decisione di modellazione, non un tecnicismo: dichiara cosa si considera fisso e cosa variabile.
Il modo più chiaro di vedere la differenza fra non parametrico e parametrico è chiedersi da dove viene la casualità. Nel bootstrap non parametrico la casualità sta tutta negli indici estratti: la distribuzione da cui si pesca è la distribuzione empirica, fissata dai dati, e il metodo non ipotizza nulla sulla sua forma. Nel bootstrap parametrico la casualità sta nel generatore: si è scelta una famiglia — normale, gamma, Poisson — e si simula da quella, dopo averne fissato i parametri sui dati. Il primo è più onesto sull’ignoranza: non finge di sapere la forma della popolazione. Il secondo è più efficiente quando quella forma è davvero nota — per esempio in fisica, dove un modello teorico prescrive la distribuzione — ma paga il prezzo della mis-specificazione se la famiglia è sbagliata. In dubbio, e con non piccolissimo, il non parametrico è la scelta prudente; è anche il motivo per cui, quando si dice “il bootstrap” senza altra qualifica, si intende quello non parametrico.
Un esempio concreto chiarisce. Hai 20 misure di tempo di vita di un componente e vuoi un intervallo per la vita mediana. Sai, da motivi fisici, che i tempi di vita seguono una distribuzione esponenziale — una famiglia a un solo parametro. Il bootstrap parametrico stima quel parametro dalle 20 misure e poi genera ogni ricampione estraendo 20 nuovi numeri da un’esponenziale con quel parametro: i ricampioni contengono valori che nel campione originale non c’erano. Il bootstrap non parametrico, invece, ripescherebbe sempre e solo fra i 20 valori osservati. Con , se l’assunzione esponenziale è davvero corretta, la versione parametrica dà un intervallo più liscio e più accurato, perché non è limitata alla griglia grezza dei 20 punti. Se invece la vera distribuzione non è esponenziale, l’intervallo parametrico è preciso e sbagliato. È il compromesso di sempre: assumere di più paga, se l’assunzione regge.
Tre modi di costruire un intervallo di confidenza
Sezione intitolata “Tre modi di costruire un intervallo di confidenza”Dalla distribuzione bootstrap si ricava uno standard error con una semplice deviazione standard. Ricavarne un intervallo di confidenza — un intervallo che, ripetendo l’esperimento, contiene il parametro vero in una proporzione fissata di casi, diciamo il 95% — richiede una scelta in più. Esistono tre famiglie principali, in ordine crescente di sofisticazione.
Metodo percentile. Il più diretto. Ordina i valori bootstrap e prendi come estremi dell’intervallo i percentili empirici corrispondenti al livello voluto. Per un intervallo al 95%, l’intervallo è , dove e sono il percentile 2,5 e il percentile 97,5 dei ordinati. Concretamente, con ricampioni: ordina i 2000 valori, l’estremo inferiore è il 50-esimo valore (il 2,5% di 2000), l’estremo superiore è il 1950-esimo. È intuitivo, e ha due pregi notevoli: resta automaticamente dentro l’intervallo di valori ammissibili del parametro (un intervallo per un coefficiente di correlazione non uscirà mai da ), ed è invariante rispetto a trasformazioni monotone — se applichi una trasformazione monotona allo stimatore, l’intervallo si trasforma di conseguenza, senza ricalcoli. Il suo limite è che assume implicitamente che la distribuzione bootstrap sia centrata sulla stima e non distorta; in presenza di bias o di forte asimmetria, il metodo percentile sotto-copre, cioè il suo intervallo al 95% nominale contiene il vero valore meno del 95% delle volte. È il metodo da cui partire per la sua semplicità, sapendo che gli altri due esistono per i casi in cui questa assunzione di centratura non regge.
Metodo basic, o pivotale. Usa come quantità pivot lo scarto . L’intervallo che ne risulta è : in pratica, ribalta i percentili attorno alla stima osservata. Corregge in parte il bias che il metodo percentile ignora, ma in compenso può sforare l’intervallo dei valori ammissibili. Il nome “pivotale” merita una parola. Una quantità pivot è una funzione dei dati e del parametro la cui distribuzione non dipende dal parametro stesso; se lo scarto fosse esattamente pivotale, ribaltarne i quantili darebbe un intervallo esatto. Nella pratica lo scarto è solo approssimativamente pivotale, e da qui l’imprecisione del metodo. È istruttivo notare che, a partire dalla stessa distribuzione bootstrap, il metodo percentile e il metodo basic possono dare intervalli diversi, a volte sensibilmente: la distribuzione bootstrap è una sola, ma il modo di estrarne un intervallo è una scelta, e la scelta conta.
Metodo bootstrap-t, o studentizzato. Per ogni ricampione si calcola non solo lo stimatore ma anche una versione standardizzata, la t-statistica , dove è lo standard error stimato su quel ricampione specifico — il che spesso richiede un bootstrap annidato, un bootstrap dentro il bootstrap, e quindi costo computazionale alto. I quantili empirici di sostituiscono i quantili della distribuzione normale o della t di Student. Teoricamente è il metodo più accurato — è quello che gli statistici chiamano second-order accurate, con un errore di copertura che decresce come invece che come — perché la t-statistica è quasi pivotale, cioè la sua distribuzione dipende poco dal valore ignoto del parametro. Il prezzo è il costo e l’instabilità quando è rumoroso.
Vale la pena fermarsi su second-order accurate, perché la distinzione è la ragione per cui esistono metodi diversi. Ogni intervallo di confidenza ha un errore di copertura: il suo livello reale di copertura differisce da quello nominale di una piccola quantità. Per il metodo percentile, quell’errore decresce come — first-order accurate; per bootstrap-t e BCa decresce come — second-order accurate. Con , la differenza è fra un errore dell’ordine di e uno dell’ordine di : un intervallo “al 95%” che in realtà copre al 90% contro uno che copre al 94%. Per molte applicazioni la differenza non è decisiva e il percentile, più semplice, va benissimo; quando la copertura precisa conta — perché su quella decisione si gioca qualcosa di importante — il salto al BCa o al bootstrap-t si ripaga. È un compromesso fra accuratezza e costo, ed è bene farlo da svegli.
C’è un quarto metodo, intermedio fra percentile e bootstrap-t per sofisticazione, che è di fatto lo standard di riferimento: il BCa (sigla di bias-corrected and accelerated, corretto per il bias e accelerato), introdotto da Efron nel 1987. Parte dal metodo percentile, ma invece di prendere il percentile 2,5 e 97,5 fissi, sceglie due percentili corretti tramite due parametri stimati dai dati. Il primo parametro, (correzione di bias), misura quanto la distribuzione bootstrap è spostata rispetto alla stima osservata, e si stima dalla frazione di valori bootstrap che cadono sotto . Il secondo, (accelerazione), misura quanto lo standard error dello stimatore cambia al variare del valore del parametro — in sostanza l’asimmetria — e si stima tipicamente con un jackknife. Il BCa è second-order accurate come il bootstrap-t, ma in più rispetta l’intervallo dei valori ammissibili ed è invariante a trasformazioni monotone. È l’opzione di default in molte librerie, per esempio scipy.stats.bootstrap in Python.
L’intuizione dietro le due correzioni del BCa, senza formule. Pensa al metodo percentile come a un fotografo che assume che il soggetto sia centrato e dritto nell’inquadratura. La correzione di bias è il riconoscimento che il soggetto può essere spostato di lato: se più della metà dei valori bootstrap cade sotto la stima osservata, la distribuzione è spostata, e i due percentili vanno presi non a 2,5 e 97,5 ma a valori traslati per compensare. La correzione di accelerazione è il riconoscimento che il soggetto può essere anche inclinato: l’incertezza dello stimatore può essere più grande da un lato che dall’altro, e misura quanto. Mettendo insieme le due correzioni, il BCa sceglie due percentili asimmetrici — magari 1,1 e 96,8 invece di 2,5 e 97,5 — che tengono conto sia dello spostamento sia dell’inclinazione. Quando la distribuzione bootstrap è già centrata e simmetrica, entrambe le correzioni si annullano e il BCa coincide con il percentile: il metodo più semplice è il caso limite del più raffinato.
Una avvertenza onesta: nessun metodo domina in tutti i casi. Gli studi di simulazione mostrano che con campioni molto piccoli il semplice metodo percentile a volte ottiene una copertura migliore del BCa, mentre BCa e bootstrap-t prevalgono nettamente quando la distribuzione è marcatamente asimmetrica. La scelta è un compromesso fra accuratezza, costo e robustezza.
Una griglia rapida per orientarsi nella scelta:
| metodo | costo | accuratezza | rispetta il range | quando usarlo |
|---|---|---|---|---|
| percentile | basso | prima ordine | sì | default semplice, distribuzione quasi simmetrica |
| basic / pivotale | basso | prima ordine | no | quando si sospetta un bias da correggere |
| bootstrap-t | alto | secondo ordine | no | massima accuratezza, stabile, costo accettabile |
| BCa | medio | secondo ordine | sì | scelta di riferimento, distribuzione asimmetrica |
La riga “rispetta il range” merita una nota: significa che l’intervallo non esce mai dall’insieme dei valori che il parametro può assumere. Un intervallo per una probabilità deve stare in , uno per una correlazione in . Percentile e BCa lo garantiscono per costruzione, perché leggono percentili della distribuzione bootstrap, che è fatta di valori ammissibili; il metodo basic e il bootstrap-t, che ribaltano o riscalano, possono sforare e produrre estremi assurdi — un limite superiore di per una probabilità. Quando capita, è un segnale che il metodo scelto non è adatto a quella statistica.
Il jackknife: il predecessore e il parente
Sezione intitolata “Il jackknife: il predecessore e il parente”Il metodo che il sottotitolo dell’articolo di Efron promette di riguardare merita una pagina a sé, perché chiarisce per contrasto cosa il bootstrap aggiunge. Il jackknife è anch’esso un metodo di ricampionamento, ma di natura diversa. Invece di estrarre osservazioni con reinserimento, costruisce pseudo-campioni togliendo ogni volta una sola osservazione: il primo pseudo-campione è il campione senza , il secondo senza , e così via. Si ricalcola lo stimatore su ciascuno degli pseudo-campioni — questi valori si chiamano leave-one-out — e dalla loro dispersione si stimano varianza e bias.
Le differenze con il bootstrap sono tre, e tutte importanti. Primo: il jackknife non usa reinserimento, e i suoi pseudo-campioni hanno dimensione , non . Secondo: il jackknife è deterministico — gli pseudo-campioni sono fissati dal campione, non c’è alcuna estrazione casuale, e quindi nessun rumore Monte Carlo da controllare con un parametro . Terzo, e cruciale: il jackknife produce esattamente pseudo-campioni, mentre il bootstrap ne produce quanti se ne vogliono.
Efron dimostra nel suo articolo che il jackknife è l’approssimazione lineare del bootstrap. In parole povere: se lo stimatore è una funzione abbastanza liscia dei dati, jackknife e bootstrap danno quasi la stessa risposta, perché localmente lo stimatore si comporta come una retta e togliere un’osservazione cattura bene la pendenza di quella retta. Ma quando lo stimatore è non lineare o non liscio — la mediana è l’esempio che Efron usa — l’approssimazione lineare crolla, e il jackknife sbaglia mentre il bootstrap regge. La relazione fra i due è quindi doppia: storicamente è una filiazione documentata, il bootstrap nasce esplicitamente come generalizzazione del jackknife; matematicamente è un risultato di approssimazione, dimostrato nel paper, che colloca il jackknife come caso linearizzato del bootstrap. Vale la pena tenere distinte le due classi di affermazione: la prima è storia, la seconda è un teorema.
C’è anche un punto in cui i due si rincontrano nella pratica: la stima del parametro di accelerazione dell’intervallo BCa si fa, di solito, proprio con un jackknife sulla skewness dei valori leave-one-out. Il predecessore sopravvive come ingrediente interno del metodo che lo ha generalizzato.
Resta una domanda legittima: se il bootstrap è più generale, perché conoscere ancora il jackknife? Per due ragioni pratiche. La prima: il jackknife è deterministico e veloce — solo ricalcoli, nessuna scelta di , nessun seme casuale — e per statistiche lisce dà la stessa risposta del bootstrap a un costo minore. La seconda: il jackknife è ancora vivo dentro il bootstrap, come l’ingrediente del BCa appena visto. Conoscerlo non è erudizione storica: è capire un mattone di cui il metodo che si usa è fatto. Vale la pena ricordare, infine, che il jackknife stesso aveva un predecessore — l’idea di Quenouille nasceva per correggere il bias di uno stimatore, non la sua varianza, e solo Tukey la estese alla stima della varianza. È una catena di idee, ciascuna che generalizza la precedente, e il bootstrap ne è l’anello più ampio, non l’ultimo immaginabile.
Esempio numerico: lo standard error della mediana
Sezione intitolata “Esempio numerico: lo standard error della mediana”Prendi un campione di nove tempi di risposta, in millisecondi, ordinati: 120, 135, 142, 150, 168, 175, 190, 240, 600. La mediana osservata è il valore centrale, 168. Non esiste una formula chiusa semplice per lo standard error della mediana: il teorema del limite centrale parla della media, non della mediana, e la teoria asintotica della mediana richiede di stimare la densità della popolazione nel punto mediano, cosa tutt’altro che immediata.
Il bootstrap risolve in modo meccanico. Estrai nove valori con reinserimento dal campione e calcola la mediana. Un ricampione possibile è , la cui mediana ordinata è 168. Un altro è , mediana 150. Ripeti volte.
Soffermiamoci su cosa esce. Per un campione così piccolo, la mediana di un ricampione può assumere soltanto pochi valori distinti — deve comunque essere uno dei nove numeri originali. La distribuzione bootstrap della mediana, quindi, non è una curva liscia ma un insieme di barre verticali concentrate su 142, 150, 168, 175 e 190, con altezze diverse. Una tabella tipica di quelle altezze potrebbe somigliare a questa:
| valore della mediana | frequenza bootstrap |
|---|---|
| 142 | ~9% |
| 150 | ~22% |
| 168 | ~38% |
| 175 | ~21% |
| 190 | ~10% |
La barra più alta sta su 168, la mediana osservata, com’è ragionevole. Ma le barre non sono simmetriche, e il punto è proprio questo: i valori bassi e quelli alti non si bilanciano. La deviazione standard di questa distribuzione è lo standard error bootstrap della mediana; i suoi percentili 2,5 e 97,5 danno l’intervallo di confidenza percentile, qualcosa come . L’outlier a 600 contribuisce a tirare la coda destra della distribuzione bootstrap, rendendola asimmetrica. È esattamente il tipo di situazione in cui un intervallo BCa, che corregge per l’asimmetria, dà una risposta più accurata del percentile. È anche un assaggio di un limite: con la distribuzione bootstrap è grossolana, fatta di pochi gradini, e nessuna scelta di la rende fine — torneremo su questo nella sezione sui campioni piccoli.
Esempio in codice: intervallo di confidenza di un rapporto
Sezione intitolata “Esempio in codice: intervallo di confidenza di un rapporto”Supponi di avere, per trenta campagne pubblicitarie, la spesa e il numero di click. Vuoi il costo medio per click, definito come la somma delle spese diviso la somma dei click. È un rapporto fra due somme: non una media semplice, e privo di standard error in forma chiusa elementare.
import numpy as np
rng = np.random.default_rng(0)spesa = rng.gamma(2.0, 50.0, size=30)click = rng.poisson(80, size=30)
def cpc(s, c): return s.sum() / c.sum()
theta_hat = cpc(spesa, click)B = 5000n = len(spesa)boot = np.empty(B)for b in range(B): idx = rng.integers(0, n, size=n) # indici con reinserimento boot[b] = cpc(spesa[idx], click[idx]) # stessi indici per entrambe
se = boot.std(ddof=1)ci = np.percentile(boot, [2.5, 97.5]) # intervallo percentile 95%print(theta_hat, se, ci)Il punto didattico è nella riga idx = rng.integers(0, n, size=n). Si estraggono indici di righe con reinserimento, e gli stessi indici si usano sia per spesa sia per click. Si ricampionano le unità — le campagne — non le due colonne separatamente. Ricampionare le colonne in modo indipendente romperebbe l’accoppiamento fra spesa e click di ciascuna campagna e darebbe una risposta sbagliata. In dieci righe di codice ottieni una barra d’errore per una quantità che, per via analitica, richiederebbe il delta method e una pagina di derivate.
Vale la pena notare due cose sul codice. La prima: l’intera logica del bootstrap sta in tre righe — il ciclo, l’estrazione di indici, il ricalcolo — ed è identica qualunque sia lo stimatore. Cambiare la funzione cpc con np.median, con un coefficiente di correlazione, con l’allenamento di un modello, lascia tutto il resto invariato. È questa generalità a rendere il bootstrap così diffuso: una sola impalcatura per qualsiasi statistica. La seconda: la libreria standard scientifica di Python offre scipy.stats.bootstrap, che incapsula questa impalcatura e calcola di default l’intervallo BCa. In pratica si scrive il ciclo a mano solo per capire cosa succede sotto, o per casi che la libreria non copre direttamente — come il bootstrap appaiato su due metriche dell’esempio successivo.
Come si legge l’output? theta_hat è il costo per click stimato sul campione vero, un singolo numero. se è lo standard error: quanto, all’incirca, quel numero ballerebbe se si raccogliesse un altro campione di 30 campagne. ci è l’intervallo di confidenza al 95%: la coppia di valori entro cui, con il 95% di confidenza, sta il vero costo per click della popolazione di campagne da cui le 30 sono state estratte. Tre numeri, e nessuna formula chiusa è stata derivata. Se il committente chiede “il costo per click è 1,30 euro o sono ottimista?”, la risposta onesta non è il punto theta_hat da solo, ma il punto accompagnato dal suo intervallo: se ci è , l’incertezza è sostanziale e va comunicata, non nascosta.
Scenario reale: due modelli su un benchmark
Sezione intitolata “Scenario reale: due modelli su un benchmark”Un modello A ottiene il 71,2% su 400 problemi di un benchmark; un modello B ottiene il 68,5% sugli stessi 400 problemi. La differenza è 2,7 punti percentuali. È un vantaggio reale di A, oppure è il rumore di campionamento di quale particolare insieme di 400 problemi è finito nel benchmark?
Se la metrica è l’accuratezza — una media di indicatori 0/1, problema risolto o no — la normale del teorema del limite centrale basterebbe. Ma molte metriche di valutazione non sono medie semplici: l’F1 è una media armonica di precisione e recall, il punteggio pass@k con è una stima combinatoria, l’AUC è un’area sotto una curva. Per nessuna di queste esiste una formula chiusa comoda per lo standard error della differenza fra due modelli.
Il bootstrap appaiato risolve. Ricampiona i 400 problemi con reinserimento, ricalcola entrambi i punteggi sulla stessa selezione di problemi, prendi la differenza, ripeti volte. Se l’intervallo di confidenza percentile al 95% della differenza include lo zero, i 2,7 punti non sono distinguibili dal rumore del test set: non hai evidenza che A sia migliore di B. È il modo onesto di mettere una barra d’errore su un numero da leaderboard, e spiega perché molte classifiche di modelli che riportano differenze di frazioni di punto stanno, statisticamente, riportando rumore.
Mettiamo numeri sulla conclusione. Su quei 400 problemi, con la differenza osservata di 2,7 punti, un bootstrap appaiato potrebbe restituire un intervallo al 95% di . L’intervallo contiene lo zero: è del tutto possibile che i due modelli siano equivalenti, e che il +2,7 osservato sia un sorteggio fortunato di problemi favorevoli ad A. La lettura onesta non è “A vince di 2,7 punti” ma “A è osservato 2,7 punti sopra B, ma il dato è compatibile con qualsiasi differenza vera fra circa e punti”. Se invece l’intervallo fosse stato , tutto sopra lo zero, allora ci sarebbe evidenza di un vantaggio reale. È l’intervallo, non il punto, a dire se si può concludere qualcosa.
Il dettaglio dell’appaiamento è importante e va spiegato. Ricampionare i problemi una volta sola e usare la stessa selezione per entrambi i modelli — invece di ricampionare due selezioni indipendenti — non è un dettaglio implementativo: è la scelta corretta. I due modelli vengono valutati sugli stessi problemi, e su un problema facile entrambi tendono a riuscire, su uno difficile entrambi a fallire. Questa correlazione fra i due punteggi riduce la varianza della loro differenza, ed è proprio la differenza che interessa. Ricampionare in modo appaiato preserva quella correlazione e dà un intervallo più stretto e più corretto; ricampionare in modo indipendente la butterebbe via, gonfiando l’incertezza. È la stessa logica del test appaiato della statistica classica, trasportata nel bootstrap: quando due misure sono prese sulle stesse unità, le unità vanno ricampionate insieme.
Quarto caso: l’intervallo per un coefficiente di correlazione
Sezione intitolata “Quarto caso: l’intervallo per un coefficiente di correlazione”Vale un esempio in più, perché mostra il bootstrap su un terreno dove gli altri tre metodi della Parte sono particolarmente scomodi. Hai 50 coppie (latenza, costo) di richieste a un servizio e calcoli il coefficiente di correlazione di Pearson: viene . Quanto è incerto questo numero?
La distribuzione campionaria di non è normale: vive nell’intervallo e, quando il vero valore è lontano da zero, la sua distribuzione è marcatamente asimmetrica — schiacciata verso il bordo. L’approccio analitico classico usa un trucco, la trasformazione di Fisher, che mappa in una scala dove la distribuzione torna approssimativamente normale, costruisce l’intervallo lì, e poi lo ritrasforma indietro. Funziona, ma è un trucco specifico per la correlazione: non si generalizza.
Il bootstrap fa la stessa cosa senza alcun trucco. Ricampiona le 50 coppie con reinserimento — di nuovo, le coppie intere, non le due colonne separate — ricalcola , ripeti. La distribuzione bootstrap dei valori è già nella scala giusta, già asimmetrica nel modo corretto, e l’intervallo percentile resta automaticamente dentro . Qui il metodo percentile mostra il suo pregio strutturale: poiché legge percentili della distribuzione bootstrap, eredita gratis il vincolo di range della statistica. È lo stesso identico ciclo dell’esempio del rapporto, con np.corrcoef al posto di cpc: l’impalcatura non cambia, e nessuna trasformazione ad hoc è necessaria.
I quattro esempi visti — mediana, rapporto, differenza di metriche, correlazione — sono volutamente eterogenei, ma hanno una struttura comune che vale la pena rendere esplicita. In tutti, lo stimatore di interesse non è una media semplice; in tutti, una formula chiusa per lo standard error o non esiste o richiede un trucco specifico; in tutti, il bootstrap risolve con lo stesso ciclo di poche righe, cambiando solo la funzione che calcola la statistica. È questa la vera lezione operativa del capitolo: il bootstrap non è una collezione di tecniche da imparare una per una, è una sola tecnica che si applica, identica, a una gamma enorme di problemi. Imparata una volta, vale per tutti i casi in cui un numero esce da un campione e se ne vuole conoscere l’incertezza.
Applicazioni pratiche
Sezione intitolata “Applicazioni pratiche”Il filo che lega le applicazioni del bootstrap è semplice: ovunque ci sia un numero calcolato da un campione e ovunque manchi una formula chiusa per la sua incertezza, il bootstrap è candidato a fornire la barra d’errore. Questo lo rende presente in domini molto diversi; ne raccogliamo cinque dove è particolarmente utile.
Il primo terreno è la valutazione di modelli. Ogni punteggio su un test set — accuracy, F1, pass@k, BLEU, win-rate in un confronto fra due modelli — è una media campionaria calcolata su un insieme finito di esempi. Il bootstrap sui problemi del test set produce intervalli di confidenza per quei punteggi e, soprattutto, per le differenze fra modelli. È spesso l’unico modo praticabile per decidere se un miglioramento di un punto percentuale su un benchmark è segnale o rumore, perché le metriche di valutazione raramente sono medie semplici con formula chiusa.
Il secondo è l’A/B testing con metriche non standard. Tassi di conversione calcolati per utente, revenue per sessione (una distribuzione a coda lunga, dominata da pochi grandi acquisti), tempi di completamento mediani: quando la metrica di un esperimento non è una media semplice, il bootstrap fornisce l’intervallo di confidenza senza dover assumere normalità — un’assunzione che su dati di revenue è quasi sempre falsa.
Il terzo è la quantificazione dell’incertezza nei modelli statistici e di machine learning: standard error dei coefficienti di una regressione, intervalli per le importanze delle feature, barre d’errore sulle metriche di performance. E quando i dataset sono enormi, esiste una variante pensata apposta, il Bag of Little Bootstraps, che pre-aggrega su sottoinsiemi dei dati prima di ricampionare, mantenendo la garanzia statistica a un costo computazionale gestibile.
C’è un quarto terreno, meno ovvio: la diagnosi di stabilità di una pipeline. Quando un’analisi produce una conclusione — la feature X è la più importante, il modello A vince sul modello B, la soglia ottimale è 0,42 — il bootstrap permette di chiedersi quanto quella conclusione sia robusta. Si rifà l’intera analisi su ogni ricampione e si guarda quanto la conclusione cambia. Se la feature più importante è X nel 95% dei ricampioni, la conclusione è solida; se cambia a ogni ricampione, l’analisi sta leggendo rumore. È un uso del bootstrap come stress test di una decisione, non solo come calcolatore di standard error, ed è particolarmente prezioso nelle pipeline di machine learning, dove ogni scelta — quali feature tenere, quale modello selezionare — è a sua volta una stima soggetta a variabilità campionaria.
Un quinto uso, sempre più rilevante, è la valutazione di sistemi basati su LLM dove ogni esecuzione costa. Quando misurare la qualità di un agente richiede di lanciarlo su un set di task — operazione lenta e costosa — non si possono raccogliere migliaia di osservazioni. Il bootstrap permette di estrarre dal set di task disponibile, per quanto piccolo, un intervallo di confidenza onesto sul tasso di successo, e soprattutto di mettere una barra d’errore sul confronto fra due versioni del sistema. È la differenza fra dire “la versione nuova passa al 64% e la vecchia al 61%” e dire “la differenza ha un intervallo di confidenza al 95% di , quindi non abbiamo evidenza di un miglioramento”. La seconda frase è quella che evita di promuovere in produzione una versione che non è migliore.
In questo contesto il bootstrap va usato con la consapevolezza dei suoi limiti vista più avanti. Se gli stessi task vengono lanciati più volte sullo stesso sistema, le esecuzioni dello stesso task non sono indipendenti e l’unità di ricampionamento va scelta con cura — i task, non le singole esecuzioni. Se il punteggio per task non è binario ma una misura continua a coda lunga — il tempo per completare un compito, il numero di token consumati — vale l’avvertenza sulle code pesanti. Il bootstrap resta lo strumento giusto, ma resta uno strumento, non una garanzia: la sua barra d’errore è onesta quanto lo sono le assunzioni su cui poggia il disegno della valutazione.
Il ponte verso il machine learning
Sezione intitolata “Il ponte verso il machine learning”C’è un punto in cui il bootstrap smette di essere uno strumento di inferenza — un modo di mettere barre d’errore sui numeri — e diventa un ingrediente attivo di modelli predittivi. Quel punto si chiama bagging.
Il bagging, contrazione di bootstrap aggregating, è stato introdotto da Leo Breiman, statistico dell’Università di Berkeley, in un articolo del 1996 sulla rivista Machine Learning. È l’applicazione diretta del ricampionamento bootstrap all’apprendimento. La ricetta: genera ricampioni bootstrap del training set, allena un modello su ciascun ricampione, e aggrega le predizioni — facendone la media per la regressione, prendendo il voto di maggioranza per la classificazione.
Lo spostamento di prospettiva merita di essere reso esplicito, perché è il punto in cui due metà di questo capitolo si saldano. Nel bootstrap inferenziale, — la cosa che si calcola su ogni ricampione — è uno stimatore: un numero. Nel bagging, diventa un’intera procedura di addestramento: il risultato calcolato su ogni ricampione non è un numero ma un modello. L’algoritmo del bootstrap, riga per riga, è identico; cambia solo cosa si mette nella scatola . Questa è la potenza della formulazione astratta vista nella sezione sulla meccanica: può essere qualunque cosa si calcoli dai dati, e “addestrare un albero di decisione” è una cosa che si calcola dai dati come un’altra.
Perché funziona? L’intuizione è la stessa dello standard error bootstrap, riusata in chiave predittiva. Alcuni modelli — gli alberi di decisione profondi sono l’esempio canonico — hanno basso bias ma alta varianza: catturano bene la struttura dei dati, ma cambiano molto se il training set cambia di poco. Allenati su ricampioni bootstrap diversi, questi modelli sbagliano in modo parzialmente scorrelato: i loro errori non sono identici. Mediare predizioni con errori scorrelati smorza la varianza senza gonfiare il bias — è il compromesso bias-varianza sfruttato a proprio favore. Tanti ricampioni producono tante stime, e l’aggregato è più stabile di ogni singola stima: esattamente la logica dello standard error bootstrap, dove la dispersione dei misurava la variabilità.
Conviene rendere quantitativa l’intuizione, perché spiega anche un limite. Se medi predizioni, ciascuna con varianza , e fossero perfettamente indipendenti, la media avrebbe varianza — tende a zero al crescere di . Ma le predizioni di alberi baggati non sono indipendenti, perché allenate su ricampioni che condividono dati. Se la correlazione media fra due predizioni è , la varianza della media non scende a zero ma si ferma a più un termine che svanisce. La conseguenza: oltre un certo numero di alberi, aggiungerne altri non aiuta più, perché si è raggiunto il pavimento . È esattamente il motivo per cui la random forest, vista subito sotto, aggiunge una seconda fonte di casualità: serve a ridurre , abbassando quel pavimento.
Una nota sul perché proprio gli alberi sono i candidati ideali al bagging. Il bagging riduce la varianza ma non tocca il bias: ha senso applicarlo a modelli che hanno già bias basso e soffrono solo di varianza alta. Un albero di decisione cresciuto in profondità è esattamente questo — segue i dati così da vicino da catturarne ogni dettaglio (bias basso) ma per questo cambia drasticamente se i dati cambiano (varianza alta). Applicare il bagging a un modello già stabile e ad alto bias — una regressione lineare semplice, per dire — darebbe poco: non c’è varianza da smorzare. La scelta dell’albero come modello-base del bagging non è arbitraria, discende dalla logica del compromesso bias-varianza.
La random forest, sempre di Breiman, in un articolo del 2001, porta l’idea un passo oltre. È bagging di alberi di decisione, più una seconda fonte di casualità: a ogni split di ogni albero, si considera soltanto un sottoinsieme casuale delle feature, non tutte. Senza questa decorrelazione extra, gli alberi baggati resterebbero troppo simili fra loro — tutti dominati dalle stesse poche feature forti — e la media ridurrebbe poco la varianza. Il bootstrap fornisce diversità sulle righe del dataset; il sottoinsieme casuale di feature fornisce diversità sulle colonne. La combinazione delle due rende gli alberi abbastanza diversi perché la media valga la pena.
Il motivo per cui serve la seconda fonte di casualità merita un dettaglio, perché illumina un limite del bootstrap stesso. La riduzione di varianza per media funziona tanto meglio quanto più gli errori dei modelli sono scorrelati. Ma gli alberi baggati condividono comunque circa il 63,2% dei dati a due a due, e questo li rende correlati: se una feature è molto predittiva, tutti gli alberi la sceglieranno come primo split, e finiranno per somigliarsi. Mediare modelli correlati riduce poco la varianza — è il limite matematico della media di variabili non indipendenti. La randomizzazione delle feature rompe questa correlazione residua forzando gli alberi a costruirsi in modi diversi. È un’osservazione che vale anche per il bootstrap inferenziale: i valori bootstrap non sono indipendenti fra loro, perché condividono il campione di partenza, e questo è una delle ragioni per cui il bootstrap è uno strumento asintotico e non una bacchetta magica.
E qui torna il numero che avevamo lasciato in sospeso: il 36,8%. Ogni albero di una random forest viene allenato su un ricampione bootstrap, e quindi vede circa il 63,2% dei dati distinti del training set. Il restante 36,8% — gli out-of-bag, “fuori dal sacchetto” — sono dati che quell’albero specifico non ha mai visto in addestramento. Si può allora valutare ogni osservazione usando solo gli alberi per cui quella osservazione era out-of-bag, e confrontare la predizione con la verità. L’errore così ottenuto, l’out-of-bag error, è una stima quasi gratuita dell’errore di generalizzazione: non richiede di mettere da parte un test set separato, né un ciclo di re-training come la cross-validation. Breiman lo propose proprio come sostituto del test set. Va detto, per onestà, che con campioni piccoli l’out-of-bag error tende a sovrastimare leggermente l’errore vero, perché ogni ricampione contiene meno dati distinti dell’originale.
Concretamente, immagina una foresta di 500 alberi addestrata su 1000 osservazioni. Prendi l’osservazione numero 7. In media, circa 184 dei 500 alberi — il 36,8% — non l’hanno vista in training: per quei 184 alberi, l’osservazione 7 è out-of-bag. Per predire l’etichetta dell’osservazione 7 in modalità out-of-bag, si interpellano solo quei 184 alberi e si aggrega il loro voto, ignorando i 316 alberi che l’avevano in training e che quindi “barerebbero”. Ripetendo questo per tutte le 1000 osservazioni e confrontando con la verità si ottiene l’out-of-bag error. Il punto elegante: nessun albero singolo viene mai valutato su dati visti, eppure non si è messo da parte un solo dato — ogni osservazione serve sia all’addestramento di alcuni alberi sia alla valutazione di altri. È il riciclo completo dei dati che il 36,8% rende possibile.
C’è anche un vantaggio di costo che vale la pena rendere esplicito. La cross-validation a fold richiede di addestrare il modello volte, su partizioni diverse: il costo computazionale è volte quello di un addestramento singolo. L’out-of-bag error, invece, non richiede nessun addestramento aggiuntivo: gli alberi della foresta sono già allenati per il loro scopo predittivo, e la stima dell’errore si ottiene riusando l’informazione su quale dato fosse out-of-bag per quale albero — informazione che la procedura di bagging genera comunque. È una stima dell’errore di generalizzazione che cade fuori come sottoprodotto gratuito del training. Per modelli costosi da addestrare, questa gratuità è una ragione concreta per preferire un metodo baggato.
Una nota sulla classe di questa connessione, per non scivolare. Il legame fra bootstrap inferenziale e bagging è una filiazione documentata, non una semplice analogia: Breiman costruisce esplicitamente il bagging sul ricampionamento bootstrap di Efron, e lo dice nel suo articolo. Non è “il bagging ricorda il bootstrap”: il bagging usa il bootstrap come componente. Il bagging è anche una delle due grandi famiglie di metodi ensemble — l’altra è il boosting, che invece costruisce i modelli in sequenza pesando gli esempi. Il bagging è la famiglia “parallela”: i modelli sono indipendenti l’uno dall’altro e si possono allenare in parallelo, proprio come i ricampioni del bootstrap inferenziale.
Vale la pena fissare il filo che attraversa tutto il capitolo, perché è il suo centro concettuale. Lo stesso gesto — costruire ricampioni bootstrap e fare qualcosa su ciascuno — produce due cose diverse a seconda di cosa si fa su ciascun ricampione. Se su ogni ricampione si calcola uno stimatore, la dispersione dei valori misura l’incertezza: è il bootstrap inferenziale, lo standard error, l’intervallo di confidenza. Se su ogni ricampione si allena un modello, l’aggregazione dei modelli riduce la varianza della predizione: è il bagging. Misurare l’incertezza e ridurre la varianza sono due facce della stessa moneta — entrambe sfruttano il fatto che versioni leggermente diverse della stessa cosa, mediate o esaminate, rivelano e domano la variabilità. Chi ha capito il bootstrap della prima metà del capitolo ha già capito, senza saperlo, perché una random forest è più stabile di un albero singolo.
C’è una simmetria suggestiva fra i due usi. Nel bootstrap inferenziale, la variabilità fra i valori è ciò che si vuole misurare — è il prodotto, lo standard error. Nel bagging, la variabilità fra i modelli è ciò che si vuole eliminare — la si annega nella media. Lo stesso fenomeno, la dispersione indotta dal ricampionamento, è il risultato cercato in un caso e il problema da risolvere nell’altro. È un buon esempio di come un’idea matematica sia neutra rispetto allo scopo: il ricampionamento bootstrap non “serve a” misurare l’incertezza più di quanto “serva a” costruire predittori; è una struttura, e lo scopo lo decide chi la usa.
Sull’out-of-bag error vale ancora un’osservazione, perché chiarisce un confine. L’out-of-bag error stima l’errore di generalizzazione, ed è quindi parente della cross-validation — la tecnica che partiziona i dati in fold e valuta il modello sul fold tenuto fuori. Ma cross-validation e bootstrap restano metodi distinti: la cross-validation partiziona senza reinserimento, il bootstrap ricampiona con reinserimento. L’out-of-bag error è il punto preciso in cui i due si toccano, perché usa la struttura del ricampionamento bootstrap — il fatto che il 36,8% resti fuori — per ottenere, gratis, una stima di tipo cross-validation. È un esempio di come un’idea statistica, il bootstrap, generi per ricaduta strumenti in un campo apparentemente diverso, la valutazione di modelli.
Una nota di portata, per non sopravvalutare il ponte. Il bagging e le random forest sono l’applicazione del bootstrap che ha avuto più successo, ma non l’unica idea di ensemble: il boosting, citato sopra, e gli ensemble di reti neurali costruiti con altre fonti di casualità — inizializzazioni diverse, ordini diversi dei dati — non usano il bootstrap. Dire che “ogni ensemble è bootstrap” sarebbe un’equivalenza indebita. La affermazione corretta e più modesta è una filiazione mirata: una specifica famiglia di ensemble, quella baggata, discende dal ricampionamento bootstrap e ne porta dentro il meccanismo. È una distinzione che vale la pena tenere netta, perché è esattamente il tipo di scivolamento — da “un caso usa X” a “tutto è X” — contro cui questo capitolo, e questa wiki, mettono in guardia.
Confronto con i metodi analitici
Sezione intitolata “Confronto con i metodi analitici”Vale la pena mettere fianco a fianco il bootstrap e l’approccio analitico — il teorema del limite centrale e gli intervalli di confidenza costruiti con formule chiuse — perché rispondono alla stessa domanda con strategie opposte, e capire quando usare l’uno o l’altro è parte della competenza statistica.
L’approccio analitico deriva la distribuzione campionaria con la matematica. I suoi pregi: dove esiste, è esatto o asintoticamente esatto, è istantaneo da calcolare, e non introduce alcun rumore di simulazione. Il suo limite è la copertura: una formula chiusa esiste solo per pochi stimatori privilegiati — la media, la varianza sotto l’assunzione di normalità, le proporzioni. Per tutto il resto bisogna assumere la normalità della popolazione, oppure ricorrere ad approssimazioni come il delta method, che vanno derivate caso per caso.
Vale la pena nominare il delta method, perché è il concorrente analitico più diretto del bootstrap. È una tecnica che, data una formula per lo standard error di una quantità semplice, ricava un’approssimazione dello standard error di una funzione di quella quantità — un rapporto, un logaritmo, una trasformazione — usando la derivata della funzione. Funziona, ma ha tre costi che il bootstrap non ha: richiede di saper calcolare la derivata, richiede che la funzione sia liscia, e dà solo un’approssimazione del prim’ordine, valida quando la perturbazione è piccola. Il bootstrap ottiene lo stesso risultato senza derivare nulla: dove il delta method chiede al praticante di fare conti, il bootstrap chiede al calcolatore di fare iterazioni. È, di nuovo, lo stesso baratto fra pensiero e calcolo che attraversa tutto il capitolo.
Il bootstrap simula la distribuzione campionaria ricampionando. Il suo pregio decisivo è la generalità: funziona per qualsiasi stimatore esprimibile come funzione dei dati, senza alcuna assunzione sulla forma della distribuzione. I suoi costi: il calcolo non è gratuito, e la simulazione introduce un rumore Monte Carlo che si attenua alzando ma non sparisce mai del tutto. E, soprattutto, il bootstrap non è magia: eredita comunque l’assunzione che il campione rappresenti la popolazione e che le osservazioni siano indipendenti e identicamente distribuite.
La regola pratica che ne segue è semplice. Per la media di un campione di buona dimensione, il teorema del limite centrale basta e avanza, e il bootstrap darebbe lo stesso risultato con più lavoro. Il bootstrap si guadagna lo stipendio quando la formula chiusa non esiste: mediana, quantili, coefficienti di correlazione, rapporti, differenze fra metriche di valutazione complesse. I due approcci non sono in competizione: il bootstrap è l’estensione computazionale che copre il caso generale, là dove l’analisi si ferma.
C’è anche un valore didattico nel confronto. Nei casi dove entrambi gli approcci si applicano — la media di un campione grande — il fatto che diano lo stesso intervallo è una verifica reciproca: se l’intervallo bootstrap della media diverge sensibilmente da quello del teorema del limite centrale, qualcosa non va, e di solito è il segnale che le assunzioni di uno dei due sono violate (per esempio una coda pesante che rompe il bootstrap, o un’asimmetria che rende imprecisa l’approssimazione normale). Usare i due in parallelo, quando possibile, è un modo per controllare il proprio lavoro. Il bootstrap, da questo punto di vista, non manda in pensione la teoria analitica: la affianca, la estende dove si ferma, e ne diventa il banco di prova dove invece coesistono.
Una riflessione conclusiva sul rapporto fra i due mondi. Si potrebbe pensare che il bootstrap, essendo più generale, renda obsoleta la teoria analitica. Non è così, per due ragioni. La prima: la teoria analitica, dove si applica, è istantanea e priva di rumore Monte Carlo — per una proporzione su un milione di osservazioni non ha senso lanciare un bootstrap. La seconda, più profonda: capire perché il teorema del limite centrale funziona, capire cosa rende la media uno stimatore così docile, è ciò che permette di prevedere quando il bootstrap fallirà. Le code pesanti rompono il bootstrap della media per la stessa ragione per cui rompono il teorema del limite centrale. La teoria analitica e il bootstrap non sono rivali: sono due strati della stessa comprensione, e chi padroneggia entrambi sa sempre quale usare e perché.
Una sottigliezza vale la pena fissarla, perché è un punto su cui anche utenti esperti scivolano. Il bootstrap stima la distribuzione campionaria, non la distribuzione della popolazione. Sono due cose diverse. La distribuzione della popolazione descrive come variano i singoli dati; la distribuzione campionaria descrive come varia lo stimatore da campione a campione. È sempre la seconda che serve per una barra d’errore, ed è la seconda che il bootstrap simula. Confondere le due porta a errori grossolani, come pensare che un campione di 30 osservazioni dia un intervallo “stretto” perché i 30 numeri sono vicini fra loro: la larghezza dell’intervallo dipende dalla variabilità dello stimatore, che con resta significativa anche se i dati sono concentrati.
Dove si rompe
Sezione intitolata “Dove si rompe”Il bootstrap è generale, non universale. Fallisce in casi precisi, e — questo è il pericolo vero — a volte fallisce silenziosamente, restituendo un intervallo dall’aspetto perfettamente ragionevole che però non copre il parametro vero al livello dichiarato.
Code pesanti e varianza infinita. Il bootstrap si appoggia all’idea che il campione rappresenti la popolazione. Se la popolazione ha una distribuzione a coda molto pesante, al punto da non avere varianza finita — è il caso della distribuzione di Cauchy, o di certe distribuzioni di Pareto — la media campionaria non converge a una normale, e il bootstrap della media non converge alla distribuzione corretta. I ricampioni risultano dominati dai pochi valori estremi che sono finiti nel campione, e l’intervallo di confidenza che ne esce è inaffidabile. È un fallimento dimostrato, non un’imprecisione: il bootstrap naïve della media, in assenza di varianza finita, è teoricamente inconsistente.
L’intuizione del perché: con code pesanti, il valore della media campionaria è in larga parte determinato dal singolo dato più grande del campione. Ma quel dato più grande è esso stesso una pescata fortunata o sfortunata: in un altro campione vero sarebbe stato diverso, magari di un ordine di grandezza. Il bootstrap, ricampionando dal campione che hai, può solo riusare gli estremi che ci sono già — non può generare un estremo più grande di quelli osservati. La vera distribuzione campionaria della media, sotto code pesanti, ha una variabilità che il campione fisso non contiene, e il bootstrap la sottostima sistematicamente. È il caso in cui il pericolo è massimo, perché l’intervallo bootstrap esce numericamente plausibile mentre è semplicemente sbagliato. Quando si lavora con distribuzioni di revenue, di dimensioni di file, di tempi di coda — tutte note per le code pesanti — questo limite va tenuto presente, e conviene almeno controllare se la media campionaria è dominata da poche osservazioni estreme.
Statistiche non lisce. Il caso da manuale è il massimo del campione — e, simmetricamente, il minimo, o qualsiasi statistica d’ordine estrema. Il massimo di un ricampione bootstrap non può, per costruzione, superare il massimo del campione originale: stai pescando dagli stessi valori. La distribuzione bootstrap del massimo finisce per avere un atomo di probabilità — un picco concentrato — di circa 0,632 esattamente sul valore osservato, e non riproduce affatto la vera distribuzione campionaria del massimo, che è continua. Più in generale, il bootstrap richiede che lo stimatore abbia una certa regolarità matematica (gli statistici la chiamano differenziabilità di Hadamard); statistiche con punti di non-differenziabilità — il massimo, il minimo, certe statistiche di soglia — la violano e mandano il metodo fuori strada.
Il valore 0,632 di quel picco non è casuale: è proprio il complemento del 36,8% di prima. La probabilità che il dato più grande del campione finisca in un ricampione è , e ogni volta che ci finisce il massimo del ricampione coincide esattamente con il massimo dell’originale. Quindi più della metà dei ricampioni produce lo stesso identico valore: la distribuzione bootstrap del massimo è una barra dominante su quel valore più una coda di valori più piccoli, una caricatura inservibile della vera distribuzione campionaria. È un esempio istruttivo perché il fallimento è visibile: se la distribuzione bootstrap di una statistica mostra un atomo gigante su un singolo valore, è un segnale che quella statistica non è adatta al bootstrap. La diagnosi pratica è guardare sempre l’istogramma della distribuzione bootstrap prima di fidarsi dell’intervallo: una distribuzione liscia e a campana è rassicurante, una con picchi anomali, buchi o accumuli sui bordi è un avvertimento.
Dati dipendenti e serie temporali. L’algoritmo base del bootstrap assume osservazioni indipendenti e identicamente distribuite. Ricampionare con reinserimento i punti di una serie storica distrugge la struttura di autocorrelazione: la sequenza ricampionata perde ogni memoria, e qualunque intervallo di confidenza per statistiche sensibili alla dipendenza — l’autocorrelazione stessa, la persistenza, la volatilità — risulta sbagliato. Il rimedio è il block bootstrap: invece di ricampionare singoli punti, si ricampionano blocchi contigui di osservazioni, così da preservare la dipendenza locale all’interno di ciascun blocco. Esistono diverse varianti — il moving block bootstrap di Hans Künsch (1989), con blocchi sovrapposti, e lo stationary bootstrap di Politis e Romano (1994), con lunghezza di blocco aleatoria — ciascuna con i suoi compromessi. Il punto da portare via: per i dati dipendenti, il bootstrap standard non si applica e va sostituito con una sua variante apposita.
La dipendenza non è solo temporale. Lo stesso problema sorge con dati raggruppati: misure ripetute sullo stesso utente, righe che appartengono allo stesso cluster, esempi correlati perché condividono una sorgente. Ricampionare le righe singole tratta come indipendenti osservazioni che non lo sono, e produce intervalli troppo stretti. Il rimedio analogo al block bootstrap è il cluster bootstrap: si ricampionano i gruppi interi — tutti gli esempi di un utente, tutte le righe di un cluster — con reinserimento, invece delle righe singole. La regola generale dietro a entrambi: l’unità di ricampionamento deve coincidere con l’unità che è davvero indipendente nei dati. Sbagliare questa scelta è uno degli errori più comuni e più silenziosi nell’uso applicato del bootstrap.
Campioni molto piccoli. Quando è piccolo, la distribuzione empirica è una caricatura grezza della popolazione: pochi valori distinti, una griglia di possibilità troppo rada. Gli intervalli di confidenza bootstrap per la varianza, con sotto la cinquantina, tendono a risultare troppo stretti e a sotto-coprire. Il bootstrap non crea informazione dal nulla: se i dati sono troppo pochi, ricampionarli non risolve il problema. L’esempio della mediana con , più indietro nel capitolo, lo rendeva visibile: la distribuzione bootstrap era fatta di cinque gradini, e nessun valore di poteva renderla più fine, perché i gradini sono fissati dai nove dati. Con piccolo il bootstrap è onesto sui suoi limiti — la grossolanità della distribuzione bootstrap è lì a vedersi — ma non li supera. Una regola prudente: sotto qualche decina di osservazioni, l’intervallo bootstrap va trattato come indicativo, non come una garanzia di copertura.
Un corollario pratico per i campioni piccoli: in quel regime, fra i metodi di intervallo, conviene spesso il più semplice. Il BCa stima due parametri di correzione dai dati, e con pochi dati quelle stime sono esse stesse molto rumorose — la correzione può peggiorare le cose invece di migliorarle. È uno dei casi, citati prima, in cui il metodo percentile, pur teoricamente meno accurato, si comporta meglio nella pratica. La raffinatezza di un metodo paga solo quando c’è abbastanza informazione per alimentarla.
Parametri sul bordo dello spazio. Stimare un parametro il cui vero valore giace sul confine dello spazio dei valori ammissibili — per esempio una componente di varianza il cui valore vero è esattamente zero — rompe il bootstrap standard, perché la distribuzione campionaria in quel caso è degenere e il ricampionamento non la cattura. La radice del problema è che, sul bordo, lo stimatore non può sbagliare in entrambe le direzioni: una varianza stimata non scende sotto zero. La distribuzione campionaria è quindi tagliata da un lato, asimmetrica in modo estremo, e il bootstrap — che assume una distribuzione che si estende in entrambi i versi — la rappresenta male. È un caso raro nella pratica quotidiana, ma istruttivo: mostra che il bootstrap eredita non solo le proprietà dei dati ma anche la geometria dello spazio dei parametri.
C’è infine un fraintendimento che non è un caso di rottura tecnica ma un errore concettuale, e merita di chiudere la sezione perché è il più diffuso. Il bootstrap quantifica la variabilità dovuta al campionamento, dato per assodato che il campione rappresenti la popolazione. Se il campione è distorto — se c’è un bias di selezione, se i dati sono stati raccolti in modo non rappresentativo — il bootstrap riproduce fedelmente la distribuzione di valori attorno al numero sbagliato. Non corregge il bias di selezione: lo eredita, e gli mette attorno una barra d’errore stretta e rassicurante. Un intervallo bootstrap preciso costruito su un campione distorto è precisamente, e pericolosamente, sicuro di sé sul valore sbagliato. Per questo il bootstrap non sostituisce un buon disegno del campionamento: lo presuppone.
Conviene insistere su questo punto perché è dove il bootstrap inganna di più. Tutti gli altri modi di rottura — code pesanti, statistiche non lisce, dipendenza — lasciano almeno qualche traccia: un istogramma dalla forma strana, un atomo visibile, una conoscenza a priori che la serie è temporale. Il bias di campionamento, invece, non lascia nessuna traccia nei dati: un campione distorto può sembrare in tutto e per tutto un campione regolare, e il bootstrap ci girerà sopra producendo un intervallo dall’aspetto impeccabile. La distinzione da tenere a mente è netta: il bootstrap misura quanto un numero ballerebbe ricampionando come si è campionato. Se il modo di campionare era sbagliato, il bootstrap eredita l’errore senza accorgersene e senza segnalarlo. È un limite del metodo che nessun raffinamento tecnico può rimuovere, perché non sta nel metodo ma nei dati che gli si danno in pasto.
Fraintendimenti tipici
Sezione intitolata “Fraintendimenti tipici”Oltre ai casi di rottura, alcuni errori di comprensione ricorrono con regolarità.
“Il bootstrap crea dati nuovi, aumenta la dimensione del campione.” No. Il bootstrap non aggiunge alcuna informazione. Riusa i dati che hai per stimare la variabilità di uno stimatore. La dimensione effettiva del campione resta .
“Più ricampioni significa stime più accurate.” No: controlla soltanto il rumore Monte Carlo della simulazione, non l’accuratezza statistica. Con che tende a infinito ottieni la distribuzione bootstrap esatta — che resta comunque un’approssimazione della vera distribuzione campionaria, limitata dalla dimensione del campione. Un grande non ripara un piccolo.
“Il bootstrap ricampiona senza reinserimento.” No: quello sarebbe il jackknife (leave-one-out) o un test di permutazione. Il bootstrap richiede il reinserimento; senza, ogni ricampione sarebbe il campione originale soltanto riordinato, con variabilità nulla.
“L’intervallo bootstrap copre sempre al livello nominale.” No: la copertura è una proprietà asintotica e dipende dal metodo scelto (percentile, basic, bootstrap-t, BCa) e dalla regolarità della statistica. Per statistiche non lisce o popolazioni a coda pesante, la copertura reale può stare ben sotto il 95% nominale.
“Bootstrap e cross-validation sono la stessa cosa.” No, benché entrambi ricampionino. La cross-validation partiziona i dati in fold disgiunti, senza reinserimento, per stimare l’errore di generalizzazione di un modello. Il bootstrap ricampiona con reinserimento per stimare la distribuzione di uno stimatore. L’out-of-bag error è il punto preciso in cui i due mondi si toccano: usa la struttura del ricampionamento bootstrap per ottenere una stima di tipo cross-validation.
“Il bootstrap funziona solo per la media.” No: è vero il contrario. Per la media esiste già il teorema del limite centrale, e il bootstrap è poco più di una conferma. Il bootstrap dà il suo contributo proprio per gli stimatori diversi dalla media — mediana, quantili, correlazioni, rapporti, metriche complesse — dove la formula chiusa manca. Pensare al bootstrap come a un metodo “per la media” è capovolgere il suo scopo.
“Un intervallo bootstrap stretto significa che la stima è affidabile.” No: la larghezza dell’intervallo riflette solo la variabilità campionaria dello stimatore. Un intervallo stretto su un campione distorto è preciso e sbagliato insieme. Affidabilità e precisione sono cose diverse: la precisione la dà il bootstrap, l’affidabilità la dà un buon disegno del campionamento, che il bootstrap presuppone e non fornisce.
Una checklist di applicabilità
Sezione intitolata “Una checklist di applicabilità”Prima di fidarsi di un intervallo bootstrap, conviene passare quattro controlli rapidi, ciascuno corrispondente a uno dei modi di rottura visti sopra.
Primo, le osservazioni sono indipendenti? Se sono una serie temporale, o raggruppate per utente o per cluster, l’unità di ricampionamento va cambiata — blocchi o gruppi interi — e il bootstrap delle righe singole è sbagliato. Secondo, lo stimatore è liscio? Massimo, minimo, statistiche d’ordine estreme, statistiche di soglia richiedono cautela: per loro il bootstrap standard non è garantito. Terzo, la popolazione ha varianza finita? Su dati a coda molto pesante — revenue, dimensioni, tempi di coda — il bootstrap della media può sottostimare l’incertezza; vale la pena controllare se pochi valori estremi dominano la statistica. Quarto, il campione è abbastanza grande? Sotto qualche decina di osservazioni la distribuzione bootstrap è grossolana e l’intervallo va trattato come indicativo.
Un quinto controllo, trasversale, è semplicemente guardare l’istogramma della distribuzione bootstrap. Una forma liscia, unimodale, ragionevolmente a campana o moderatamente asimmetrica è rassicurante. Picchi anomali, atomi concentrati su singoli valori, buchi, accumuli sui bordi sono segnali che lo stimatore o i dati violano qualche assunzione. Il bootstrap, a differenza di una formula chiusa, lascia vedere il suo prodotto intermedio: è un vantaggio diagnostico da non sprecare.
Nessuno di questi controlli è una garanzia formale — il bootstrap non viene con un certificato di validità che si accende quando tutto va bene. Sono euristiche, segnali da leggere con giudizio. Ma la loro esistenza dice qualcosa di importante sul metodo: il bootstrap fallisce, quando fallisce, per ragioni comprensibili — dipendenza non gestita, code che il campione non contiene, stimatori non lisci, troppo pochi dati. Non è una scatola nera che a volte mente senza motivo. Chi conosce i quattro modi di rottura e sa guardare un istogramma userà il bootstrap con la fiducia giusta: né cieca, né timorosa. È la stessa postura che la statistica chiede di fronte a qualsiasi strumento — conoscere le assunzioni, controllare se reggono, comunicare l’incertezza che resta — e il bootstrap, lungi dall’esonerare da questa disciplina, la rende anzi più visibile, perché mette sotto gli occhi la distribuzione su cui tutto si fonda.
Collegamenti
Sezione intitolata “Collegamenti”-
Intervalli di confidenza: cosa dicono davvero e cosa no — il bootstrap è il modo di costruire intervalli di confidenza quando la formula analitica non esiste: stessa domanda, strategia computazionale al posto di quella matematica.
-
Legge dei grandi numeri e teorema del limite centrale — il CLT è l’alternativa analitica al bootstrap; il bootstrap funziona anche dove il CLT non si applica direttamente, ma la sua stessa validità è un risultato asintotico.
-
Stima puntuale: dare un numero al parametro ignoto — il bootstrap stima bias, varianza e standard error di uno stimatore puntuale per via empirica.
-
Campionamento: come si sceglie la parte che racconta il tutto — il bootstrap presuppone un campione rappresentativo e osservazioni i.i.d.: eredita ogni bias di selezione, non lo corregge.
-
Popolazione, campione, stimatore: la logica dell’incertezza — formalizza il rapporto popolazione/campione su cui il bootstrap costruisce il suo terzo livello, campione/ricampione.
-
Test di ipotesi: p-value, potenza, errori di tipo I e II — i test di permutazione e i test basati su bootstrap sono l’alternativa non parametrica ai test classici.
-
Massima verosimiglianza: fittare modelli massimizzando la probabilità — il bootstrap parametrico genera i ricampioni dalla distribuzione fittata via MLE.
-
Le distribuzioni comuni: Bernoulli, binomiale, normale, Poisson, esponenziale — il bootstrap parametrico sceglie una di queste famiglie come modello da cui simulare i ricampioni.
-
Stima MAP: il prior come regolarizzatore — il bootstrap bayesiano è la variante che mette pesi casuali sulle osservazioni invece di contarle un numero intero di volte.
-
Bias e varianza: il compromesso fondamentale — il bagging riduce la varianza senza toccare il bias: è il compromesso bias-varianza messo al lavoro tramite il ricampionamento bootstrap.
-
random-forest (in preparazione) — applicazione diretta del bootstrap all’apprendimento, con la doppia casualità su righe e colonne e la stima out-of-bag dell’errore.
-
cross-validation (in preparazione) — metodo affine di ricampionamento per stimare l’errore di generalizzazione; l’out-of-bag error è il ponte concettuale fra cross-validation e bootstrap.
-
random-subspace ed ensemble (in preparazione) — il bagging come una delle famiglie di ensemble, accanto al boosting; il ricampionamento bootstrap come una delle fonti di diversità fra modelli.
Per andare oltre
Sezione intitolata “Per andare oltre”- Bradley Efron, “Bootstrap Methods: Another Look at the Jackknife”, The Annals of Statistics, 7(1), 1979, pp. 1-26. L’articolo fondativo: introduce il metodo, mostra il jackknife come sua approssimazione lineare, e lo applica a mediana, discriminante lineare, rapporti, regressione.
- Bradley Efron e Robert Tibshirani, An Introduction to the Bootstrap, Chapman & Hall, 1993. La trattazione canonica e completa: bootstrap non parametrico e parametrico, metodi percentile, bootstrap-t e BCa, bootstrap dei residui. Il riferimento standard.
- Leo Breiman, “Bagging Predictors”, Machine Learning, 24(2), 1996, pp. 123-140. Il paper che introduce il bagging come applicazione del bootstrap all’apprendimento, con la stima out-of-bag dell’errore.
- Voce “Bootstrapping (statistics)” di Wikipedia (en.wikipedia.org/wiki/Bootstrapping_(statistics)) — panoramica aggiornata su varianti dei metodi di intervallo, block bootstrap, Bag of Little Bootstraps e modi di fallimento.
- “The average bootstrap sample omits 36.8% of the data”, Rick Wicklin, blog The DO Loop (SAS), 2017 — derivazione accessibile del limite che sta dietro al 63,2% e all’out-of-bag.
- Nathaniel Helwig, “Bootstrap Confidence Intervals”, note del corso di statistica, University of Minnesota — confronto dettagliato, con le formule, dei metodi percentile, basic, studentizzato e BCa, utile per chi vuole vedere i conti dietro le quattro famiglie di intervallo.
- Documentazione di
scipy.stats.bootstrap(docs.scipy.org) — l’implementazione di riferimento in Python, con il BCa come default; il modo più rapido per usare il bootstrap senza scrivere il ciclo a mano.