Un test A/B non mostra differenze sulla metrica principale. Allora si guardano le altre metriche: tempo sulla pagina, clic sul menu, iscrizioni alla newsletter. Poi i segmenti: utenti mobili, utenti da desktop, nuovi visitatori, visitatori di ritorno, singoli paesi. Alla fine, in qualche combinazione, compare un risultato «significativo». È una scoperta? Quasi sicuramente no. È il problema dei confronti multipli, una delle cause principali di risultati che non si replicano.
Il problema in un numero
Con un livello di significatività α = 0,05, ogni singolo test ha il 5% di probabilità di dare un falso positivo quando non c'è alcun effetto. Ma se si eseguono molti test indipendenti, la probabilità che almeno uno dia un falso positivo cresce rapidamente:
| Numero di test | P(almeno un falso positivo) |
|---|---|
| 1 | 5% |
| 5 | circa 23% |
| 10 | circa 40% |
| 20 | circa 64% |
| 50 | circa 92% |
Il calcolo è 1 − 0,95ᵏ, dove k è il numero di test. Con 10 metriche e 5 segmenti si hanno 50 confronti: anche se la modifica non ha alcun effetto, ci si aspettano in media circa 2,5 risultati significativi.
Il p-hacking
Il p-hacking è l'insieme di pratiche, spesso non intenzionali, che aumentano artificialmente la probabilità di ottenere un p-value sotto la soglia. Le forme più comuni sono:
- provare molte metriche e riportare solo quella significativa;
- dividere i dati in segmenti finché un segmento mostra un effetto;
- fermare l'esperimento appena il risultato diventa significativo;
- escludere valori anomali solo dopo aver visto che cambiano il risultato;
- provare diverse trasformazioni o modelli e scegliere quello più favorevole;
- cambiare l'ipotesi dopo aver visto i dati, presentando come prevista una scoperta casuale.
Ogni singola scelta può sembrare ragionevole. Il problema è che, quando le scelte dipendono dai dati, il p-value finale non ha più il significato dichiarato. Gli statistici Andrew Gelman ed Eric Loken hanno chiamato questa situazione il «giardino dei sentieri che si biforcano»: anche senza eseguire esplicitamente molti test, le tante decisioni possibili equivalgono a moltiplicare i confronti.
Le correzioni
Bonferroni
La correzione più semplice divide la soglia per il numero di test: con 20 test, si considera significativo solo un p-value sotto 0,05 / 20 = 0,0025. Così la probabilità di almeno un falso positivo resta sotto il 5%. È facile da applicare ma molto prudente: con molti test riduce fortemente la potenza e fa perdere effetti reali.
Holm
La procedura di Holm è una versione migliorata che controlla lo stesso errore con più potenza. Si ordinano i p-value dal più piccolo al più grande; il primo si confronta con α/k, il secondo con α/(k − 1), e così via, fermandosi al primo che non supera la soglia. Non ha svantaggi rispetto a Bonferroni e conviene preferirla.
Benjamini-Hochberg
Quando i test sono molti, come in genomica o nell'analisi di centinaia di metriche, controllare la probabilità di anche un solo falso positivo è troppo severo. La procedura di Benjamini-Hochberg controlla invece il false discovery rate, cioè la quota attesa di falsi positivi tra i risultati dichiarati significativi.
Funziona così: si ordinano i k p-value dal più piccolo, si confronta il p-value in posizione i con (i / k) · q, dove q è la quota di false scoperte accettata, per esempio 0,05 o 0,10, e si dichiarano significativi tutti i test fino all'ultimo che rispetta la condizione.
from statsmodels.stats.multitest import multipletests
pvalori = [0.001, 0.008, 0.039, 0.041, 0.042, 0.06, 0.07, 0.2, 0.5, 0.9]
for metodo in ("bonferroni", "holm", "fdr_bh"):
rifiuta, *_ = multipletests(pvalori, alpha=0.05, method=metodo)
print(metodo, rifiuta.sum())
Con questi valori, Bonferroni e Holm mantengono un solo risultato significativo, Benjamini-Hochberg due: i tre p-value tra 0,039 e 0,042, che singolarmente sembrerebbero interessanti, non sopravvivono a nessuna correzione.
Prevenire è meglio che correggere
Le correzioni aiutano, ma la soluzione più efficace è organizzare l'analisi in modo da non averne bisogno.
- Definisci in anticipo la metrica principale, i segmenti da analizzare e la durata del test, e mettili per iscritto. Nella ricerca scientifica questa pratica si chiama preregistrazione.
- Distingui l'analisi confermativa da quella esplorativa. Esplorare i dati è legittimo e utile, ma i risultati esplorativi vanno presentati come ipotesi da verificare, non come scoperte.
- Riporta tutti i test eseguiti, non solo quelli significativi. Un lettore che sa che sono stati fatti 50 confronti interpreta diversamente un singolo risultato positivo.
- Replica. Il modo più convincente di confermare un risultato inatteso è ripetere l'esperimento con dati nuovi, concentrandosi solo su quel risultato.
- Guarda la dimensione dell'effetto e la plausibilità. Un effetto enorme in un segmento piccolo e mai ipotizzato prima merita molto scetticismo.
In sintesi
- Ogni test aggiuntivo aumenta la probabilità di almeno un falso positivo.
- Con 20 test indipendenti senza effetti reali, quella probabilità è circa del 64%.
- Il p-hacking nasce da scelte guidate dai dati, anche senza intenzione di ingannare.
- Holm controlla l'errore complessivo meglio di Bonferroni; Benjamini-Hochberg controlla la quota di false scoperte.
- Definire l'analisi in anticipo e replicare i risultati inattesi è la difesa più solida.