Dans l’écosystème actuel du marketing digital, comprendre le rôle des différents canaux dans une conversion est crucial pour optimiser vos stratégies. L’analyse d’attribution multi-touch, qui distribue le crédit des conversions entre les interactions d’un utilisateur, peut être adaptée aux besoins spécifiques grâce à des outils comme BigQuery et GA4.
Dans cet article, nous allons explorer comment créer un modèle d’attribution personnalisé en utilisant vos données GA4 dans BigQuery, avec un cas d’usage concret.
Pourquoi un modèle d’attribution personnalisé ?
Les modèles d’attribution standards, comme le dernier clic ou le premier clic, ne suffisent souvent pas pour capturer la complexité des parcours clients actuels. Un modèle personnalisé permet d’intégrer des règles spécifiques à votre stratégie et de mieux comprendre l’efficacité de vos canaux marketing.
Voici le modèle que nous allons mettre en place :
- 100% d’attribution au premier canal : lorsque le premier et le dernier canal sont identiques.
- 50% d’attribution au premier canal : si le premier et le dernier canal sont différents, mais la conversion a eu lieu le même jour.
- 10% d’attribution au premier canal : si le premier et le dernier canal sont différents et que la conversion a pris plus d’une journée.
Les prérequis techniques
- Données GA4 exportées vers BigQuery.
- Une bonne connaissance des concepts SQL et de l’architecture de GA4.
- Accès à un projet BigQuery contenant les données événementielles GA4.
Structure des données dans BigQuery
Les données GA4 exportées vers BigQuery sont structurées en tables partitionnées par jour (events_*
). Voici quelques champs clés nécessaires pour notre analyse :
user_pseudo_id
: Identifiant unique de l’utilisateur.event_name
: Nom de l’événement (ex.first_visit
,purchase
).event_timestamp
: Horodatage de l’événement.traffic_source.source
: Source du trafic.
Code SQL pour le modèle d’attribution
Voici le script SQL pour mettre en œuvre ce modèle dans BigQuery :
WITH user_journey AS (
SELECT
user_pseudo_id,
-- Date de première interaction
MIN(
CASE
WHEN event_name = 'first_visit' THEN PARSE_DATE('%Y%m%d', event_date)
ELSE PARSE_DATE('%Y%m%d', event_date)
END
) AS first_touch_date,
-- Dernière interaction
MAX(PARSE_DATE('%Y%m%d', event_date)) AS last_interaction_date,
-- Date de conversion
MAX(CASE WHEN event_name = 'purchase' THEN PARSE_DATE('%Y%m%d', event_date) END) AS purchase_date,
-- Premier canal
ARRAY_AGG(traffic_source.source ORDER BY TIMESTAMP_MICROS(event_timestamp) ASC)[OFFSET(0)] AS first_channel,
-- Dernier canal
ARRAY_AGG(traffic_source.source ORDER BY TIMESTAMP_MICROS(event_timestamp) DESC)[OFFSET(0)] AS last_channel
FROM
`project_id.dataset_name.events_*`
WHERE
event_name IN ('first_visit', 'view_item_list', 'add_to_cart', 'begin_checkout', 'purchase')
GROUP BY
user_pseudo_id
),
attribution_model AS (
SELECT
user_pseudo_id,
first_channel,
last_channel,
first_touch_date,
last_interaction_date,
purchase_date,
-- Différence entre première et dernière interaction
TIMESTAMP_DIFF(
TIMESTAMP(last_interaction_date),
TIMESTAMP(first_touch_date),
DAY
) AS days_between_first_and_last,
-- Différence entre première visite et conversion
TIMESTAMP_DIFF(
TIMESTAMP(purchase_date),
TIMESTAMP(first_touch_date),
DAY
) AS days_to_conversion,
-- Attribution personnalisée
CASE
WHEN first_channel = last_channel THEN 100
WHEN first_channel != last_channel AND TIMESTAMP_DIFF(TIMESTAMP(purchase_date), TIMESTAMP(first_touch_date), DAY) = 0 THEN 50
WHEN first_channel != last_channel AND TIMESTAMP_DIFF(TIMESTAMP(purchase_date), TIMESTAMP(first_touch_date), DAY) > 0 THEN 10
ELSE 0
END AS attribution_percentage
FROM
user_journey
)
SELECT *
FROM
attribution_model
WHERE
purchase_date IS NOT NULL;
Explication du code
Table user_journey :
- Crée un résumé pour chaque utilisateur, avec les dates clés (premier contact, dernière interaction, conversion) et les canaux correspondants.
- Utilise
ARRAY_AGG
pour identifier les canaux du premier et du dernier contact.
Table attribution_model :
- Calcule les différences en jours entre les interactions clés.
- Applique les règles du modèle d’attribution grâce à une clause
CASE
.
Requête finale :
- Filtre les utilisateurs ayant effectué une conversion (
purchase_date IS NOT NULL
).
- Filtre les utilisateurs ayant effectué une conversion (
Résultats attendus
Le résultat de cette requête vous fournira une table avec les colonnes suivantes :
user_pseudo_id
: Identifiant unique de l’utilisateur.first_channel
etlast_channel
: Canaux du premier et dernier contact.attribution_percentage
: Pourcentage attribué selon le modèle.
Exemple d’attribution
Cas 1 :
Un utilisateur commence et termine son parcours sur le canal « Google Ads ». 100% d’attribution sont accordés au premier canal, « Google Ads ».
Cas 2 :
Un utilisateur commence sur « Facebook » et termine sur « Google Ads », mais effectue l’achat le même jour. 50% d’attribution sont accordés au premier canal, « Facebook ».
Cas 3 :
Un utilisateur commence sur « Organic » et termine sur « Google Ads », avec une conversion après deux jours. 10% d’attribution sont accordés au premier canal, « Organic ».
Conclusion
L’utilisation de BigQuery pour personnaliser vos modèles d’attribution offre une flexibilité et une précision inégalées pour comprendre le rôle des différents canaux. Ce modèle peut être étendu en fonction de vos besoins spécifiques, en intégrant des paramètres supplémentaires comme la valeur de la commande ou le type de produit.
Si vous souhaitez aller plus loin, contactez notre équipe pour développer des modèles encore plus avancés. 😊