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