マルコフ連鎖分析

マルコフ連鎖統計関数は、広告活動の各タッチポイントがユーザーのコンバージョン確率を高めた度合いをモデル化し、各タッチポイントの貢献度(クレジット)を確率論的方法で算出します。この関数は試験運用中の機能です。マルコフ連鎖分析は、コンバージョン イベントの発生に対する広告チャネル、キャンペーン、その他のタッチポイントの貢献度評価に役立つことが期待できます。

仕組み

マルコフ連鎖統計関数は、広告主様の広告データを使ってマルコフ連鎖を作成します。作成されたマルコフ連鎖の順序グラフにおいて、各頂点はタッチポイントを表し、各辺は現在のタッチポイントに到達していることを条件として次のタッチポイントへ進む確率を表します。ここでは、次のタッチポイントへの移動の確率を左右するのは、現在のタッチポイントのみと見なされます。各タッチポイントの貢献度は、そのタッチポイントの有無によるモデル化コンバージョン確率の差をもとに算出されます。

プライバシーに関する制限

プライバシー フィルタによる除外措置を避けるためには、各タッチポイントのデータに、コンバージョン達成済みユーザーとコンバージョン未達成ユーザーがそれぞれ 50 人以上含まれている必要があります。また、特定のタッチポイントに突出した貢献度をもたらしている「外れ値」ユーザーは、除外される可能性があります。このため、マルコフ連鎖モデルの出力データは、入力されたタッチポイント テーブルと比べると、タッチポイントが一部抜けていることがあります。

マルコフ連鎖モデルの生成のたびに、プライバシーに関するメッセージが表示されます。メッセージには、フィルタで除外されたユーザーとタッチポイントの情報が記載されています。

マルコフ連鎖値の計算の概要

  1. タッチポイント テーブルと貢献度テーブルを作成します。
    1. touchpoint_temp_table
    2. user_credit_temp_table
  2. 上の一時テーブルを引数として、テーブル値関数 ADH.TOUCHPOINT_ANALYSIS を呼び出します。

タッチポイント テーブルと貢献度テーブルの作成

タッチポイント テーブルを作成する

タッチポイント テーブルでは、タッチポイントに関係するユーザー イベントを定義します。データとしてはたとえば campaign_idcreative_idplacement_idsite_id などが挙げられます。

このテーブルには次の列が必要です。

列名 データ型
touchpoint string
任意のタッチポイント名(null 値やカンマを含む値は指定できません)。
user_id string
タッチポイントを訪れたユーザーの ID(null 値や 0 は指定できません)。
event_time int
ユーザーがタッチポイントを訪れた時刻(null 値は指定できません)。

テーブル作成のコード例:

CREATE TABLE touchpoint_temp_table
AS (
  SELECT user_id, event.event_time, CAST(event.site_id AS STRING) AS touchpoint
  FROM adh.cm_dt_impressions
  WHERE
    event.event_type IN ('VIEW')
    AND user_id <> '0'
    AND event.campaign_id IN UNNEST(@campaign_ids)

  UNION ALL

    SELECT
      user_id, event.event_time, CAST(event.site_id AS STRING) AS touchpoint
    FROM adh.cm_dt_clicks
    WHERE
      event.event_type IN ('CLICK')
      AND user_id <> '0'
      AND event.campaign_id IN UNNEST(@campaign_ids)
);

ユーザー貢献度テーブルを作成する

ユーザー貢献度テーブルでは、コンバージョン イベントを定義します。コンバージョン発生後に続くイベントは、非コンバージョン イベントと見なされます。

このテーブルには次の列が必要です。

列名 データ型
user_id string
タッチポイントを訪れたユーザーの ID(null 値や 0 は指定できません)。
event_time int
貢献イベントが発生した時刻(null 値は指定できません)。
credit integer
該当ユーザーがもたらした貢献度。貢献度として分析する対象は自由に指定できます。たとえばコンバージョン値(コンバージョンによって得られた価値)、コンバージョン数などが考えられます。1~100 の範囲で指定してください。

テーブル作成のコード例:


CREATE TABLE user_credit_temp_table AS (
  SELECT
    user_id,
    MAX(event.event_time) AS event_time,
    1 AS credit
  FROM adh.cm_dt_activities_attributed
  WHERE user_id <> '0'
    AND event.campaign_id IN UNNEST(@campaign_ids)
    AND DATE(TIMESTAMP_MICROS(event.event_time)) BETWEEN @start_date AND @end_date
    AND event.activity_id IN UNNEST (@activity_ids)
  GROUP BY user_id
);

テーブル値関数

テーブル値関数とは、テーブルを結果として返す関数です。このため、テーブル値関数は通常のテーブルと同じようにクエリの対象にすることができます。

構文

ADH.TOUCHPOINT_ANALYSIS(TABLE touchpoints_tmp_table_name, TABLE credits_tmp_table_name, STRING model_name)

引数

名前
touchpoints_tmp_table_name クライアントが作成した一時的なタッチポイント テーブルの名前。このテーブルは、touchpoint 列、user_id 列、および event_time 列を含むスキーマを持つ必要があります。
credits_tmp_table_name クライアントが作成した一時的なユーザー貢献度テーブルの名前。このテーブルは、user_id 列、credit 列、および conversion_time 列を含むスキーマを持つ必要があります。
model string
MARKOV_CHAINS にする必要があります。

出力テーブル

出力テーブルは次のスキーマを持ちます。

列名 データ型
touchpoint string
タッチポイント名。
score integer
算出されたこのタッチポイントのマルコフ連鎖スコア。

テーブル値関数の使用方法を示すコード例

SELECT *
FROM ADH.TOUCHPOINT_ANALYSIS(
  TABLE tmp.touchpoint_temp_table,
  TABLE tmp.user_credit_temp_table,
  'MARKOV_CHAINS')