PyMC-Marketing est une librairie Python open-source développée par PyMC Labs qui transforme la façon dont les data scientists et analystes marketing abordent l’optimisation de leurs campagnes publicitaires. Construite sur la base PyMC (voir mon article sur la mise à jour majeure de PyMC), PyMC-Marketing fournit des outils bayésiens avancés pour le Marketing Mix Modeling (MMM), la prédiction du Customer Lifetime Value (CLV), l’analyse des choix clients et bien plus encore.
En résumé, PyMC-Marketing offre la puissance bayésienne, ainsi que tous ces avantages, à la modélisation marketing. Plus particulièrement, le package permet d’obtenir la distribution complète de probabilité associée aux résultats, contrairement aux outils classiques, qui eux fournissent uniquement des estimations « point-estimate ». Tout ceci avec une grande flexibilité et une grande communauté active.
Les 5 piliers du Package
- Marketing Mix Modeling (MMM)
- Pour modéliser l’impact de chaque canal marketing sur les ventes, afin d’optimiser l’allocation budgétaire
- Customer Lifetime Value (CLV)
- Pour quantifier la valeur à vie de vos clients, i.e. la prévision des revenus futures pour chaque segment de clients
- Customer Choice Analysis (CSA)
- Pour analyser les préférences clients
- Bass Diffusion Model
- Pour comprendre l’adoption de votre produit dans le marché
- Predicted Incrementality by Experimentation
- Pour mesurer l’impact causal de vos campagnes, grâce à l’analyse d’expérimentations et A/B testing
Un exemple Pratique de MMM avec PyMC-Marketing
Ci-dessous un exemple pour lancer un MMM sur des données fictives:
import numpy as np
import pandas as pd
from pymc_marketing.mmm import ( MMM, GeometricAdstock, LogisticSaturation)
# ---------------------------------------------------------------------
# 1. Génération des données
# ---------------------------------------------------------------------
# Des données example ont été générées avec :
# - date_week: la date au format YYYY-MM-DD
# - channel_1 et 2: une mesure de deux channel marketing
# - event_1 et 2: les boolééens indiquant les évènements liés aux channels
# - dayofyear: le jour de l'année entre 1 et 365
# - t: un index incremental pour chaque ligne
# ---------------------------------------------------------------------
# 2. Définition des transformations
# ---------------------------------------------------------------------
# Adstock géométrique :
# - alpha contrôle la persistance de l'effet
# - l_max indique le nombre maximal de semaines de retard
adstock = GeometricAdstock(l_max=8, normalize=True)
# LogisticSaturation :
# - modélise les rendements décroissants
# - ses paramètres sont estimés par le modèle
saturation = LogisticSaturation()
# ---------------------------------------------------------------------
# 3. Définition du Media Mix Model
# ---------------------------------------------------------------------
mmm = MMM(
date_column=date_column,
channel_columns=channel_columns,
target_column=target_column,
adstock=adstock,
saturation=saturation,
# Optionnel : variables de contrôle
# control_columns=["price", "promotion", "holiday"],
# Optionnel : saisonnalité annuelle
yearly_seasonality=2,
# Appliquer d'abord l'adstock puis la saturation
adstock_first=True,
# Configuration du sampler
sampler_config={
"progressbar": True,
},
)
# ---------------------------------------------------------------------
# 4. Inférence bayésienne avec NUTS
# ---------------------------------------------------------------------
fit_result = mmm.fit(X=X, y=y, tune=500, draws=500)
Bien que le code soit relativement sommaire, le modèle généré est bel et bien complexe et aurait nécessité de nombreuses lignes de codes avec PyMC, comme le montre l’image ci-dessous:
Le modèle, une fois ajusté, permet d’analyser les contributions des différentes channels et variables de contrôle (non incluses dans l’exemple), un aperçu est fourni dans le graphique ci-dessous:

Au-delà de l’inférence, PyMC-Marketing permet également d’effectuer des analyses causales (voir l’article de PyMC-Marketing)
Pour en savoir plus sur les analyses causales, je vous invite à lire mon article sur l’échelle de la causalité de Judea Pearl (https://statiscau.ch/lechelle-de-causalite-de-judea-pearl/).
