경로 테이블을 사용한 기여 분석 모델링

*_paths 테이블을 사용하면 Display & Video 360 및 Campaign Manager 360을 사용하여 관리하는 미디어와 사용자의 상호작용을 파악할 수 있습니다. 이러한 상호작용(터치 포인트라고도 함)은 서로 연결되어 이벤트 경로를 구성함으로써 사용자 그룹이 전환 유입경로를 거치는 과정을 시간순으로 기록합니다. *_paths 테이블의 데이터는 데이터 전송을 통해 사용 가능한 것과 동일한 데이터를 사용하지만 사전 구성된 경로로 제공됩니다. 이벤트 경로는 전환 사용자와 비전환 사용자 모두 사용할 수 있으며 여러 전환을 포함할 수 있습니다.

Ads Data Hub의 모든 사용자 데이터와 마찬가지로 *_paths 테이블의 데이터에는 집계 요구사항이 적용됩니다.

기술적 세부정보

paths의 각 행에는 30일간의 단일 고객 여정이 포함됩니다. 이 데이터는 최근 30일을 포함하도록 매일 업데이트됩니다. 이벤트 경로는 쿠키를 사용하여 구성되므로 단일 기기로 제한됩니다. 사용자가 광고 개인 최적화를 선택 해제한 경우와 같이 특정 상황에서는 사용자 ID가 0으로 설정됩니다. 일반적으로 이러한 사용자는 여전히 행으로 구분되므로 사용자 ID가 0으로 입력된 2개의 고유한 전환 경로에는 고유한 행이 포함됩니다. 하지만 특정 분석 유형의 경우(예: user_id = 0을 기준으로 그룹화) 여러 전환 경로가 하나로 병합되어 데이터에 불일치가 발생할 수 있습니다. 0으로 설정된 사용자 ID에 대해 자세히 알아보기

*_paths.events 열의 각 행에는 각 구조체가 사용자 경로에 있는 단일 이벤트인 구조체 배열이 포함됩니다. 경로를 구성하는 구조체는 타임스탬프에 따라 정렬되며 배열의 첫 번째 이벤트가 가장 오래된 이벤트입니다.

샘플 쿼리

다음 쿼리는 게재위치가 특정 사용자 세그먼트 전환에 미치는 영향을 측정합니다. 쿼리는 3가지 기여 분석 모델을 사용하여 기여도를 부여합니다.

  • 첫 번째 터치. 첫 번째 터치 포인트에 모든 기여도가 부여됩니다.
  • 마지막 터치. 마지막 터치 포인트에 모든 기여도가 부여됩니다.
  • 선형. 기여도가 터치 포인트 간에 균등하게 분배됩니다.

샘플 데이터

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