Comprensione della modellizzazione della miscela di marketing bayesiano un’analisi approfondita delle specifiche precedenti.

Understanding Bayesian marketing mix modeling - in-depth analysis of previous specifications.

Esplorare la specifica del modello con LightweightMMM di Google

Foto di Pawel Czerwinski su Unsplash

Il modello di marketing mix bayesiano sta ricevendo sempre più attenzione, soprattutto con i recenti rilasci di strumenti open source come LightweightMMM (Google) o PyMC Marketing (PyMC Labs). Sebbene questi framework semplifichino le complessità della modellizzazione bayesiana, è ancora cruciale che l’utente abbia una comprensione dei concetti bayesiani fondamentali e sia in grado di comprendere la specifica del modello.

In questo articolo, prendo LightweightMMM di Google come esempio pratico e mostro l’intuizione e il significato delle specifiche precedenti di questo framework. Dimostro la simulazione di campioni precedenti usando Python e la libreria scipy.

Dati

Utilizzo i dati resi disponibili da Robyn sotto licenza MIT.

Il dataset consiste in 208 settimane di ricavi (dal 23/11/2015 al 11/11/2019) con:

  • 5 canali di spesa media: tv_S, ooh_S, print_S, facebook_S, search_S
  • 2 canali media che hanno anche le informazioni sull’esposizione (Impression, Click): facebook_I, search_clicks_P
  • Media organici senza spesa: newsletter
  • Variabili di controllo: eventi, festività, vendite dei concorrenti (competitor_sales_B)

Specifiche del modello LightweightMMM

Le specifiche del modello LightweightMMM sono definite come segue:

Specifiche del modello LMMM (immagine dell'autore)

Questa specifica rappresenta un modello di regressione lineare additivo che spiega il valore di una risposta (variabile target) in un punto specifico nel tempo t.

Analizziamo ogni componente dell’equazione:

  • α : Questo componente rappresenta l’intercetta o il valore di base della risposta. È il valore atteso della risposta quando tutti gli altri fattori sono zero.
  • trend : Questo componente cattura la tendenza crescente o decrescente della risposta nel tempo.
  • stagionalità : Questo componente rappresenta le fluttuazioni periodiche nella risposta.
  • canali_media : Questo componente tiene conto dell’influenza dei canali media (tv, radio, annunci online) sulla risposta.
  • altri_fattori : Questo componente comprende qualsiasi altra variabile che ha influenza sulla risposta, come il tempo, gli indicatori economici o le attività dei concorrenti.

Di seguito, analizzo ogni componente in dettaglio e spiego come interpretare le specifiche precedenti. Come promemoria, una distribuzione precedente è una distribuzione ipotizzata di alcuni parametri senza conoscenza dei dati sottostanti.

Intercetta

Specifiche precedenti dell'intercetta (immagine dell'autore)

L’intercetta è definita seguendo una distribuzione seminormale con una deviazione standard di 2. Una distribuzione seminormale è una distribuzione di probabilità continua che assomiglia a una distribuzione normale, ma è limitata solo a valori positivi. La distribuzione è caratterizzata da un singolo parametro, la deviazione standard (scala). La distribuzione seminormale implica che l’intercetta può assumere solo valori positivi.

Il codice seguente genera campioni dalla distribuzione precedente dell’intercetta e visualizza la funzione di densità di probabilità (PDF) per una distribuzione seminormale con una scala di 2. Per visualizzazioni di altre componenti, fare riferimento al codice sorgente accompagnatorio nel repository Github.

