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

Pierwsza interakcja

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

Ostatnia interakcja

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

Liniowy

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

Pierwsza interakcja

wiersz placement_id udział
1 11 2
2 22 1

Ostatnia interakcja

wiersz placement_id udział
1 11 3

Liniowy

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