前面了解到归因分析的理论知识和数据采集,接着我们看如何搭建数据计算模型。比如我们现在希望对进入UP主视频播放页的来源进行归纳。
一、根据采集信息,对采集页面进行梳理整合。下面以BiliBili的IOS端为例进行说明
客户端 | 坑位 | 事件名称 | 整合后入口 |
---|---|---|---|
IOS | 我的-关注-我的好友-我的关注-点击 | click_my_follow | 关注页 |
IOS | 我的-关注-我的好友-我的粉丝-点击 | click_my_fans | 关注页 |
IOS | 我的-历史记录-全部 | click_my_history_all | 历史记录 |
IOS | 我的-历史记录-视频 | click_my_history_vd | 历史记录 |
IOS | 搜索结果页-综合-UP主 | click_search_com_up_user | 搜索结果页 |
IOS | 搜索结果页-综合-视频列表 | click_search_com_vd_ls | 搜索结果页 |
IOS | 首页-推荐-热门推荐 | home_page_recom_hot | 首页推荐 |
IOS | 首页-热门-排行榜 | home_page_hot_rank | 首页推荐 |
二、利用归因算法模型处理上述数据。
参数 | 含义 | 填写示例 |
---|---|---|
ActionData | 待归因的行为数据 | bili_dwd.dwd_dot_log |
targetActionData | 目标行为数据 | bili_ads.ads_dot_target_1d |
outputData | 输出数据表 | bili_ads.ads_dot_detail_1d |
Objects | 归因对象 | uuid,user_id |
Dimensions | 归因维度 | up_id_com,app_key |
Fields | 归因字段 | page_combine,business_name,pos |
targetFieldInfo | 目标字段信息,json | {"target_field":[{"name": "watch_time", "event": "watch", "calculateType": "sum"},{"name": "fork_cnt", "event": "fork", "calculateType": "count_distinct"}]} |
targetField | 目标字段 | target_field |
additionalFields | 额外字段 | r_business_id,r_business_name |
timelineFiled | 时间戳字段 | occur_time |
targetValueField | 目标取值字段 | target_value |
eventSplitRule | 事件切分规则(EventType:EventSplitRule) | fork:all,watch:latest |
Methods | 归因方法 | recent,average |
startDate | 进行归因计算的日期 | ${yyyy_mm_dd} |
traceBackDays | 往前追溯的天数 | 0 |
maxIntervalHours | 最大归因间隔(小时) | 24H |
MaxLength | 最长单序列长度,超过该长度会被切分多段 | 1000 |
minNearestTimeInterval | 路径切分规则为NEAREST时最大的间隔时间,分钟 | 120 |
- EventType: 事件类型,目前有FORK、WATCH
- IndexType: 指标计算类型,目前有sum(求和), count_distinct(去重)
- Method: 归因方法,目前有recent, average
- EventSplitRule:路径切分规则,目前有ALL, LATEST,NEAREST
三、计算过程
3.0 数据清洗
- 过滤业务脏数据;
- 纠正错误数据。
3.1 合并待归因和归因目标行为数据
- 输入:ActionData,targetActionData
- 中间处理:将ActionData中的additionalFields字段join到targetActionData上,字段对齐后union操作
- 输出:(Objects,Dimensions,additionalFields, Behavior)
3.2 拼接sequence
- 处理:Objects在Dimensions下合成一条sequence,对于每个sequence按照MaxLength进行切分
- 输出:(Objects,Dimensions,additionalFields,targetFields, Seqeunce)
3.3 对sequence进行切分
- 处理:按照eventSplitRule以及TargetField的属性、maxIntervalHours进行序列切分,一调序列在每个targetFields上都会打平多条
- 输出:(Objects,Dimensions,additionalFields,split_id, Seqeunce)
3.4 对切分后的sequence分配target的归因,输出明细结果
- 处理:对每个切分后的子序列按照不同的mothod生成归因结果
- 输出:
参数 | 含义 | 示例 |
---|---|---|
object_id | 对象id | 123456 |
type | 对象类型 | user_id |
up_id_com | up主id | 30689558 |
app_key | app编码 | IOS |
business_id | 业务id | 1 |
business_name | 业务名称 | 娱乐 |
r_business_id | UP主对应业务ID | 123 |
r_business_name | UP主对应业务名称 | 鬼畜 |
split_id | 切分id | 0 |
dateline | 目标事件时间戳 | 1648137600 |
target_field | 目标指标字段名称 | watch_time |
mothod | 归因方法 | recent |
page_combine | 页面类型 | 历史记录 |
page_code | 页面code | click_my_history |
pos | 坑位位置 | 1 |
value | 贡献值(单位:分钟) | 20 |
根据算法归因的结果,我们可以看到用户user_id=123456 在2022年3月25日通过Bilibili的IOS端坑位=‘历史记录’进入娱乐-鬼畜区的up主的30689558 贡献的观看时长为20mins.