Mesurer l'impact d'une promotion sans test A/B : Diff-in-Diff et appariement par score de propension
Les promotions ouvertes sans randomisation exigent des méthodes d'évaluation alternatives. Les deux approches principales sont le Diff-in-Diff pour comparer les tendances et l'appariement par score de propension (PSM) pour construire des groupes témoins similaires. Ces techniques permettent d’isoler l’effet réel de la promotion face à la saisonnalité et aux évolutions naturelles du marché.
Un groupe témoin est essentiel pour distinguer l’impact de la promotion des facteurs externes. Sans lui, toute augmentation de métrique pendant la période des fêtes pourrait être faussement attribuée à la promotion — alors qu’elle résulte simplement de la dynamique saisonnière.
Diff-in-Diff : l’approche de base avec un groupe témoin commun
Le Diff-in-Diff calcule la différence entre les tendances de métrique du groupe cible (participants à la promotion) et du groupe témoin (tous les utilisateurs). Comparer simplement les périodes avant et après la promotion ignore les différences initiales : les participants ont souvent une fidélité plus élevée et une valeur moyenne des commandes supérieure dès le départ.
Cette méthode s’applique aux utilisateurs Like-for-Like (LFL), c’est-à-dire ceux actifs à la fois avant et pendant la promotion. Elle exclut ainsi l’influence de l’acquisition de nouveaux utilisateurs.
Étapes de calcul :
- Pour tous les utilisateurs LFL : évolution de la tendance de la période pré-promo à la période de promotion.
- Pour les utilisateurs LFL participants à la promotion : même évolution.
- La différence représente l’effet de la promotion.
Exemple avec la valeur moyenne des commandes :
| Période | Groupe cible | Tous les utilisateurs |
|--------------|--------------|------------------------|
| Pré-promo | ₽2 500 | ₽1 350 |
| Pendant promo| ₽3 000 | ₽1 500 |
| Delta | +20% | +11% |
Effet de la promotion : 20 % – 11 % = +9 %. Valeur incrémentale : ₽3 000 / 1,09 ≈ ₽2 752 (base), gain incrémental de ₽248.
Limite : les participants peuvent présenter des dynamiques différentes de la population générale — par exemple, des habitudes saisonnières spécifiques.
Diff-in-Diff amélioré : groupe témoin thématique
Pour les promotions hors ligne (ex. : réduction sur les pâtisseries), le groupe témoin se compose de clients achetant des produits similaires dans les mêmes magasins (autres produits de boulangerie). Les groupes sont conceptuellement proches : produits de boulangerie vendus au même endroit, l’un avec la promotion, l’autre sans.
Cela réduit le biais, mais ne l’élimine pas entièrement — les amateurs de pâtisseries peuvent se comporter différemment des amateurs de pizzas (par exemple, frugalité vs. consommation en grande quantité).
Appariement par score de propension : simuler un groupe témoin
Le PSM reproduit la randomisation d’un test A/B. À partir de caractéristiques pré-promo (Valeur à vie, jours actifs, valeur moyenne des commandes, âge du compte), un modèle prédit la probabilité de participation (score de propension de 0 à 1).
Le modèle est entraîné sur les données sans le flag de participation, puis les paires sont appariées selon le score via k-NN. La pool de contrôle doit être significativement plus grande que le groupe cible pour garantir un appariement précis.
Exemple de code avec XGBoost :
# Définir les hyperparamètres du modèle (peut être optimisé via Optuna)
model_params = {
'objective': 'binary:logistic',
'eval_metric': 'logloss',
'learning_rate': 0.4,
'max_depth': 3,
'min_child_weight': 10,
'subsample': 0.8,
'colsample_bytree': 0.8,
'lambda': 1.0,
'alpha': 0.1,
'random_state': seed,
'n_estimators': 100
}
# Entraîner le modèle d’optimisation
pm = GradientBoostedPropensityModel(early_stop=False, **model_params)
ps = pm.fit_predict(all_data[features], all_data['test'])
# Appariement des paires
matcher = NearestNeighborMatch(replace=False, ratio=1, random_state=seed)
all_data['score'] = ps
matched = matcher.match(all_data, 'test', ['score'])
# Groupes finaux
matched[(matched['test'] == 0)].describe()
matched[(matched['test'] == 1)].describe()
Contrôles qualité :
- Similitude des métriques entre groupes.
- Calibration : à un score de 0,5, environ 50 % doivent être des participants.
- Distribution identique des caractéristiques entre les groupes.
Une fois les paires appariées, appliquer le Diff-in-Diff. Limites :
- Supposons que les dynamiques futures restent similaires.
- Effets saisonniers régionaux.
- Biais lié à une pool de contrôle limitée — on ne peut appairer que des non-participants, y compris ceux physiquement incapables de participer.
Points clés
- Le groupe témoin est obligatoire : sans lui, l’effet de la promotion se mélange aux tendances globales.
- Le Diff-in-Diff est simple et rapide : utilisez des utilisateurs LFL ou des groupes thématiques.
- Le PSM est plus précis : nécessite des données et des ressources computationnelles, mais approche étroitement le test A/B.
- Validez toujours vos groupes : vérifiez les métriques, la calibration et la distribution des caractéristiques.
- Privilégiez les tests A/B quand possible : évitez les évaluations post-hoc si vous pouvez faire un test aléatoire.
— Editorial Team
Aucun commentaire pour le moment.