from scipy import statsscale = 2halfnormal_dist = stats.halfnorm(scale=scale)samples = halfnormal_dist.rvs(size=1000)plt.figure(figsize=(20, 6))sns.histplot(samples, bins=50, kde=False, stat='density', alpha=0.5)sns.lineplot(x=np.linspace(0, 6, 100),       y=halfnormal_dist.pdf(np.linspace(0, 6, 100)), color='r')plt.title(f"Distribuzione seminormale con scala={scale}")plt.xlabel('x')plt.ylabel('P(X=x)')plt.show()
Distribuzione Normale a Metà (immagine dell'autore)

Tendenza

Specificazione della Tendenza (immagine dell'autore)

La tendenza viene definita come una relazione di legge di potenza tra il tempo t e il valore della tendenza. Il parametro μ rappresenta l’ampiezza o la magnitudine della tendenza, mentre k controlla la ripidezza o la curvatura della tendenza.

Il parametro μ è estratto da una distribuzione normale con media 0 e deviazione standard 1. Ciò implica che μ segue una distribuzione normale standard, centrata attorno a 0, con una deviazione standard di 1. La distribuzione normale consente valori positivi e negativi di μ, rappresentanti rispettivamente tendenze ascendenti o discendenti.

Il parametro k è estratto da una distribuzione uniforme tra 0,5 e 1,5. La distribuzione uniforme garantisce che k assuma valori che producano una curvatura ragionevole e significativa per la tendenza.

Il grafico qui sotto rappresenta i singoli componenti ottenuti dalle distribuzioni precedenti: un campione dell’intercetta e della tendenza, rappresentati singolarmente.

Tendenza e Intercetta (immagine dell'autore)

Stagionalità

Specificazione della Stagionalità (immagine dell'autore)

Ogni componente γ è estratto da una distribuzione normale con media 0 e deviazione standard 1.

Combinando le funzioni coseno e seno con diverse γ, possono essere modellati schemi ciclici per catturare la stagionalità presente nei dati. Le funzioni coseno e seno rappresentano il comportamento oscillante osservato nel periodo di 52 unità (settimane).

Il grafico qui sotto illustra un campione della stagionalità, intercetta e tendenza ottenuti dalle distribuzioni precedenti.

Stagionalità, Tendenza e Intercetta (immagine dell'autore)

Altri fattori (variabili di controllo)

Specificazione di Altri Fattori (immagine dell'autore)

Ogni coefficiente di fattore λ ​​è estratto da una distribuzione normale con media 0 e deviazione standard 1, il che significa che λ può assumere valori positivi o negativi​, rappresentando la direzione e la magnitudine dell’influenza che ciascun fattore ha sul risultato.

Il grafico qui sotto rappresenta i singoli componenti ottenuti dalle distribuzioni precedenti: un campione dell’intercetta, della tendenza, della stagionalità e delle variabili di controllo (vendite concorrenti B, newsletter, festività ed eventi), rappresentati singolarmente.

Altri fattori (combinati) (immagine dell'autore)

Canali Media

Specificazione di Canali Media Precedenti (immagine dell'autore)

La distribuzione del coefficiente β di un canale media m è specificata come una distribuzione seminormale, dove il parametro di deviazione standard v è determinato dalla somma del costo totale associato al canale media m. Il costo totale riflette l’investimento o le risorse allocate a quel particolare canale media.

Trasformazioni dei media

Specifica di saturazione di Adstock e Hill (immagine dell'autore)

In queste equazioni, stiamo modellando il comportamento dei canali media utilizzando una serie di trasformazioni, come adstock e saturazione di Hill.

Modellizzazione della miscela di marketing utilizzando PyMC3

Sperimentando con le priorità, la normalizzazione dei dati e confrontando la modellizzazione bayesiana con Robyn, l’MMM open-source di Facebook…

towardsdatascience.com

La variabile dei canali media rappresenta i canali media trasformati al tempo t. Si ottiene applicando una trasformazione al valore grezzo del canale media x. La trasformazione di Hill è controllata dai parametri K, un punto di semisaturazione (0 0).

La variabile x ∗ rappresenta il valore trasformato dei canali media al tempo t dopo aver subito la trasformazione di adstock. Viene calcolato aggiungendo il valore corrente del canale media grezzo al prodotto del valore trasformato precedente e del parametro di decadimento adstock λ.

I parametri K e S seguono distribuzioni gamma con parametri di forma e scala entrambi impostati a 1, mentre λ segue una distribuzione beta con parametri di forma 2 e 1.

La funzione di densità di probabilità dei parametri di saturazione di Hill K e S sono illustrati nel grafico qui sotto:

shape = 1scale = 1gamma_dist = stats.gamma(a=shape, scale=scale)samples = gamma_dist.rvs(size=1000)plt.figure(figsize=(20, 6))sns.histplot(samples, bins=50, kde=False, stat='density', alpha=0.5)sns.lineplot(x=np.linspace(0, 6, 100), y=gamma_dist.pdf(np.linspace(0, 6, 100)), color='r')plt.title(f"Distribuzione gamma per $K_m$ e $S_m$ con forma={shape} e scala={scale}")plt.xlabel('x')plt.ylabel('P(X=x)')# Mostra il graficoplt.show()python
Distribuzione gamma (immagine dell'autore)

La funzione di densità di probabilità del parametro di adstock λ è mostrata nel grafico qui sotto:

Distribuzione beta (immagine dell'autore)

Una nota sulla specifica del parametro di adstock λ:

La funzione di densità di probabilità della distribuzione Beta(α = 2, β = 1) mostra un trend positivo, indicando che i valori più alti hanno una densità di probabilità maggiore. Nell’analisi dei media, diverse industrie e attività media possono mostrare diverse velocità di decadimento, con la maggior parte dei canali media che mostrano tipicamente piccole velocità di decadimento. Ad esempio, Robyn suggerisce i seguenti intervalli di decadimento λ per i comuni canali media: TV (0,3-0,8), OOH/Print/Radio (0,1-0,4) e digitale (0-0,3).

Nel contesto della distribuzione Beta(α = 2, β = 1), maggiori probabilità sono assegnate ai valori di λ più vicini a 1, mentre minori probabilità sono assegnate ai valori più vicini a 0. Di conseguenza, gli esiti o le osservazioni vicino alla fine superiore dell’intervallo [0,1] sono più probabili che si verifichino rispetto agli esiti vicino alla fine inferiore.

In alternativa, nei metodi bayesiani per la modellizzazione della miscela di media con effetti di trasporto e forma, il parametro di decadimento è definito come Beta(α = 3, β = 3), la cui funzione di densità di probabilità è illustrata di seguito. Questa distribuzione è simmetrica attorno a 0,5, indicando una probabilità uguale di osservare esiti ai due estremi e vicino al centro dell’intervallo [0,1].

Beta(3,3) (immagine dell'autore)

Il grafico qui sotto rappresenta i singoli componenti ottenuti dalle distribuzioni precedenti: un campione dell’intercetta, della tendenza, della stagionalità, delle variabili di controllo e dei canali mediatici, rappresentati singolarmente.

Tutti i componenti del modello (immagine dell'autore)

Combinazione di tutti i componenti

Come accennato in precedenza, LightweightMMM modella una regressione lineare additiva combinando vari componenti come l’intercetta, la tendenza, la stagionalità, i canali mediatici e altri fattori campionati dalle loro distribuzioni precedenti per ottenere la risposta predittiva. Il grafico qui sotto visualizza la vera risposta e la risposta attesa campionata dalla distribuzione predittiva precedente.

Visualizzare un singolo campione rispetto al valore di risposta vero ci consente di osservare come la previsione del modello si confronta con l’esito effettivo per un insieme specifico di valori dei parametri. Può fornire una comprensione intuitiva di come il modello si comporta in quella particolare istanza.

Ricavo: vera vs. precedente (immagine dell'autore)

Controllo preventivo predittivo

Per ottenere insight più robusti, è generalmente consigliato campionare più volte dalla distribuzione predittiva precedente e misurare l’incertezza. Il controllo preventivo predittivo aiuta ad valutare l’adeguatezza del modello scelto e valutare se le previsioni del modello si allineano alle nostre aspettative, prima di osservare qualsiasi dato effettivo.

Il grafico qui sotto visualizza la distribuzione predittiva precedente mostrando il ricavo atteso (media) in ogni punto, insieme alle misure di incertezza. Possiamo vedere che il ricavo effettivo rientra nell’intervallo della deviazione standard, indicando che la specifica del modello è adatta per i dati osservati.

Controllo preventivo predittivo (immagine dell'autore)

Conclusione

La modellazione della combinazione di marketing bayesiano può richiedere un tempo considerevole per essere padroneggiata. Spero che questo articolo ti abbia aiutato a migliorare la comprensione delle distribuzioni precedenti e delle specifiche del modello di marketing bayesiano.

Il codice completo può essere scaricato dal mio repo Github

Grazie per aver letto!