Comparer les modèles d'attribution : un dashboard dbt + Looker Studio

Chaque modèle d’attribution raconte une histoire différente sur votre marketing. Le first-touch crédite le canal qui a présenté le client. Le last-touch crédite celui qui a conclu la vente. Le linéaire répartit le crédit uniformément. Chaque modèle est correct dans sa propre logique, et chaque modèle est biaisé.

Exécuter plusieurs modèles d’attribution en parallèle ne vous donnera pas la « bonne » réponse, mais cela révélera où vos modèles convergent, où ils divergent, et ce que ces divergences disent de l’incertitude dans vos données. Pour une vue d’ensemble sur l’intérêt de l’attribution en data warehouse, consultez mon guide d’attribution.

Pourquoi exécuter plusieurs modèles d’attribution

Tout modèle d’attribution comporte un biais structurel. Le first-touch sur-crédite les canaux de découverte comme le search organique et le content marketing. Le last-touch sur-crédite les canaux de conversion comme le branded search et le retargeting. Le linéaire traite une impression display aléatoire de la même façon qu’un email de demande de démo.

Quand vous vous appuyez sur un seul modèle, vous héritez de ses angles morts. Les équipes marketing optimisent en fonction de ce que le modèle récompense. Si le modèle sous-crédite systématiquement certains canaux, ces canaux perdent leur budget indépendamment de leur contribution réelle.

Exécuter les modèles en parallèle résout ce problème en rendant les biais visibles. Quand le first-touch dit que le search organique génère 40 % du revenu et que le last-touch dit 8 %, vous savez que le vrai chiffre se situe quelque part entre les deux. La divergence elle-même est informative : elle indique que le search organique joue un rôle dans les parcours clients, mais que sa contribution exacte reste incertaine.

Cette approche permet aussi d’aligner la stratégie entre les équipes. Les équipes axées sur la notoriété peuvent utiliser le first-touch pour optimiser la découverte. Les équipes conversion peuvent utiliser le last-touch pour optimiser la conclusion. La direction peut observer l’éventail des résultats pour comprendre la vue d’ensemble.

Quand les modèles convergent, vous pouvez avoir confiance dans l’insight. Quand ils divergent fortement, interprétez les données avec prudence et envisagez un test d’incrémentalité pour trouver la vérité terrain.

Concevoir un projet dbt multi-modèle

Un système d’attribution multi-modèle nécessite une séparation nette entre la logique d’attribution et la couche de comparaison. Chaque modèle s’exécute indépendamment, et un modèle de comparaison final les rassemble par union pour alimenter le dashboard. (Pour en savoir plus sur la structuration des projets dbt, consultez mon guide dédié.)

Structure du projet pour l’attribution

models/
├── base/
│ └── base__ga4__events.sql # Nettoyage des événements bruts
├── intermediate/
│ ├── int__events_sessionized.sql # Sessionization
│ ├── int__sessions_enriched.sql # Touchpoints marketing
│ └── int__touchpoints_pathed.sql # Parcours utilisateur
└── marts/
└── attribution/
├── mrt__attribution__first_touch.sql
├── mrt__attribution__last_touch.sql
├── mrt__attribution__linear.sql
├── mrt__attribution__position_based.sql
├── mrt__attribution__time_decay.sql
├── mrt__attribution__conversions.sql
└── mrt__attribution__comparison.sql

Chaque modèle mrt__attribution__* implémente une approche d’attribution et produit un schéma cohérent : conversion__id, touchpoint__channel, touchpoint__attributed_revenue, ainsi que les dimensions supplémentaires nécessaires à l’analyse (campagne, converted_at, segment utilisateur).

Le modèle mrt__attribution__comparison rassemble tous les modèles d’attribution par union avec une colonne model_type qui identifie quel modèle a généré chaque ligne.

Le pattern du modèle de comparaison

Le modèle de comparaison effectue l’union des modèles individuels et ajoute un identifiant :

-- mrt__attribution__comparison.sql
WITH first_touch AS (
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
'first_touch' AS model_type
FROM {{ ref('mrt__attribution__first_touch') }}
),
last_touch AS (
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
'last_touch' AS model_type
FROM {{ ref('mrt__attribution__last_touch') }}
),
linear AS (
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
'linear' AS model_type
FROM {{ ref('mrt__attribution__linear') }}
),
position_based AS (
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
'position_based' AS model_type
FROM {{ ref('mrt__attribution__position_based') }}
),
time_decay AS (
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
'time_decay' AS model_type
FROM {{ ref('mrt__attribution__time_decay') }}
)
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
model_type
FROM first_touch
UNION ALL
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
model_type
FROM last_touch
UNION ALL
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
model_type
FROM linear
UNION ALL
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
model_type
FROM position_based
UNION ALL
SELECT
conversion__id,
touchpoint__channel,
touchpoint__attributed_revenue,
conversion__converted_at,
model_type
FROM time_decay

