Modélisation de l'attribution avec la table des chemins

Les tables *_paths fournissent des informations sur les interactions des utilisateurs avec les médias que vous gérez à l'aide de Display & Video 360 et de Campaign Manager 360. Ces interactions (également appelées points de contact) sont regroupées dans des chemins d'événements. Elles retracent le parcours emprunté par un groupe d'utilisateurs dans votre entonnoir de conversion. Les données contenues dans les tables *_paths utilisent les mêmes données que celles disponibles via le transfert de données, mais elles vous sont fournies dans des chemins pré-assemblés. Les chemins d'événement sont disponibles pour les utilisateurs ayant effectué ou non une conversion, et peuvent inclure plusieurs conversions.

Comme pour toutes les données utilisateur dans Ads Data Hub, les données des tableaux *_paths sont soumises aux exigences d'agrégation.

Détails techniques

Chaque ligne de paths contient un seul parcours client sur une période de 30 jours. Ces données sont mises à jour quotidiennement afin de couvrir les 30 derniers jours. Les chemins d'événements sont assemblés à l'aide de cookies. Par conséquent, ils sont limités à un seul appareil. Dans certains cas, par exemple lorsque les utilisateurs ont désactivé la personnalisation des annonces, les ID utilisateur seront définis sur 0. Normalement, ces utilisateurs seront toujours séparés par ligne, de sorte que deux chemins de conversion distincts associés à un ID utilisateur de 0 auront des lignes distinctes. Toutefois, pour certains types d'analyses (les regroupements par user_id = 0, par exemple), plusieurs chemins de conversion peuvent être fusionnés, ce qui peut entraîner des écarts dans vos données. En savoir plus sur les ID utilisateur remis à zéro

Chaque ligne de la colonne *_paths.events contient un tableau de structs où chaque struct représente un seul événement du chemin de l'utilisateur. Les structs qui constituent le chemin sont classées par code temporel, le premier événement du tableau étant le plus ancien.

Exemples de requêtes

Les requêtes suivantes mesurent l'impact des emplacements sur les conversions d'un segment d'utilisateurs particulier. Les requêtes attribuent le crédit selon trois modèles d'attribution différents :

  • Premier contact : tout le crédit est attribué au premier point de contact.
  • Dernier contact : tout le crédit est attribué au dernier point de contact.
  • Linéaire : le crédit est réparti équitablement entre les points de contact.

Exemple de données

Ligne user_id *_paths.events.event_time *_paths.events.event_type *_paths.events.placement_id
1 1 1563384139 FLOODLIGHT null
1563384129 CLICK 11
1563384119 VIEW 22
2 2 1563384139 FLOODLIGHT null
1563384129 VIEW 11
1563384119 FLOODLIGHT null
1563384109 VIEW 11

Exemples de requêtes

Premier contact

/* Substitute *_paths for the specific paths table that you want to query. */
SELECT
  (
  SELECT
    attributed_event_metadata.placement_id
  FROM (
    SELECT
      AS STRUCT attributed_event.placement_id,
      ROW_NUMBER() OVER(ORDER BY attributed_event.event_time ASC) AS rank
    FROM
      UNNEST(t.*_paths.events) AS attributed_event
    WHERE
      attributed_event.event_type != "FLOODLIGHT"
      AND attributed_event.event_time < conversion_event.event_time
      AND attributed_event.event_time > (
      SELECT
        IFNULL( (
          SELECT
            MAX(prev_conversion_event.event_time) AS event_time
          FROM
            UNNEST(t.*_paths.events) AS prev_conversion_event
          WHERE
            prev_conversion_event.event_type = "FLOODLIGHT"
            AND prev_conversion_event.event_time < conversion_event.event_time),
          0)) ) AS attributed_event_metadata
  WHERE
    attributed_event_metadata.rank = 1) AS placement_id,
  COUNT(*) AS credit
FROM
  adh.*_paths AS t,
  UNNEST(*_paths.events) AS conversion_event
WHERE
  conversion_event.event_type = "FLOODLIGHT"
GROUP BY
  placement_id
HAVING
  placement_id IS NOT NULL
ORDER BY
  credit DESC

Dernier contact

/* Substitute *_paths for the specific paths table that you want to query. */
SELECT
  (
  SELECT
    attributed_event_metadata.placement_id
  FROM (
    SELECT
      AS STRUCT attributed_event.placement_id,
      ROW_NUMBER() OVER(ORDER BY attributed_event.event_time DESC) AS rank
    FROM
      UNNEST(t.*_paths.events) AS attributed_event
    WHERE
      attributed_event.event_type != "FLOODLIGHT"
      AND attributed_event.event_time < conversion_event.event_time
      AND attributed_event.event_time > (
      SELECT
        IFNULL( (
          SELECT
            MAX(prev_conversion_event.event_time) AS event_time
          FROM
            UNNEST(t.*_paths.events) AS prev_conversion_event
          WHERE
            prev_conversion_event.event_type = "FLOODLIGHT"
            AND prev_conversion_event.event_time < conversion_event.event_time),
          0)) ) AS attributed_event_metadata
  WHERE
    attributed_event_metadata.rank = 1) AS placement_id,
  COUNT(*) AS credit
FROM
  adh.*_paths AS t,
  UNNEST(*_paths.events) AS conversion_event
WHERE
  conversion_event.event_type = "FLOODLIGHT"
GROUP BY
  placement_id
HAVING
  placement_id IS NOT NULL
ORDER BY
  credit DESC

Linéaire

/* Substitute *_paths for the specific paths table that you want to query. */
SELECT
  attributed_event_metadata.placement_id AS placement_id,
  /* Give equal credit to all attributed events */
  SUM(SAFE_DIVIDE(1, ARRAY_LENGTH(attributed_events_metadata)))
FROM (
  SELECT
    ARRAY(
    SELECT
      AS STRUCT attributed_event.placement_id,
      ROW_NUMBER() OVER(ORDER BY attributed_event.event_time DESC) AS rank
    FROM
      UNNEST(t.*_paths.events) AS attributed_event
    WHERE
      attributed_event.event_type!="FLOODLIGHT"
      AND attributed_event.event_time < conversion_event.event_time
      AND attributed_event.event_time > (
      SELECT
        MAX(prev_conversion_event.event_time) AS event_time
      FROM
        UNNEST(t.*_paths.events) AS prev_conversion_event
      WHERE
        prev_conversion_event.event_type="FLOODLIGHT"
        AND prev_conversion_event.event_time < conversion_event.event_time)) AS attributed_events_metadata
  FROM
    adh.*_paths AS t,
    UNNEST(*_paths.events) AS conversion_event
  WHERE
    conversion_event.event_type="FLOODLIGHT" ),
  UNNEST(attributed_events_metadata) AS attributed_event_metadata
GROUP BY
  1
HAVING
  placement_id IS NOT NULL
ORDER BY
  2 DESC

Résultats

Si vous exécutez la requête sur les exemples de données, vous obtenez les résultats suivants :

Premier contact

ligne placement_id crédit
1 11 2
2 22 1

Dernier contact

ligne placement_id crédit
1 11 3

Linéaire

ligne placement_id crédit
1 11 2,5
2 22 0,5