Shapley 值分析

Shapley 值方法是一种算法,用于为众多广告渠道和接触点分配功劳,具体取决于这些渠道和接触点对转化的贡献(根据模型估算得出)。利用 Shapley 值方法,您可以基于模型来估算特定渠道对转化的贡献。

广告数据中心使用的是“简化版 Shapley 值方法”;如需查看完整的详细说明,请参阅 Shapley Value Methods for Attribution Modeling in Online Advertising(适合在线上广告领域用于归因建模的 Shapley 值方法)这篇论文。

隐私保护方面的限制

用于保护隐私的过滤条件会移除用户数少于 50 人的接触点,以及对接触点贡献的功劳过大或过小的离群用户。因此,Shapley 值模型的输出可能会缺少输入接触点表中的一些接触点。

Shapley 值模型每次迭代完成后都会显示隐私权消息。这些消息中包含已滤除的用户和接触点的相关信息。

概述:采用 Shapley 值方法来计算值

  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 客户创建的临时接触点表的名称。该表必须采用包含 touchpointuser_idevent_time 列的架构。
credits_tmp_table_name 客户创建的临时用户功劳表的名称。该表必须采用包含 user_idcreditconversion_time 列的架构。
model string
其值必须为 SHAPLEY_VALUES。

输出表

输出表将包含以下架构:

列名称 类型
touchpoint string
接触点名称。
score integer
针对此接触点计算得出的 Shapley 值得分。

使用表值函数的示例代码

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