Cela produit une ligne par conversion, par canal et par modèle. Une conversion avec trois touchpoints génère 15 lignes (3 touchpoints × 5 modèles). La colonne model_type devient le filtre dans Looker Studio.

Ajoutez un test dbt pour vérifier que le revenu attribué correspond au revenu total pour chaque modèle :

schema.yml
models:
- name: mrt__attribution__comparison
tests:
- dbt_utils.expression_is_true:
expression: "SUM(touchpoint__attributed_revenue) = (SELECT SUM(conversion__revenue) FROM {{ ref('mrt__attribution__conversions') }})"
group_by_columns: ['model_type']

Construire le dashboard Looker Studio

Avec le modèle de comparaison en place, Looker Studio peut se connecter directement à BigQuery et permettre aux utilisateurs de basculer entre les modèles d’attribution.

Métriques essentielles à suivre

Contribution par canal selon le modèle : la vue principale. Un bar chart montrant le revenu attribué par canal, avec le modèle d’attribution en filtre déroulant. Les utilisateurs basculent entre first-touch, last-touch, position-based, time-decay et les autres modèles pour voir comment le crédit se déplace.

Vue comparative des modèles : un bar chart groupé montrant tous les modèles côte à côte pour chaque canal. Cela met immédiatement en évidence les divergences entre modèles. Les canaux avec l’écart le plus large entre les barres sont ceux où votre attribution est la plus incertaine.

Conversions assistées : les touchpoints qui ont contribué à une conversion sans être le touchpoint crédité dans les modèles single-touch. Calculez-les comme le nombre de touchpoints dans un parcours de conversion moins un. Un taux élevé de conversions assistées indique des canaux qui nourrissent la relation plutôt que de conclure la vente.

CPA et ROAS par modèle : le coût par acquisition et le retour sur dépenses publicitaires, calculés pour chaque modèle d’attribution. La formule change selon le revenu du modèle utilisé au dénominateur.

Distribution de la longueur des parcours : un histogramme montrant le nombre de touchpoints habituellement impliqués dans les conversions. Les parcours courts favorisent les modèles single-touch ; les parcours longs rendent les modèles multi-touch plus importants.

Hiérarchie de dashboards selon l’audience

Tout le monde n’a pas besoin du même niveau de détail. Structurez vos dashboards autour des besoins de prise de décision :

Dashboard exécutif (CMO, CEO) : l’impact bottom-line du marketing. Revenu total attribué, revenu par canal à haut niveau, ROI global, coût d’acquisition client. Cadence hebdomadaire ou mensuelle. Pas de sélection de modèle ; montrez une vue agrégée ou le modèle principal de l’entreprise.

Dashboard manager : performance par canal et par modèle, détails au niveau campagne, recommandations d’allocation budgétaire. Cadence hebdomadaire. Incluez le sélecteur de modèle pour que les managers puissent tester la performance de leur canal sous différentes hypothèses.

Dashboard analyste : analyse granulaire des touchpoints, exploration des parcours, détails de comparaison des modèles, analyse du délai de conversion. Accès quotidien. Accès complet à tous les filtres et dimensions pour une investigation approfondie.

Conseils pratiques pour Looker Studio

Connectez-vous à la table mrt__attribution__comparison dans BigQuery. Créez un contrôle déroulant lié au champ model_type et ajoutez-le à chaque page. Cela permet aux utilisateurs de basculer entre les modèles en un clic.

Pour la vue comparative, utilisez un tableau croisé dynamique avec les canaux en lignes, model_type en colonnes et SUM(touchpoint__attributed_revenue) comme métrique. Vous obtenez une comparaison côte à côte sans configuration de graphique complexe.

Pré-agrégez les données dans dbt autant que possible. Looker Studio est plus performant avec moins de lignes, et BigQuery facture les octets scannés. Créez une table de synthèse agrégée par jour, canal et modèle plutôt que d’interroger les données au niveau touchpoint.

Limitations de Looker Studio et solutions de contournement

Looker Studio est gratuit et s’intègre bien avec BigQuery, mais il comporte des contraintes qu’il faudra contourner.

Limite de 5 000 lignes par visualisation : les graphiques ne peuvent afficher que 5 000 lignes. Pour les données au niveau touchpoint, cette limite est vite atteinte. Pré-agrégez au niveau jour/canal dans dbt plutôt que de compter sur Looker Studio pour agréger au rendu.

Pas de diagrammes Sankey natifs : la visualisation de parcours est une demande fréquente pour les dashboards d’attribution, mais Looker Studio ne supporte pas les diagrammes Sankey. Les alternatives incluent l’utilisation d’une visualisation communautaire tierce, la construction d’une table d’analyse de parcours (séquence de canaux par conversion), ou le recours à un autre outil pour la visualisation des parcours.

Drill-through limité : vous ne pouvez pas facilement cliquer sur un canal pour accéder aux campagnes, puis aux conversions individuelles. Contournez ce problème avec des dashboards liés : ajoutez un filtre qui transmet le canal vers une page de détail.

