Modelización de la atribución con la tabla de rutas

Las tablas *_paths te proporcionan información valiosa sobre las interacciones de los usuarios con los medios que gestionas mediante Display & Video 360 y Campaign Manager 360. Estas interacciones (también denominadas "puntos de contacto") se integran en rutas de eventos, que describen el recorrido de un grupo de usuarios a través del embudo de conversión. Los datos de las tablas *_paths usan los mismos datos que tienes a tu disposición a través de Data Transfer, pero te llegan en rutas ya generadas. Las rutas de eventos están disponibles tanto para los usuarios con conversión como para los usuarios sin conversión y pueden incluir varias conversiones.

Como sucede con todos los datos de usuario del Centro de Datos de Anuncios, los datos de las tablas *_paths están sujetos a los requisitos de agregación.

Información técnica

Cada fila de paths contiene un solo recorrido del cliente que dura 30 días. Estos datos se actualizan a diario para abarcar los datos de los últimos 30 días. Las rutas de eventos se generan mediante cookies y, por lo tanto, se limitan a un único dispositivo. En algunos casos, como cuando los usuarios han inhabilitado la personalización de anuncios, el valor de los IDs de usuario será 0. Normalmente, estos usuarios seguirán estando separados por filas, por lo que dos rutas de conversión distintas asociadas a un ID de usuario con el valor 0 tendrán distintas filas. Sin embargo, en determinados tipos de análisis, como la agrupación por user_id = 0, se combinan varias rutas de conversión en una sola, lo que puede crear discrepancias en los datos. Más información sobre los IDs de usuario nulos

Cada fila de la columna *_paths.events contiene un array de tipos STRUCT en el que cada tipo STRUCT es un único evento de la ruta del usuario. Los tipos STRUCT que componen la ruta se ordenan por marcas de tiempo; el primer evento del array es el más antiguo.

Consultas de ejemplo

Las siguientes consultas miden el impacto de los emplazamientos en la conversión de un segmento de usuarios concreto. Las consultas atribuyen la contribución mediante 3 modelos de atribución distintos:

  • Primer contacto (toda la contribución se atribuye al primer punto de contacto).
  • Último contacto (toda la contribución se atribuye al último punto de contacto).
  • Lineal (la contribución se divide de manera uniforme entre los puntos de contacto).

Datos de ejemplo

Fila 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

Consultas de ejemplo

Primer contacto

/* 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

Último contacto

/* 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

Lineal

/* 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

Resultados

Si ejecutases la consulta con los datos de muestra, obtendrías estos resultados:

Primer contacto

row placement_id credit
1 11 2
2 22 1

Último contacto

row placement_id credit
1 11 3

Lineal

row placement_id credit
1 11 2.5
2 22 0.5