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.
Sponsored Protocol