Modelowanie atrybucji za pomocą tabeli ścieżek

Tabele *_paths zapewniają wgląd w interakcje użytkowników z treściami multimedialnymi, którymi zarządzasz za pomocą Display & Video 360 i Campaign Managera 360. Interakcje te (nazywane też punktami styczności z klientem) są łączone w ścieżki zdarzeń, aby rejestrować trasę, jaką grupa użytkowników pokonuje na ścieżce konwersji. Dane w tabelach *_paths korzystają z tych samych informacji, które są dostępne w Przenoszeniu danych, ale pochodzących z gotowych ścieżek. Ścieżki zdarzeń są dostępne w przypadku zarówno użytkowników dokonujących konwersji, jak i tych, którzy nie dokonują konwersji, a poza tym mogą obejmować znaczną liczbę konwersji.

Tak jak w przypadku wszystkich danych o użytkownikach w Centrum danych reklam, informacje w tabelach *_paths podlegają wymaganiom dotyczącym agregacji.

Szczegóły techniczne

Każdy wiersz tabeli paths zawiera 1 ścieżkę klienta z 30 dni. Dane te są aktualizowane codziennie i obejmują ostatnie 30 dni. Ścieżki zdarzeń są tworzone na podstawie plików cookie, więc są ograniczone tylko do jednego urządzenia. W niektórych sytuacjach, np. gdy użytkownicy zrezygnują z personalizacji reklam, zamiast identyfikatorów użytkowników będzie występować wartość 0. Standardowo użytkownicy ci będą nadal rozdzielani na wiersze, więc 2 różne ścieżki konwersji powiązane z identyfikatorem użytkownika oznaczonym wartością 0 będą zajmować osobne wiersze. Jednak w przypadku niektórych typów analizy, np. grupowania według atrybutu user_id = 0, wiele ścieżek konwersji zostanie scalonych w jedną, co może spowodować rozbieżności w Twoich danych. Więcej informacji o wyzerowanych identyfikatorach użytkowników

Każdy wiersz w kolumnie *_paths.events zawiera tablicę elementów typu struct, będących pojedynczymi zdarzeniami na ścieżce użytkownika. Elementy typu struct składające się na ścieżkę są uporządkowane według sygnatury czasowej, przy czym pierwsze zdarzenie w tablicy jest najstarsze.

Przykładowe zapytania

Podane niżej zapytania pozwalają sprawdzić wpływ miejsc docelowych na konwersje dokonywane przez konkretny segment użytkowników. Zapytania przypisują udział w konwersji za pomocą 3 różnych modeli atrybucji:

  • pierwsza interakcja (cały udział jest przypisywany pierwszemu punktowi styczności z klientem),
  • ostatnia interakcja (cały udział jest przypisywany ostatniemu punktowi styczności z klientem),
  • liniowy (udział w konwersji jest rozdzielany po równo między punkty styczności z klientem).

Przykładowe dane

Wiersz 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

Przykładowe zapytania

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

Wyniki

Po wykonaniu zapytania na przykładowych danych otrzymasz takie wyniki:

wiersz placement_id udział
1 11 2
2 22 1
wiersz placement_id udział
1 11 3
wiersz placement_id udział
1 11 2,5
2 22 0,5