Pas de contrôle de version : les modifications ne sont pas tracées. Documentez les changements de dashboard manuellement, ou maintenez un changelog dans Notion ou Confluence.

Quand envisager des alternatives : Tableau (~70 $/utilisateur/mois) offre une meilleure visualisation de parcours et un meilleur drill-through. Metabase (gratuit en auto-hébergement) convient bien si vous l’utilisez déjà. Power BI (10-20 $/utilisateur/mois) s’intègre aux écosystèmes Microsoft. Chacun a ses compromis ; Looker Studio reste le choix évident pour les équipes centrées sur BigQuery.

Valider vos modèles d’attribution

Les modèles d’attribution sont des estimations. La validation garantit que ces estimations sont directionnellement utiles.

Utiliser la divergence entre modèles comme signal

Quand les modèles s’accordent sur la contribution d’un canal, vous pouvez communiquer avec confiance. « Le paid search génère 25 à 28 % du revenu quel que soit le modèle » est une affirmation solide.

Quand les modèles divergent fortement, signalez-le aux parties prenantes. « Le social organique génère entre 5 % et 22 % du revenu selon le modèle » indique à la direction que la contribution de ce canal est réellement incertaine. Ce type d’honnêteté sur les limites des données a plus de valeur qu’une fausse précision.

Calculez un score de divergence pour chaque canal : l’écart-type des pourcentages de revenu attribué à travers les modèles. Les canaux avec une forte divergence sont candidats à un test d’incrémentalité.

Le test d’incrémentalité comme vérité terrain

Les modèles d’attribution mesurent la corrélation. Les tests d’incrémentalité mesurent la causalité. Quand vous avez besoin de savoir si un canal génère réellement des conversions (plutôt que d’être simplement présent dans les parcours convertissants), lancez une expérimentation.

Tests holdout : excluez 10 % de votre audience de l’exposition aux publicités sur un canal spécifique. Comparez les taux de conversion entre le groupe exposé et le groupe holdout. La différence correspond à la contribution incrémentale du canal.

Tests géographiques : pour les canaux qui ne peuvent pas être ciblés au niveau utilisateur (TV, radio, affichage), menez le test géographiquement. Coupez le canal dans un ensemble de marchés et comparez aux marchés témoins.

Études de lift plateforme : Meta, Google et TikTok proposent tous des études Conversion Lift qui gèrent la mécanique de holdout pour vous. Le compromis est que vous faites confiance à la mesure de la plateforme.

Utilisez les résultats d’incrémentalité pour calibrer vos modèles d’attribution. Si l’attribution Markov indique que l’email génère 15 % des conversions mais qu’un test holdout montre 8 % de lift incrémental, ajustez votre interprétation en conséquence.

Signaux d’alerte que votre attribution dysfonctionne

Surveillez ces patterns :

Le revenu attribué ne correspond pas au revenu réel : si vos modèles attribuent 100 K$ au marketing mais que la finance ne voit que 80 K$ en banque, quelque chose ne va pas. Vérifiez votre tracking de conversion, la façon dont vous joignez les touchpoints aux conversions, et votre définition de « conversion ».

Érosion des marges malgré un ROAS élevé : si un canal affiche un bon retour sur dépenses publicitaires mais que le scaling ne fait pas croître les profits proportionnellement, l’attribution sur-crédite probablement ce canal.

Deals non traçables : en B2B, si plus de 60 % des deals conclus ne peuvent être attribués à aucune activité marketing, votre tracking est incomplet. Soit les touchpoints ne sont pas captés, soit votre identity resolution ne parvient pas à connecter les sessions anonymes aux utilisateurs connus.

Communiquer les résultats aux parties prenantes

Le travail technique ne sert à rien si les parties prenantes ne peuvent pas agir dessus.

Commencez par les résultats, pas la méthodologie : « Le content marketing influence 47 % de nos conversions » a plus d’impact que « Notre modèle d’attribution par chaînes de Markov avec des fenêtres de lookback de 30 jours montre… »

Présentez des fourchettes, pas une fausse précision : « Le paid search génère entre 50 K$ et 80 K$ par mois selon le modèle d’attribution » est plus honnête que de choisir un seul chiffre. La fourchette communique le niveau de confiance sans nécessiter un cours de statistiques.

Mettez en évidence les convergences et divergences : « Tous les modèles s’accordent sur le fait que l’email est notre canal le plus efficient. Les modèles divergent sur la contribution du display, nous recommandons donc un test d’incrémentalité avant de modifier le budget display. »

Structurez vos recommandations clairement : Défi → Insight → Recommandation → Résultat attendu.


Aucun modèle d’attribution ne montre la vue complète, mais en exécuter plusieurs en parallèle révèle où se situe l’incertitude. Concentrez-vous sur les points de convergence, creusez les divergences, et utilisez ces désaccords pour prendre de meilleures décisions plutôt que de chercher l’attribution parfaite.