Un score d'appétence prédit qui va acheter. L'uplift modeling prédit qui va acheter parce qu'on l'a contacté. Il estime, client par client, l'écart de probabilité d'achat avec et sans campagne, à partir d'un test avec groupe témoin. On cesse de dépenser pour ceux qui achètent de toute façon et pour ceux que la relance fait fuir.
Un médecin ne se demande pas qui va guérir, mais qui guérit grâce au traitement. Certains guériraient sans lui, d'autres ne guériront pas quoi qu'il arrive : les traiter n'apporte rien.
Une partie des clients reçoit la campagne, l'autre non, par tirage au sort. C'est la seule façon de mesurer ce que la campagne change vraiment.
Méthode des deux modèles : l'un prédit l'achat chez les clients contactés, l'autre chez les témoins. Ici, deux Random Forest.
Uplift = probabilité d'achat si contacté moins probabilité d'achat sans contact. On cible les uplifts les plus élevés et on évite les négatifs.
Âge, ancienneté, panier moyen, visites des 30 derniers jours, groupe (ciblé ou témoin) et achat. Le modèle apprend sur 60 % des clients, le reste sert à vérifier.
On découpe les clients de test en cinq tranches selon l'uplift prédit. Les tranches du haut sont nettement plus jeunes : la campagne agit surtout sur les moins de 35 ans.
Dans chaque tranche, on compare le taux d'achat des ciblés et des témoins. Dans l'exemple Python, l'écart atteint environ 10 points dans les deux tranches du haut et ne dépasse pas 4 points dans les trois autres. On résume souvent le tout par la courbe de Qini.
Pas de package unique ni de réglage magique : les choix de méthode pèsent plus que les hyperparamètres.
Deux modèles (T-learner) est la plus simple. Un seul modèle avec le groupe en variable (S-learner) ou des forêts spécialisées, comme les causal forests, estiment l'écart plus directement.
L'uplift est une petite différence entre deux probabilités bruitées. Des feuilles d'au moins 50 clients évitent que cet écart ne soit que du bruit.
Trop petit, le modèle témoin est imprécis et l'uplift aussi. Un témoin de 20 à 50 % des clients est courant pendant la phase d'apprentissage.
L'effet n'est jamais observé chez un client donné. On trie les clients de test par uplift prédit et on vérifie, tranche par tranche, que l'écart réel entre ciblés et témoins décroît.
# Ciblage d'une campagne : uplift modeling (deux modèles) en R
library(randomForest)
camp <- read.csv("campagne_marketing.csv")
camp$achat <- factor(camp$achat)
set.seed(42)
idx <- sample(nrow(camp), round(0.6 * nrow(camp)))
train <- camp[idx, ]
test <- camp[-idx, ]
# Un modèle d'achat pour les clients ciblés, un autre pour le groupe témoin
formule <- achat ~ age + anciennete_mois + panier_moyen + visites_30j
m_cible <- randomForest(formule, data = train[train$groupe == "cible", ], ntree = 300, nodesize = 50)
m_controle <- randomForest(formule, data = train[train$groupe == "controle", ], ntree = 300, nodesize = 50)
# Uplift = P(achat si contacté) - P(achat si non contacté)
test$uplift <- predict(m_cible, test, type = "prob")[, "1"] - predict(m_controle, test, type = "prob")[, "1"]
test$tranche <- cut(rank(test$uplift, ties.method = "first"), 5,
labels = c("20 % du bas", "2", "3", "4", "20 % du haut"))
# Effet réel mesuré par tranche : taux d'achat ciblés - taux d'achat témoins
taux <- tapply(test$achat == "1", list(test$tranche, test$groupe), mean)
print(round(cbind(taux, effet_reel = taux[, "cible"] - taux[, "controle"],
age_moyen = tapply(test$age, test$tranche, mean),
anciennete_moy = tapply(test$anciennete_mois, test$tranche, mean)), 3))
# Ciblage d'une campagne : uplift modeling (deux modèles) en Python
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
camp = pd.read_csv("campagne_marketing.csv")
variables = ["age", "anciennete_mois", "panier_moyen", "visites_30j"]
train, test = train_test_split(camp, test_size=0.4, random_state=42)
# Un modèle d'achat pour les clients ciblés, un autre pour le groupe témoin
modeles = {}
for g in ["cible", "controle"]:
d = train[train.groupe == g]
modeles[g] = RandomForestClassifier(n_estimators=300, min_samples_leaf=50, random_state=42).fit(d[variables], d.achat)
# Uplift = P(achat si contacté) - P(achat si non contacté)
test = test.assign(uplift=modeles["cible"].predict_proba(test[variables])[:, 1]
- modeles["controle"].predict_proba(test[variables])[:, 1])
test["tranche"] = pd.qcut(test.uplift, 5, labels=["20 % du bas", "2", "3", "4", "20 % du haut"])
# Effet réel mesuré par tranche : taux d'achat ciblés - taux d'achat témoins
taux = test.pivot_table(index="tranche", columns="groupe", values="achat", aggfunc="mean", observed=True)
taux["effet_reel"] = taux["cible"] - taux["controle"]
taux[["age_moyen", "anciennete_moy"]] = test.groupby("tranche", observed=True)[["age", "anciennete_mois"]].mean()
print(taux.round(3))
Le score d'appétence (ou de propension) estime la probabilité d'achat. L'uplift estime de combien la campagne change cette probabilité. Un client très appétent qui achète de toute façon a un uplift nul : le contacter coûte sans rien rapporter.
Les persuadables achètent seulement si on les contacte. Les acquis achètent de toute façon, les causes perdues jamais. Les « chiens qui dorment » (sleeping dogs) achètent moins si on les sollicite. L'uplift vise les premiers et évite les derniers.
Elle montre le gain cumulé d'achats supplémentaires quand on cible les clients par uplift décroissant, comparé à un ciblage au hasard. Plus l'aire entre les deux courbes est grande, meilleur est le modèle. C'est l'équivalent de la courbe de lift pour l'uplift.
Prédit qui va acheter, pas qui achète grâce à la campagne. C'est l'approche que l'uplift vient corriger.
Voir la fiche → la brique utiliséeLes deux modèles de l'exemple sont des Random Forest ; tout classifieur qui donne des probabilités peut les remplacer.
Voir la fiche → tester en continuRépartit le trafic entre plusieurs offres pendant le test, au lieu de modéliser l'effet après coup.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus