Analyse de l’attribution multi-touch avancée avec BigQuery : Modèle personnalisé basé sur GA4

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

  1. Données GA4 exportées vers BigQuery.
  2. Une bonne connaissance des concepts SQL et de l’architecture de GA4.
  3. 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

  1. 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.
  2. 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.
  3. Requête finale :

    • Filtre les utilisateurs ayant effectué une conversion (purchase_date IS NOT NULL).

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 et last_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. 😊