Hai appena concluso un test A/B. La variante B converte il 15% in più. Festeggi? Magari no. Se il campione è piccolo o la durata insufficiente, quel 15% potrebbe essere solo rumore. Noi, di Meteora Web, vediamo clienti che prendono decisioni millionarie su dati fragili. In questa guida ti spieghiamo come impostare un test A/B che regga il confronto con la statistica, non solo con l'entusiasmo.
Perché la significatività statistica non è un optional
La significatività statistica ti dice se la differenza osservata tra due varianti è reale o se può essere dovuta al caso. Senza di essa, ogni miglioramento è una scommessa. Immagina di lanciare una moneta 10 volte: esce testa 7 volte. È un risultato significativo? No. Con 10 lanci, la variazione casuale è enorme. Con 1000 lanci, 7 su 10 diventerebbero anomali. Stessa logica per le conversioni.
Il problema del campione piccolo
Un test su 100 visitatori per variante è come giudicare un ristorante da un singolo pasto. Se il tasso di conversione base è 2%, con 100 visitatori hai solo 2 conversioni. La variabile casuale domina. La dimensione del campione è il primo parametro da calcolare prima ancora di lanciare il test.
Errore comune: testare su un campione troppo piccolo per risparmiare tempo. Il risultato? Falsi positivi o falsi negativi. Si spende budget per implementare una variante che non funziona, o si scarta una buona.
La variazione casuale
Anche con campioni adeguati, la variazione naturale esiste. Un lunedì piove, il traffico cambia, il server rallenta. La potenza statistica (tipicamente 80%) ti protegge da questi eventi: se c'è un effetto reale, lo vedrai 8 volte su 10. Il livello di significatività (5%) limita il rischio di dichiarare un vincitore quando non c'è differenza.
Come impostare un test A/B con la statistica giusta
Prima di scrivere codice o disegnare varianti, fai i conti. Noi usiamo sempre questa sequenza:
Determinare la dimensione del campione
Serve la formula per il test di proporzioni. Ecco un esempio in Python che puoi copiare e incollare:
import math
def sample_size(alpha, power, p1, p2):
"""
alpha: livello di significatività (es. 0.05)
power: potenza desiderata (es. 0.80)
p1: tasso di conversione attuale (es. 0.02)
p2: tasso atteso della variante (es. 0.025)
"""
z_alpha = 1.96 # per alpha=0.05
z_beta = 0.84 # per power=0.80
p_bar = (p1 + p2) / 2.0
q_bar = 1 - p_bar
q1 = 1 - p1
q2 = 1 - p2
n = (z_alpha * math.sqrt(2 * p_bar * q_bar) + z_beta * math.sqrt(p1 * q1 + p2 * q2))2 / (p2 - p1)2
return math.ceil(n)
# Esempio: tasso attuale 2%, target 2.5%
print(sample_size(0.05, 0.80, 0.02, 0.025))
# Output: ~11.000 per variante
Calcola il numero di visitatori per variante. Se non hai abbastanza traffico, il test non è affidabile. Meglio aspettare o ridurre l'effetto minimo rilevabile (MDE).
Scegliere il livello di significatività e potenza
I valori standard sono alpha=5% e power=80%. Per test critici (es. pagamento) puoi alzare alpha a 1% e power a 90%. Ogni aumento richiede più campione. La scelta dipende dal rischio: se implementare la variante costa caro, vuoi più certezza.
Durata del test
Non fermare il test al primo superamento della significatività. Aspetta che il campione minimo sia raggiunto. Regola empirica: lascia correre per almeno 2 cicli settimanali completi, anche se il campione è raggiunto prima. I pattern di traffico infrasettimanali possono falsare i risultati.
Interpretare i risultati: cosa cercare
Una volta che il test è completo, non guardare solo il p-value. Analizza l'intero quadro.
p-value, intervallo di confidenza e practical significance
Il p-value sotto 0.05 indica che la differenza osservata è improbabile sotto l'ipotesi nulla. Ma non dice quanto è grande la differenza. L'intervallo di confidenza (es. 95%) ti dà il range in cui cade il vero effetto. Esempio: "La variante B aumenta le conversioni del 12% ± 5%" — significa che l'incremento reale è tra il 7% e il 17%. Se l'intervallo contiene lo zero, non è significativo.
La significatività pratica è diversa: anche se statisticamente significativo, l'effetto è abbastanza grande da giustificare l'implementazione? Un aumento dello 0,1% su 10.000 utenti potrebbe non valere lo sforzo tecnico.
Errori comuni nell'interpretazione
- Guardare il test troppo presto (peeking): se controlli ogni giorno e fermi al primo p-value significativo, inflazioni il tasso di falsi positivi. Usa sequential testing o aspetta la dimensione pianificata.
- Fermarsi al primo segnale: anche se la significatività è raggiunta prima, la dimensione del campione potrebbe non essere sufficiente per stimare l'effetto con precisione.
- Ignorare la segmentazione: un test può essere significativo su mobile ma non su desktop. Analizza per segmenti se ha senso.
Strumenti per il calcolo
Noi usiamo principalmente Python e R per i calcoli, ma esistono calcolatori web affidabili. Ecco un esempio in R che restituisce la dimensione del campione:
# In R
power.prop.test(
n = NULL,
p1 = 0.02,
p2 = 0.025,
sig.level = 0.05,
power = 0.80,
alternative = "one.sided"
)
# Output: n = 11308 per gruppo
Per il calcolo del p-value a test concluso, usa un test chi-quadrato o il test di Fisher in Python (scipy.stats.chi2_contingency) o R (prop.test).
In sintesi — cosa fare adesso
- Calcola la dimensione del campione con la formula sopra prima di lanciare il test. Non improvvisare.
- Fissa durata e soglia di significatività prima di iniziare. Scrivilo da qualche parte.
- Non guardare i risultati fino a quando il campione non è raggiunto. Se devi, usa metodi sequential.
- Interpreta intervallo di confidenza e significatività pratica, non solo il p-value.
- Documenta ogni test: ipotesi, campione, durata, risultati. Impara per il prossimo.
Un test A/B ben progettato è un investimento. Un test mal fatto è un costo che non si vede. Noi, di Meteora Web, costruiamo strumenti per misurare ogni click. Se vuoi approfondire, qui parliamo di come segmentare il pubblico per test più efficaci.