paths テーブルによるアトリビューション モデリング

*_paths テーブルでは、ディスプレイ&ビデオ 360 およびキャンペーン マネージャー 360 で管理しているメディアに対して発生したユーザー インタラクションについてのインサイトが得られます。こういったインタラクション(タッチポイントとも呼ばれます)を繋ぎ合わせたイベント経路には、コンバージョン ファネル内を進んでいくユーザーのジャーニーが再現されています。*_paths テーブルで使用されているデータは、Data Transfer を介して参照できるデータと同じものですが、あらかじめ経路として構築されている点が異なります。イベント経路は、コンバージョン達成済みのユーザーについてもコンバージョン未達成のユーザーについても参照可能で、複数のコンバージョンを含むこともあります。

Ads Data Hub のすべてのユーザーデータの場合と同様に、*_paths テーブル経由のデータには集計要件が適用されます。

詳細な技術情報

paths の各行は、過去 30 日間に記録されたカスタマー ジャーニー 1 件に対応します。このデータは毎日更新され、常に直近 30 日間の情報が反映されています。イベントバスの構築は Cookie によって行われるため、捕捉できるのは 1 個のデバイスについての情報です。特定の状況下、たとえばユーザーが広告のパーソナライズからオプトアウトした場合などでは、ユーザー ID が 0 に設定されます。通常、こういったユーザーのデータは個々の行に分かれたままであり、同じユーザー ID「0」に紐付けられていても、別個のコンバージョン経路は別個の行になります。ただし、一部の分析(たとえば user_id = 0 によるグループ化)では、複数のコンバージョン経路が 1 つに統合され、データに相違が生じることがあります。詳細: ゼロに設定されたユーザー ID について

*_paths.events 列の各行には構造体(STRUCT)の配列が含まれており、各構造体がユーザーの経路内の個々のイベントに対応します。経路を形成する構造体はタイムスタンプ順に並んでおり、配列の最初にあるイベントが最も古いイベントです。

サンプルクエリ

以下の各クエリは、特定のユーザー セグメントのコンバージョンにプレースメントが及ぼした影響を測定するものです。各クエリでは、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