Vai al contenuto principale
Incrementality testing e holdout - immagine ufficiale della lezione su GinnyTech, creata da AD

Incrementality testing e holdout

Misurare l'effetto incrementale del marketing con holdout test e gruppi di controllo.

AD
Creato daAndrii Dyshkantiuk
Lezione 86 / 236Livello: AvanzatoDurata: 22 minPrerequisiti: 1

Cosa imparerai

  • Progettare un holdout test con randomizzazione, dimensione e durata adeguate
  • Calcolare il ROAS incrementale e confrontarlo con il ROAS apparente
  • Riallocare il budget solo su canali con lift significativo e stabile

Incrementality testing e holdout

La domanda che guida l’incrementality è la più scomoda del marketing: quanto del tuo budget sta creando vendite, e quanto sta solo comprando domanda che esisteva già? Senza holdout test, le conversioni cannibalizzate e quelle organiche attribuite per errore sono indistinguibili da quelle incrementali, e nella media dei settori rappresentano il 40-70 per cento del totale. Qui impari a progettare, eseguire e leggere un holdout test.

Che cos’è l’incrementality testing

L’incrementality testing misura le vendite create davvero dalla campagna confrontando esposti e holdout per tagliare spesa che compra domanda già esistente.

La procedura in cinque passaggi

Ecco la sequenza che seguiamo per progettare, eseguire e leggere un holdout test.

  1. Randomizza un holdout di almeno il 10 per cento a livello utente.
  2. Isola il controllo dal canale testato per l’intero ciclo di acquisto.
  3. Misura lift assoluto e relativo su revenue e profitto, non su click.
  4. Testa la significatività con t-test e intervallo di confidenza.
  5. Rialloca budget su ROAS incrementale, non su ROAS apparente.

Perché ogni canale mente senza holdout

Un utente vede un annuncio Facebook e compra. Ci sono tre possibilità. Ha comprato a causa dell’annuncio, ed è incrementale: il canale crea valore reale. Avrebbe comprato comunque, ed è cannibalizzazione: stai pagando per una conversione gratuita. Oppure è un nuovo cliente organico attribuito per errore al canale, e ti stai prendendo un credito immeritato.

Senza holdout test, i casi due e tre sono indistinguibili dal primo. E nella media dei settori rappresentano il 40-70 per cento delle conversioni attribuite. L’incrementality non è un raffinamento accademico: è la differenza tra sapere quanto budget sta lavorando e quanto sta solo seguendo domanda già esistente.

Progettare un holdout test

Un holdout test si costruisce tenendo da parte una quota di utenti che non riceve la campagna, e confrontando poi il comportamento dei due gruppi. Lo scheletro in Python è semplice.


users = df['user_id'].unique()
holdout_size = int(len(users) * 0.10)  # 10% controllo
holdout_set = set(random.sample(list(users), holdout_size))

df['is_holdout'] = df['user_id'].isin(holdout_set)
# Il gruppo holdout NON riceve campagne su questo canale
# per la durata del test

# Dopo 30 giorni: analisi
exposed = df.query('is_holdout == False')
control = df.query('is_holdout == True')

lift_absolute = exposed['converted'].mean() - control['converted'].mean()
lift_relative = lift_absolute / control['converted'].mean() * 100
from scipy.stats import ttest_ind
_, p_value = ttest_ind(exposed['converted'], control['converted'])

print(f"Incremental lift: {lift_absolute:.4f} ({lift_relative:.1f}%), p={p_value:.4f}")

Perché un holdout sia valido servono alcune condizioni. La randomizzazione deve essere vera, non prendere gli inattivi, altrimenti il controllo non è comparabile. La dimensione deve bastare, con un minimo di 1000 utenti per gruppo per avere potenza statistica. La durata copre almeno un ciclo di acquisto completo, da 2 a 4 settimane per l’e-commerce e da 1 a 3 mesi per il SaaS. Il gruppo di controllo non deve mai ricevere campagne su quel canale per l’intero periodo. E il lift va misurato su metriche di business come revenue e profitto, non su metriche intermedie come CTR o click.

Tipi di holdout test

Non esiste un solo modo di tenere da parte un gruppo di controllo, e ogni metodo ha compromessi diversi.

