Vai al contenuto

Retail e beni di consumoBI, AI e ML per l'azienda

Test A/B con il suo p-value

Una pagina converte più dell'altra, ma la differenza può essere solo il caso. In Muvia un test statistico scritto in Python si ricalcola ogni mattina sui dati cumulati, Analisi mostra quando la differenza diventa significativa e Athena scrive la conclusione in un notebook.

Scenario illustrativo: descrive un caso tipo, non il progetto di un cliente.

B converte di più. È vero, o è il caso?

Il team ha messo online una seconda versione della pagina e diviso il traffico a metà. Dopo qualche giorno B è avanti e qualcuno vuole già adottarla; qualche giorno dopo è indietro. Guardare il tasso di conversione ogni mattina e decidere a sensazione è il modo più rapido per scegliere la pagina sbagliata.

Serve un test statistico rifatto sui dati cumulati, con l'intervallo di confidenza accanto alla differenza, e una regola chiara su quando la differenza è abbastanza solida da decidere.

Per chi
Responsabili e-commerce e prodotto, marketing, analisti che progettano gli esperimenti.
Visite e conversioni delle due varianti da un'API REST, ordini e ricavi dal database del negozio online su PostgreSQL e il registro degli esperimenti da Google Sheets entrano in Muvia, dove una funzione Python fa il test statistico ogni mattina; ne escono la tabella dell'esito, un'analisi del p-value nel tempo, il notebook con la conclusione e le risposte di Athena.

In Muvia, passo per passo

Schermate vere del prodotto, registrate su un progetto con dati di esempio.

1 di 5

Il video · Una pagina converte più dell'altra, ma la differenza può essere solo il caso. In Muvia un test statistico scritto in Python si ricalcola ogni mattina sui dati cumulati, Analisi mostra quando la differenza diventa significativa e Athena scrive la conclusione in un notebook.

Cosa ottieni

Decisioni con i numeri
Una pagina si adotta quando la differenza è significativa, non quando sembra avanti da qualche giorno.
L'incertezza scritta accanto
Differenza, intervallo di confidenza e p-value stanno nella stessa riga, aggiornati ogni mattina.
Il test si rifà da solo
Il flusso ricalcola l'esito sui dati cumulati ogni giorno, senza che nessuno riapra un foglio di calcolo.
Una conclusione da condividere
Il notebook con risultati e decisione è scritto da Athena e legge sempre l'ultimo esito.

Per il team tecnico

Come si costruisce in Muvia

  1. 1

    Raccogli visite e conversioni

    Le sorgenti portano visite, conversioni e ricavi per variante ora per ora; una query li mette in una serie per l'esperimento.

  2. 2

    Scrivi il test in Python

    Una funzione Python fa il test z a due proporzioni sui dati cumulati: i tassi delle due varianti, la differenza in punti con l'intervallo al 95% e il p-value. Il livello di significatività è un parametro.

  3. 3

    Programma il test

    Un flusso lo esegue ogni mattina alle 7 e scrive l'esito in una tabella gestita, una riga per giorno.

  4. 4

    Segui l'esperimento in Analisi

    I tassi delle due pagine e il p-value stanno uno sopra l'altro nel tempo: si vede il giorno in cui la curva scende sotto la soglia e ci resta.

  5. 5

    Fai scrivere la conclusione ad Athena

    Con una domanda Athena salva nel Laboratorio la query di confronto e crea un notebook con la tabella dei risultati e la decisione.

Funzione Python

import numpy as np
import pandas as pd
from scipy.stats import norm

def transform(inputs, params, ctx):
    d = inputs["rows"].copy()
    d["giorno"] = pd.to_datetime(d["ora"]).dt.floor("D")
    g = d.pivot_table(index="giorno", columns="variante",
                      values=["visite", "conversioni"], aggfunc="sum").cumsum()
    va, vb = g["visite"]["A"], g["visite"]["B"]
    ca, cb = g["conversioni"]["A"], g["conversioni"]["B"]
    pa, pb = ca / va, cb / vb
    p = (ca + cb) / (va + vb)
    z = (pb - pa) / np.sqrt(p * (1 - p) * (1 / va + 1 / vb))
    se = np.sqrt(pa * (1 - pa) / va + pb * (1 - pb) / vb)
    out = pd.DataFrame({
        "tasso_a": 100 * pa, "tasso_b": 100 * pb,
        "differenza_pp": 100 * (pb - pa),
        "ic_inferiore_pp": 100 * (pb - pa - params["z_critico"] * se),
        "ic_superiore_pp": 100 * (pb - pa + params["z_critico"] * se),
        "p_value": 2 * norm.sf(np.abs(z)),
    }).round(4).reset_index()
    out["significativo"] = (out["p_value"] < params["alfa"]).astype(int)
    return {"rows": out}
Il test z a due proporzioni sui dati cumulati, giorno per giorno: differenza, intervallo al 95% e p-value.
I dati che servono
  • Visite e conversioni orarie per variante, lette da un'API REST
  • Ordini e ricavi per variante, dal database del negozio online su PostgreSQL
  • Registro degli esperimenti con varianti, date e ipotesi, da Google Sheets
Le parti di Muvia usate

Portaci una domanda a cui oggi non sai rispondere.

Partiamo da una domanda vera della tua azienda e ti mostriamo il percorso dalla fonte al cruscotto, con i tuoi sistemi e non con quelli di una demo.