Моделирование атрибуции с таблицей путей

Таблица *_paths позволяет анализировать взаимодействия пользователей с рекламой, которой вы управляете через Дисплей и Видео 360 и Менеджер кампаний 360. Эти взаимодействия, также известные как точки взаимодействия, соединяются в пути событий, которые показывают, как группа пользователей движется по воронке конверсии. В таблицах *_paths содержатся те же сведения, которые доступны с помощью передачи данных, но уже собранные в пути. Пути событий доступны для пользователей., совершивших и не совершивших конверсию, и могут включать несколько конверсий.

Как и все пользовательские данные в Ads Data Hub, данные в таблицах *_paths должны соответствовать требованиям к агрегированию.

Техническая информация

Каждая строка таблицы paths содержит один путь к покупке за период в 30 дней. Данные обновляются ежедневно и всегда охватывают этот период. Поскольку пути событий строятся с использованием файлов cookie, они включают только одно устройство. В некоторых случаях (например, когда пользователь отказался от персонализации рекламы) значение идентификатора пользователя будет равно 0. Обычно таки пользователи заносятся в разные строки, то есть два разных пути конверсии, связанные с идентификатором пользователя 0, будут приведены в отдельных строках. Однако в некоторых случаях, например при группировке по user_id = 0, несколько путей конверсии могут объединяться в один, что может привести к расхождениям в данных. Подробнее об идентификаторах пользователей, равных 0

Каждая строка столбца *_paths.events содержит массив структур, где каждая структура – отдельное событие на пути пользователя. Структуры, входящие в путь, упорядочены по временным меткам. Первом в массиве будет самое давнее событие.

Примеры запросов

Ниже приводятся запросы, которые позволяют оценить влияние места размещения на вероятность конверсии определенного сегмента пользователей. Для распределения доли ценности используются три модели атрибуции.

  • По первому взаимодействию: вся ценность присваивается первой точке взаимодействия.
  • По последнему взаимодействию: вся ценность присваивается последней точке взаимодействия.
  • Линейная: ценность равномерно распределяется между точками взаимодействия.

Пример данных

Строка 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

Примеры запросов

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

Результаты

Если вы запустите запрос для примера данных, то получите следующие результаты:

Строка placement_id Доля ценности
1 11 2
2 22 1
Строка placement_id Доля ценности
1 11 3
Строка placement_id Доля ценности
1 11 2,5
2 22 0,5