TipoMetodoProContro
GeograficoSpegni campagne in mercato A, tieni in BSemplice, nessun impatto UXMercati diversi possono avere dinamiche diverse
TemporaleSpegni per 2 settimane, confronta con 2 settimane prima e dopoFacile, stesso mercatoStagionalità e trend esterni confondono
Utente standardRandom split a livello utenteIl più robusto statisticamenteIl controllo potrebbe notare assenza ads
Ghost adsMostri ad placebo al controlloControllo perfetto, utente non notaComplesso, richiede ad server dedicato

Verdetto: holdout utente come standard, geografico per semplicità operativa, ghost ads solo con ad server dedicato.

Calcolare il vero ROAS incrementale

Una volta raccolti i dati, il confronto chiave è tra il ROAS che tutti misurano e quello che conta davvero.

# ROAS apparente (quello che tutti misurano)
apparent_roas = exposed['revenue'].sum() / campaign_spend

# ROAS incrementale
incremental_revenue = (exposed['revenue'].mean() - control['revenue'].mean()) * len(exposed)
incremental_roas = incremental_revenue / campaign_spend

print(f"Apparent ROAS: {apparent_roas:.1f}x")
print(f"Incremental ROAS: {incremental_roas:.1f}x")

if incremental_roas > apparent_roas * 0.5:
    print("Canale genuinamente efficace")
else:
    print("ATTENZIONE: maggior parte delle conversioni non incrementali")

Non stupirti se un canale con ROAS apparente di 5x ha un ROAS incrementale di 1.5x. È normale, e significa che il canale resta profittevole ma molto meno di quanto sembri.

Il caso eBay: l’holdout che ha salvato 50 milioni di dollari

Nel 2012 eBay spendeva 50 milioni di dollari l’anno su Google Ads per la keyword eBay, cioè le proprie brand keyword. Fecero un holdout geografico: spensero le ads in 30 mercati USA e le mantennero in 30 mercati simili. Dopo 60 giorni la differenza di revenue tra i mercati con e senza ads era zero. Gli utenti che cercavano eBay su Google avrebbero comunque cliccato il risultato organico, primo in classifica, e comprato. Quei 50 milioni erano spesa pura senza alcun effetto incrementale.

eBay tagliò completamente le brand keyword. Il traffico organico assorbì il 99.5 per cento del volume precedente e il revenue restò invariato. Lo chiamarono il più costoso test A/A della storia, perché controllo ed esposti si comportavano allo stesso modo. Il risultato è documentato nel paper di Blake, Nosko e Tadelis del 2015 su Econometrica.

Costruire un programma di incrementality permanente

Un singolo holdout è utile, ma il valore cresce quando il testing diventa pratica continua. Ogni canale che pesa più del 5 per cento del budget dovrebbe avere un holdout test almeno una volta l’anno. Dopo ogni cambio di strategia, come nuovo targeting o nuova creatività, va rifatto un test. Ogni report di canale dovrebbe riportare sia il ROAS apparente sia quello incrementale. E l’allocazione del budget dovrebbe basarsi sul ROAS incrementale, non su quello apparente.

Prima di usare un holdout in una decisione, controlla sempre completezza dei dati, duplicati, timezone, definizioni cambiate e segmenti esclusi.

L’errore tipico da evitare

L’errore più comune è usare l’incrementality come etichetta invece che come processo. Succede quando il team mostra un grafico senza decisione, una metrica senza baseline o una conclusione senza indicare quale assunzione potrebbe invalidarla. La domanda di controllo è: se questo risultato fosse instabile, quale scelta sbaglieresti? Se la risposta non è concreta, manca ancora il collegamento tra analisi e azione.

Un caso che fa riflettere: eBay

Nel 2012 eBay spendeva 50 milioni di dollari l’anno in annunci Google sulla propria brand keyword. Con un holdout geografico spense le ads in 30 mercati USA e le mantenne in 30 mercati simili per 60 giorni. La differenza di revenue tra trattati e controllo risultò pari a zero. Il traffico organico assorbì il 99.5 per cento del volume e il revenue restò invariato. Il risultato fu pubblicato da Blake, Nosko e Tadelis nel 2015 su Econometrica.

Domande per l’autoverifica

  1. Quale quota di conversioni attribuite è davvero incrementale nel tuo canale?
  2. Quale randomizzazione rende il controllo confrontabile con gli esposti?
  3. Quale ROAS incrementale giustifica budget aggiuntivo oltre il ROAS apparente?
  4. Quale durata copre un ciclo di acquisto completo prima di decidere?
Serve una mano concreta?

Bloccato su questo argomento o vuoi applicarlo al tuo caso? Prenota una call di 15 minuti con un analista esperto.

Prenota una call