L’attribution par décroissance temporelle attribue davantage de crédit aux points de contact qui se sont produits le plus près de la conversion. La logique est simple : un point de contact d’hier compte plus qu’un point de contact d’il y a deux semaines. Contrairement aux modèles positionnels qui s’intéressent à la position d’un point de contact dans la séquence, la décroissance temporelle s’intéresse au moment où il s’est produit par rapport à la conversion.
La formule de décroissance exponentielle
La décroissance temporelle utilise une décroissance exponentielle avec un paramètre de demi-vie :
Poids(point_de_contact) = 2^(-jours_avant_conversion / demi_vie)La demi-vie détermine la vitesse à laquelle le crédit diminue. Avec une demi-vie de 7 jours :
- Jour 0 (jour de conversion) : Poids = 1,0 (100 %)
- Jour 7 : Poids = 0,5 (50 %)
- Jour 14 : Poids = 0,25 (25 %)
- Jour 21 : Poids = 0,125 (12,5 %)
Google Analytics utilise une demi-vie de 7 jours par défaut. Cela fonctionne raisonnablement bien pour l’e-commerce, mais peut être trop agressif pour le B2B, où un point de contact d’il y a trois semaines peut être celui qui a réellement planté la graine.
La formule produit des poids bruts qui nécessitent une normalisation — diviser chaque poids par la somme de tous les poids pour cette conversion — afin que le revenu attribué soit égal au revenu réel.
Choisir la bonne demi-vie
La demi-vie devrait correspondre approximativement à la longueur typique de votre cycle de vente. Trop courte et vous sous-créditez les canaux en haut du funnel qui ont généré la notoriété. Trop longue et vous vous rapprochez d’une attribution linéaire, ce qui annule l’intérêt d’utiliser la décroissance temporelle.
| Secteur | Demi-vie | Fenêtre de rattrapage |
|---|---|---|
| B2C E-commerce (impulsif) | 3-7 jours | 7-14 jours |
| B2C E-commerce (réfléchi) | 7-14 jours | 30-45 jours |
| B2B Marché intermédiaire | 14-30 jours | 90-180 jours |
| B2B Enterprise | 30-45 jours | 180+ jours |
La fenêtre de rattrapage et la demi-vie fonctionnent ensemble. La fenêtre de rattrapage détermine quels points de contact sont pris en compte (tout ce qui est en dehors de la fenêtre est exclu). La demi-vie détermine à quelle vitesse le crédit diminue pour les points de contact dans la fenêtre. Une fenêtre de 30 jours avec une demi-vie de 7 jours signifie que les points de contact datant de 3-4 semaines sont inclus mais reçoivent très peu de crédit.
Implémentation BigQuery
L’implémentation calcule les poids bruts, puis les normalise pour qu’ils se somment à 1 :
WITH decay_weights AS ( SELECT user_id, transaction_id, channel, revenue, conversion_timestamp, touchpoint_timestamp, POW( 0.5, TIMESTAMP_DIFF(conversion_timestamp, touchpoint_timestamp, MINUTE) / (7.0 * 24 * 60) ) AS raw_weight FROM touchpoints WHERE touchpoint_timestamp >= TIMESTAMP_SUB( conversion_timestamp, INTERVAL 30 DAY )),normalized AS ( SELECT *, SUM(raw_weight) OVER ( PARTITION BY user_id, transaction_id ) AS total_weight FROM decay_weights)SELECT user_id, transaction_id, channel, (raw_weight / total_weight) * revenue AS attributed_revenueFROM normalizedCe que fait chaque partie :
TIMESTAMP_DIFF(..., MINUTE)calcule l’écart de temps en minutes pour plus de précision — utiliser des jours ferait perdre la granularité intra-journalière7.0 * 24 * 60convertit la demi-vie de 7 jours en minutes (10 080 minutes)POW(0.5, time_ratio)applique la décroissance exponentielle- Diviser par
total_weightnormalise pour que tous les poids se somment à 1, garantissant que le revenu attribué est égal au revenu réel
Pour un client avec des points de contact au jour -14, jour -7 et jour 0 :
- Jour -14 : poids_brut = 0,25, normalisé = 0,25/1,75 = 14,3 %
- Jour -7 : poids_brut = 0,5, normalisé = 0,5/1,75 = 28,6 %
- Jour 0 : poids_brut = 1,0, normalisé = 1,0/1,75 = 57,1 %
Le point de contact le plus récent obtient plus de la moitié du crédit, ce qui correspond à l’hypothèse du modèle selon laquelle la récence est corrélée à l’impact.
Paramétriser la demi-vie
Coder en dur la demi-vie rend l’expérimentation difficile. Utilisez une variable BigQuery ou une table de configuration :
DECLARE half_life_days FLOAT64 DEFAULT 7.0;
WITH decay_weights AS ( SELECT user_id, transaction_id, channel, revenue, conversion_timestamp, touchpoint_timestamp, POW( 0.5, TIMESTAMP_DIFF(conversion_timestamp, touchpoint_timestamp, HOUR) / (half_life_days * 24) ) AS raw_weight FROM touchpoints WHERE touchpoint_timestamp >= TIMESTAMP_SUB( conversion_timestamp, INTERVAL 30 DAY ))-- ... reste de la requêteCela vous permet de tester différentes valeurs de demi-vie et de comparer les résultats. Exécuter la même requête avec des valeurs de demi-vie de 3, 7, 14 et 30 jours révèle à quel point les classements de vos canaux sont sensibles au paramètre de décroissance. Si les classements restent stables, le choix du paramètre importe peu. S’ils changent radicalement, vous devez réfléchir plus sérieusement à la bonne demi-vie — ou accepter que l’incertitude est réelle.
Dans dbt, utilisez var() au lieu de DECLARE pour rendre la demi-vie configurable dans dbt_project.yml.
Quand utiliser l’attribution par décroissance temporelle
La décroissance temporelle fonctionne mieux quand :
- Les points de contact récents influencent démontrablement plus la conversion que les plus anciens
- Vous optimisez pour l’impact de conversion immédiat
- Les cycles de vente varient considérablement en longueur (les modèles positionnels peinent ici car “premier” dans un parcours de 2 jours est très différent de “premier” dans un parcours de 90 jours)
- Vous souhaitez intégrer l’urgence et la récence dans le modèle
La décroissance temporelle est moins appropriée quand la notoriété de marque en haut du funnel est une priorité. Une campagne de marque d’il y a trois semaines qui a planté la prise de conscience initiale obtient très peu de crédit sous la décroissance temporelle, même si elle a pu être le point de contact le plus important du parcours. Si vous soupçonnez que c’est le cas, les modèles d’attribution positionnelle donnent plus de poids aux premiers contacts.
L’approche la plus défendable consiste à exécuter les deux et à comparer les résultats. Quand les attributions positionnelle et par décroissance temporelle produisent des classements de canaux similaires, vous avez une plus grande confiance dans les conclusions. Quand elles divergent significativement, c’est un signal pour investiguer pourquoi — et potentiellement un candidat pour les tests d’incrémentalité.