シャープレイ値法とは、多数の広告チャネルやタッチポイントがそれぞれコンバージョン達成に貢献した度合いをモデル化し、貢献度(クレジット)として割り当てるアルゴリズムです。シャープレイ値法は、コンバージョン達成に対する各チャネルの貢献度評価に役立ちます。
Ads Data Hub が使用するのは「Simplified Shapley Value Method」と呼ばれる方式です。この方式について詳しくは、Shapley Value Methods for Attribution Modeling in Online Advertising をご覧ください。
プライバシーに関する制限
ユーザー数が 50 人未満のタッチポイントや、特定のタッチポイントに突出した貢献度をもたらしている「外れ値」ユーザーは、プライバシー フィルタによって除外される可能性があります。このため、シャープレイ値モデルの出力データは、入力されたタッチポイント テーブルと比べると、タッチポイントが一部抜けていることがあります。シャープレイ値モデルの生成のたびに、プライバシーに関するメッセージが表示されます。メッセージには、フィルタで除外されたユーザーとタッチポイントの情報が記載されています。
シャープレイ値法による値の計算の概要
- タッチポイント テーブルと貢献度テーブルを作成します。
touchpoint_temp_table
user_credit_temp_table
- 上の一時テーブルを引数として、テーブル値関数
ADH.TOUCHPOINT_ANALYSIS
を呼び出します。
タッチポイント テーブルと貢献度テーブルの作成
タッチポイント テーブルを作成する
タッチポイント テーブルでは、タッチポイントに関係するユーザー イベントを定義します。データとしてはたとえば campaign_id
、creative_id
、placement_id
、site_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 SHAPLEY_VALUES にする必要があります。 |
出力テーブル
出力テーブルは次のスキーマを持ちます。
列名 | データ型 |
---|---|
touchpoint |
string タッチポイント名。 |
score |
integer 算出されたこのタッチポイントのシャープレイ値スコア。 |
テーブル値関数の使用方法を示すコード例
SELECT *
FROM ADH.TOUCHPOINT_ANALYSIS(
TABLE tmp.touchpoint_temp_table,
TABLE tmp.user_credit_temp_table,
'SHAPLEY_VALUES')