
Marketing Mix Modeling (MMM)
Marketing Mix Modeling: measuring the incremental impact of each channel on aggregated revenue.
What you will learn
- Applicare adstock e curva di Hill alla spesa per canale prima della stima del modello
- Calibrare il modello con lift da geo-test e validare la previsione fuori campione
- Riallocare il budget sul ROAS marginale con scenari vincolati e regione di controllo
Marketing Mix Modeling (MMM)
Questa lezione appartiene al binario tabellare: il lavoro si svolge su serie storiche settimanali, tabelle di spesa riconciliate e curve di risposta, più che su percorsi individuali. Il board chiede se gli otto milioni in TV hanno spostato il fatturato. Il team search giura che il revenue arriva dal brand bidding. Intanto il fatturato si muove per motivi suoi: stagionalità, pricing, un competitor che taglia i prezzi del venti per cento. Nessun cookie e nessun modello a singolo tocco dipana il groviglio. Il problema non è tracciare meglio il singolo utente, ma stimare un controfattuale aggregato: quanto avremmo venduto senza quel canale.
Il controfattuale aggregato
Il Marketing Mix Modeling stima il contributo incrementale di ogni canale al revenue aggregato separando memoria pubblicitaria, saturazione e fattori esogeni con serie storiche calibrate su esperimenti.
Sei passi per costruire un MMM
- Raccogli almeno due anni di serie settimanali con vendite, spesa per canale, prezzi, promozioni, festività e vincoli di offerta.
- Riconcilia la spesa tra fonte finance ed estratti piattaforme e separa il branded dal non branded nella search.
- Applica adstock e curva di saturazione per canale prima della stima, con parametri differenziati tra brand e performance.
- Stima il modello bayesiano con priori informativi e controlli esogeni, verificando stabilità e quota di baseline.
- Calibra i canali controversi con lift da geo-test o holdout e valida la previsione fuori campione.
- Rialloca sull’euro marginale con scenari vincolati e una regione di controllo che verifichi il delta previsto.
Perché l’attribuzione individuale non basta più
L’attribuzione last-click racconta una storia comoda ma falsa. Assegna tutto il merito all’ultimo tocco, premia search branded e retargeting, ignora i canali che costruiscono domanda a monte. Se tagli la TV perché non genera click diretti, la search branded crolla tre settimane dopo e nessuno capisce perché. Misuri solo ciò che è facile tracciare.
TheMMM rovescia il punto di vista. Non segue individui: aggrega per settimana e area geografica e osserva come le vendite rispondono alle variazioni di spesa, al netto di tutto il resto. La domanda diventa econometrica: controllando prezzo, promozioni, stagionalità e trend, quanta varianza residua spiega la pressione media su ciascun canale. Questo lo rende robusto a frammentazione degli identificatori e walled garden. Lo rende però affamato di varianza: senza sufficiente variazione di spesa nel tempo e nello spazio, non ha nulla da imparare.
La regola pratica è semplice. Usa l’attribuzione individuale per ottimizzare il tattico dentro un canale già finanziato: quale creatività, quale keyword, quale audience. Usa l’MMM per decidere quanto finanziare ciascun canale e per stimare l’incrementalità vera, cioè le vendite che non sarebbero accadute comunque.
Verdetto: attribuzione per le manopole settimanali dentro i budget e MMM per i budget trimestrali tra canali, perché i due strumenti rispondono a domande diverse e usarne uno solo distorce l’altra.
Come ragiona davvero un modello di mix
Al cuore c’è una regressione multivariata su serie storica. La forma base è leggibile anche senza background bayesiano:
Vendite(t) = Baseline(t) + Somma_contributi_canali(t) + Effetti_controlli(t) + Errore(t)
La baseline è ciò che venderesti a spesa zero: brand accumulato, traffico organico, passaparola, distribuzione esistente. I contributi dei canali sono funzioni trasformate della spesa, non spesa grezza, perché la risposta ha memoria e rendimenti decrescenti. I controlli assorbono ciò che muove le vendite ma non è media: prezzo medio ponderato, profondità promozionale, festività e attività competitor quando misurabile.
Il punto delicato è l’identificazione. Se alzi sempre TV e YouTube nelle stesse settimane di picco, il modello non separa i due effetti dalla stagionalità. La collinearità tra canali è la norma, non l’eccezione, perché i piani media sono coordinati per costruzione. Per questo un MMM solo osservazionale produce coefficienti instabili: aggiungi due mesi e il ROI della radio raddoppia mentre il digital crolla.
La risposta moderna tratta l’MMM come problema bayesiano con priori informativi ed esperimenti di calibrazione, non come regressione ai minimi quadrati. Librerie come LightweightMMM of Google e Robyn of Meta seguono questa strada: priori su segno e scala, gerarchie per geografia e ancoraggio a lift misurati con test geografici o holdout.
Adstock e saturazione: la fisica della risposta pubblicitaria
Due trasformazioni separano un MMM serio da una regressione ingenua sulla spesa grezza. La prima è l’adstock, cioè la memoria della pubblicità. Uno spot visto martedì influenza anche gli acquisti di domenica, con intensità decrescente. La forma geometrica più usata è ricorsiva con un solo parametro:
Adstock(t) = Spesa(t) + lambda * Adstock(t-1)
The parameter lambda, tra zero e uno, misura la persistenza. Intorno a 0,2 descrive canali immediati come la search non branded, dove quasi tutto si esaurisce nella settimana. Intorno a 0,7 o 0,8 descrive TV e audio, dove metà effetto arriva nelle settimane dopo. Se lo fissi uguale per tutti, sottostimi i brand e sovrastimi i performance.
La seconda trasformazione è la saturazione, cioè i rendimenti decrescenti. I primi centomila euro su un canale efficiente rendono molto più dei successivi centomila: saturi le audience ricettive e alzi la frequenza su utenti già esposti. La forma standard è la funzione di Hill a due parametri:
Effetto(x) = beta * x^alpha / (gamma^alpha + x^alpha)
Qui beta è il tetto asintotico, gamma il punto di mezza saturazione, alpha la pendenza. Prima distribuisci la spesa nel tempo con l’adstock, poi la fai passare nella curva: l’ordine conta e quasi tutti i pacchetti applicano adstock seguito da Hill.
import numpy as np
import pandas as pd
# Applica l'adstock geometrico a una serie di spesa settimanale
def apply_adstock(spesa: np.ndarray, lam: float) -> np.ndarray:
# spesa: array con la spesa media per settimana
# lam: tasso di persistenza tra 0 e 1
risultato = np.zeros_like(spesa, dtype=float)
accumulo = 0.0
for t, s in enumerate(spesa):
# l'effetto corrente somma spesa fresca e residuo passato
accumulo = s + lam * accumulo
risultato[t] = accumulo
return risultato
# Curva di Hill per i rendimenti decrescenti
def hill(x: np.ndarray, beta: float, alpha: float, gamma: float) -> np.ndarray:
# beta: tetto massimo del contributo; alpha: pendenza; gamma: mezza saturazione
numeratore = beta * np.power(x, alpha)
denominatore = np.power(gamma, alpha) + np.power(x, alpha)
return numeratore / denominatore
# Esempio: TV con memoria lunga, search con memoria corta
spesa_tv = np.array([100, 120, 0, 80, 110, 90], dtype=float)
tv_adstock = apply_adstock(spesa_tv, lam=0.7)
tv_effetto = hill(tv_adstock, beta=500.0, alpha=1.5, gamma=150.0)
Nota la settimana a spesa zero: l’adstock continua a generare effetto residuo, ed è proprio quel carryover che giustifica investimenti brand apparentemente improduttivi nel breve. Quando calcoli il ROI, devi attribuire al volo TV anche le vendite delle settimane successive, altrimenti confronti mele con pere.
Dati e granularità: cosa serve per farlo girare
A MMM vive o muore sugli input. Il minimo è una serie settimanale di almeno due anni, meglio tre: vendite come dipendente, spesa e impression per canale come leve, prezzo, distribuzione, promozioni e festività come controlli. La granularità settimanale bilancia rumore e segnale: il giornaliero introduce cicli infra-settimanali difficili, il mensile distrugge i gradi di libertà.
La dimensione geografica cambia tutto. Un modello nazionale ha poche decine di osservazioni e molti parametri: il segnale è fragile. Un gerarchico su venti o trenta aree moltiplica le osservazioni e sfrutta piani media diversi, stabilizzando le stime. È per questo che geo-esperimenti e MMM sono alleati naturali: entrambi sfruttano variazione geografica indipendente dalla stagionalità nazionale.
Sul fronte igiene, tre controlli valgono più di ogni raffinatezza. Primo, riconcilia la spesa tra finance ed estratti piattaforme: discrepanze del dieci per cento tra fatturato agency e impression sono la norma e spostano i ROI. Secondo, separa spesa branded e non branded nella search: hanno incrementalità diverse e mescolarle produce un coefficiente medio inutile. Terzo, traccia stock-out e cambi di prezzo: vendite depresse da indisponibilità sembrano fallimenti marketing se non le modelli come vincolo di offerta.
Calibrazione con gli esperimenti: il ponte verso la causalità
A MMM solo osservazionale stima correlazioni condizionate, non effetti causali. La calibrazione lo àncora alla realtà: prendi un lift da esperimento pulito e lo usi come vincolo. L’esperimento principe è il geo-test: spegni un canale in regioni comparabili per quattro o sei settimane, tieni fermo il resto, misura contro i controlli. Il lift diventa il punto di verità che il modello deve replicare.
Nella pratica bayesiana la calibrazione entra come prior o verosimiglianza aggiuntiva sul ROI di quel canale. Robyn usa pesi di calibrazione espliciti, LightweightMMM priori stretti da esperimenti. L’effetto è immediato: senza calibrazione il modello può dare alla TV a ROAS di cinque perché correla col Natale; con un geo-test a 1,8 il posterior si sposta sul valore sperimentale e trascina anche gli altri canali correlati.
Non serve calibrare tutto ogni anno. La strategia efficiente è ruotare un grande esperimento all’anno sul canale più controverso, tipicamente TV, search branded o il canale digital dominante, e usare holdout più leggeri per validare gli altri. Airbnb seguì esattamente questa logica quando mise in discussione il SEM branded: i test di spegnimento in alcuni mercati mostrarono che gran parte del traffico branded sarebbe arrivato comunque dall’organico, e l’MMM ricalibrato spostò budget verso canali upper-funnel con carryover più alto.
Leggere i coefficienti senza farsi ingannare
L’output che conta non è il coefficiente grezzo ma la decomposizione del revenue: quanta parte delle vendite settimanali viene da baseline, quanto da ciascun canale, quanto da prezzo e promozioni. Da qui derivano ROAS incrementale e costo incrementale, entrambi sul contributo marginale, non medio. Un canale può avere ROAS medio di tre e marginale di 0,8: gli ultimi euro distruggono valore anche se la media sembra sana.
Tre diagnostiche separano un modello credibile da uno decorativo. La prima è la quota di baseline: se supera l’ottanta per cento in una categoria con forte pressione media, il modello sta probabilmente sottraendo merito ai canali; se scende sotto il trenta per cento in un brand maturo con alta awareness organica, sta sovrastimando. La seconda è la stabilità out-of-sample: allena fino a sei mesi fa e verifica la previsione sugli ultimi mesi senza ricalibrare; un errore che esplode fuori campione segnala overfitting sulle trasformazioni. La terza è il confronto con i priori: se il posterior di un canale si discosta radicalmente dal lift sperimentale, o hai scoperto qualcosa di reale o hai un problema di specificazione.
Attenzione anche a due trappole ricorrenti. La multicollinearità gonfia gli intervalli e rende i contributi intercambiabili tra canali correlati: la soluzione non è eliminare canali ma introdurre struttura, priori differenziati, gerarchie geografiche, calibrazione. L’endogeneità da budgeting reattivo è più sottile: se alzi la spesa quando le vendite vanno bene e la tagli quando vanno male, la spesa segue le vendite invece di causarle e il coefficiente è distorto verso l’alto.
Verdetto: il ROAS marginale calibrato decide mentre il ROAS medio osservato descrive soltanto, perché solo il primo dice cosa rende il prossimo euro.
Dal modello al budget: allocazione e scenari
Il valore dell’MMM si realizza come ottimizzatore di budget vincolato. La logica è marginalista: sposta euro dal canale col rendimento marginale più basso a quello col più alto, finché i rendimenti non si eguagliano al netto dei vincoli. Le curve stimate rendono il calcolo esplicito: per ogni canale vedi quanto revenue incrementale generano i prossimi centomila euro rispetto ai livelli attuali.
import numpy as np
# Stima grezza del rendimento marginale per canale
def rendimento_marginale(spesa_attuale, beta, alpha, gamma, passo=10.0):
# confronta l'effetto a spesa attuale con quello a spesa aumentata di un passo
base = beta * spesa_attuale**alpha / (gamma**alpha + spesa_attuale**alpha)
sopra = beta * (spesa_attuale + passo)**alpha / (gamma**alpha + (spesa_attuale + passo)**alpha)
# restituisce revenue incrementale per euro aggiuntivo
return (sopra - base) / passo
# Esempio: tre canali con saturazione diversa, budget extra da allocare
canali = {
"tv": {"spesa": 300.0, "beta": 900.0, "alpha": 1.4, "gamma": 350.0},
"youtube": {"spesa": 150.0, "beta": 600.0, "alpha": 1.8, "gamma": 180.0},
"search_nb": {"spesa": 80.0, "beta": 400.0, "alpha": 1.1, "gamma": 120.0},
}
for nome, p in canali.items():
rm = rendimento_marginale(p["spesa"], p["beta"], p["alpha"], p["gamma"])
# valori sopra 1 indicano ritorno positivo sull'euro marginale
print(nome, round(rm, 3))
Nella realtà i vincoli contano quanto i rendimenti: minimi di presenza per mantenere share of voice, massimi di inventario acquistabile, tempi di prenotazione TV trimestrali, soglie di efficienza sotto cui un canale perde senso operativo. Un buon deliverable presenta quindi tre scenari: riallocazione conservativa con spostamenti entro il quindici per cento, aggressiva con raddoppi e azzeramenti parziali, e di test con budget protetto per validare le raccomandazioni più incerte. Ogni scenario deve riportare revenue incrementale atteso, intervallo di credibilità e assunzioni che lo farebbero fallire.
Dove l’MMM sbaglia: limiti onesti e controlli
L’MMM fallisce in modi prevedibili e vale la pena conoscerli prima di firmare una riallocazione. Con pochi dati storici o spesa piatta senza variazione, le stime sono indeterminate: qualunque decomposizione spiega ugualmente bene il passato e male il futuro. Con lanci di prodotto o discontinuità strutturali, il passato non contiene l’informazione necessaria e servono giudizio e test dedicati, non estrapolazioni. Con categorie a ciclo di acquisto lunghissimo, come automotive o mutui, la granularità settimanale cattura male effetti che maturano in mesi.
Il controllo qualità minimo prima di presentare al management sta in quattro verifiche. Coerenza con gli esperimenti disponibili, senza deroghe silenziose. Stabilità temporale, perché un modello che cambia verdetto a ogni refresh mensile non è uno strumento decisionale. Plausibilità della baseline rispetto alla storia del brand e alla quota organica osservata nei periodi di bassa pressione. Infine analisi dei residui: residui autocorrelati indicano dinamica mancante, spesso un adstock mal specificato o un controllo stagionale assente.
Sul piano organizzativo, il rischio maggiore è l’uso selettivo dei risultati. I team tendono ad accettare il modello quando conferma le loro convinzioni e a contestarne la metodologia quando taglia il loro canale. La difesa è procedurale: concorda priori, metriche di successo e regole di riallocazione prima di vedere i risultati, documenta le scelte di specificazione, e tratta ogni refresh come un aggiornamento bayesiano trasparente.
Mettere l’MMM in produzione nel team
Un MMM che vive in un notebook isolato muore al primo cambio di responsabile. La messa in produzione significa pipeline dati versionata, refresh schedulato e interfacce leggibili per chi decide. Lo stack tipico unisce un data warehouse con tabelle di spesa riconciliate, uno strato di trasformazione che applica adstock e Hill in modo deterministico, un motore di stima bayesiano e una dashboard che mostra decomposizione, curve di risposta e scenari di budget con intervalli di incertezza. Ogni componente deve essere riproducibile: stessi input e stesso seed producono stessi output, e ogni refresh archivia dati, codice e priori usati.
La scelta dello strumento dipende da maturità e vincoli. Robyn, open source di Meta, offre automazione della selezione variabili, ottimizzazione del budget integrata e calibrazione esplicita, al prezzo di una complessità che richiede supervisione per evitare soluzioni spurie. LightweightMMM di Google è più essenziale e trasparente, costruito su Numpyro, ideale se il team ha già familiarità bayesiana e vuole controllo pieno su priori e gerarchie. Le soluzioni vendor gestite riducono il carico operativo ma oscurano le assunzioni: accettabili solo se il fornitore espone priori, diagnostiche e codice di trasformazione in modo ispezionabile.
Verdetto: Robyn per partire in fretta con automazione e calibrazione guidata e LightweightMMM per il controllo bayesiano pieno, perché lo strumento deve seguire la maturità del team e non il contrario.
Un caso reale: il branded search di eBay
eBay sospende gli annunci sulla propria ricerca brand in una parte del traffico e misura quanta domanda arriva comunque dal canale organico. Gli esperimenti, condotti tra il 2012 e il 2013 e pubblicati nel 2015 su Econometrica da Blake, Nosko e Tadelis, mostrano un lift incrementale prossimo allo zero: la search branded intercettava domanda esistente invece di crearla. Il caso resta il riferimento canonico per la calibrazione dei modelli di mix: senza un vincolo sperimentale, qualsiasi regressione premia chi chiude la vendita invece di chi genera la domanda.
Domande di autoverifica
- Perché un modello stimato solo su dati osservazionali premia la search branded?
- Cosa succede alle stime se TV e YouTube salgono sempre nelle stesse settimane?
- Quando un ROAS medio di tre nasconde un marginale sotto uno?
- Quale esperimento ancora il canale più controverso prima della riallocazione?
Bloccato su questo argomento o vuoi applicarlo al tuo caso? Prenota una call di 15 minuti con un analista esperto.
Related Path
Lessons to read together
Questi collegamenti portano la lezione dentro il resto del corso: basi da riprendere, passaggi successivi e connessioni tematiche tra moduli.