埋点设计文档是面向开发的埋点需求说明书,目的是让开发理解需要在什么情况下做哪些埋点采集,以及具体需要的属性参数类型、取值,确保采集的准确性和完善性。为实现整体指标体系,数据产品落地、使用,需要对开发进行埋点方案设计,利于日后统一管理、修改、维护,保证口径统一、可追溯、易理解。
埋点设计作为数据建设的重要组成的部分,直接影响到后续的数据应用质量和数据回溯,而我们在日常中经常会碰到如下问题:
……
通过上面的情景再现可见,如果底层建设不好,就会造成大量的资源浪费和时间成本,以及本身数据可用价值性大大降低。只有埋点做到定义清楚可回溯、业务变化可迭代、重要需求可覆盖等,才可以避免后期返工、减少不必要的时间成本浪费,提高效率,提高数据准确度,提高数据使用率。
埋点设计可分为以下三个部分:
一个公司内不仅仅有火山引擎的增长分析的数据产品,还会有业务数据库、机器学习平台、bi系统等各种数据系统,而增长分析的数据产品需要承接什么样的需求,怎么打通各个数据产品之间的连接,是一开始最需要思考的问题。
因此初期我们可设定:
埋点建设的阶段我们分为两个重要的阶段。
不管是初期建设还是长期迭代,角色总共分为以下几种。
责任角色 | 责任人 | 负责内容 |
---|---|---|
需求方 | 王某某 |
|
需求评审方 | 刘某某 |
|
埋点设计方案方 | 赵某某 |
|
埋点开发方 | 李某某 | 负责埋点的开发 |
埋点测试方 | 张某某 | 负责埋点测试 |
注意
埋点设计可参考上述步骤进行设计,步骤详细注意事项将在下面进行介绍。
火山引擎增长分析使用 device_id、user_unique_id、ssid 三种 id 标识设备和用户。
详细内容可查看文档用户标识(uid、ssid、did)。
预置事件接入基础SDK可默认自动采集,按照具体需求,选择接入对应端的SDK。
详细内容可查看文档预置属性总表。
全埋点事件接入基础SDK可选择开启或者不开启。如不明确是否开启,可咨询相关服务支持人员。
注意
全埋点具有以下优缺点,请结合实际情况谨慎开启。
开启、不开启方式详见各个端SDK接入文档、下图为IOS SDK开启方式示例。
如果想要深入分析业务,形成数据驱动,则需要在预置事件的基础上,补充更多的自定义代码埋点。自定义埋点的灵活性、自主性、应用性更高。设计埋点人员应根据业务核心诉求,形成事件设计文档,交付给研发团队进行数据接入。
自定义埋点方案示例:
序号 | 事件名称 | 事件展示名 | 属性名称 | 属性展示名 | 属性类型 | 属性值含义或示例 | 事件触发时机 | 埋点方式 | 备注 |
---|---|---|---|---|---|---|---|---|---|
1 | regist_submit | 用户注册 | regist_type | 注册方式 | string | 手机号/邮箱... | 返回注册结果时触发 | 服务端 | |
is_success | 是否成功 | string | true/false | 返回注册结果时触发 | 服务端 | ||||
fail_reason | 失败原因 | string | 网络原因/其他原因 | 返回注册结果时触发 | 服务端 |
序号
每个事件一个固定编号,编号唯一且不可修改,方便文档查阅、回溯,进行管理。
事件名称
每个抽象的行为事件,一个中文名、一个英文名,中英文必须是一一对应关系,不可以重复,代表含义一致。 对于事件英文的命名,避免混杂不堪,需采用统一规范进行命名。建议规则有:
事件属性名称
每个事件属性,一个中文名、一个英文名,中英文必须是一一对应关系,代表含义一致。 但同一个属性可被多个事件引用,例如浏览商品详情页事件和收藏商品详情事件,可以共用属性,商品名称、商品ID等。同一属性在不同事件中字面意义相近,但实际意义有差别时,不建议复用,建议基于属性的实际含义对属性进行区分。例如:在“动画加载”的事件中,“时长”这个属性代表的意义是“加载时长”;而在“视频播放”的事件中,“时长”代表的意义是“播放时长”。在这样的情况下,不建议复用“时长”这个字段,而是拆解为两个字段分别命名。
属性类型
属性值 | 含义 |
---|---|
int | 需要进行聚合运算(例如求和、均值)或者按区间分组的整值,典型的比如年龄、购买数量等。 |
float | 需要进行聚合运算(例如求和、均值)或者按区间分组的小数值,典型的比如价格、时长等。 |
string | 文本类型属性值类型,支持包含、不包含、等于等计算规则。 |
list | 需在一个字段存储多个值。 |
datetime | 支持日期时间格式的 string, "2020-06-19 17:51:21" |
属性值含义或示例
此列意在为研发人员明确属性字段的含义,以及特殊情况的说明,便于研发人员理解与实施。
属性类型 | 示例 |
---|---|
可枚举属性 | 性别:男、女 |
不可枚举属性,可举例说明属性 | 商品品牌:A品牌、B品牌…… |
事件的触发时机
需说明每一个事件应在何时触发,如一个事件在多个时机均有可能会被触发,则需要整理出所有的触发时机。例如:“点击开始注册事件”的触发时机应为点击注册时,但注册通常有多个不同的入口,因此,业务人员需要明确地枚举出哪些注册入口是需要研发人员进行埋点的,如果有属性值的区分也要标注,避免遗漏。
事件 | 属性 | 属性值 | 触发时机 |
---|---|---|---|
点击开始注册 | 注册入口 | 首页右上 |
|
埋点形式
事件埋点形式支持前端、后端两种。不同时机触发,得到数据结果不一致。例如注册事件,前端提交注册时触发,无法明确注册成功还是失败。后端注册返回结果后触发,既可以明确注册结果,又可以避免前端数据丢失。一般情况下,核心业务流程事件建议后端埋点,保证数据准确性,例如:产品购买、注册成功等。在特殊情况下,也可以采用前后端协作的方式进行埋点 ,由一端将收集到的数据传给另一端后,再由数据接收端触发事件埋点。
埋点形式 | 说明 |
---|---|
前端(客户端) | 交互、点击、浏览类前端采集为主。 |
后端(服务端) | 核心业务例如支付、注册等,建议后端。 |
备注
可做排期优先级标注,以及其他特殊情况备注。
公共属性为所有事件均有的属性,例如事件发生的平台、事件所属的业务模块等。没有该业务需求时可忽略公共属性。
在更多的业务场景中,有许多数据比较复杂,例如银行贷款业务数据库中,对每个用户计算的风控等级,可作为用户属性导入。
例如零售在线下交易,发生行为不在线上,或者在线教育中,对客户的线下电话促活召回,不可作为线上行为数据采集,这种存储在业务数据库的数据,也可做事件和属性的抽象,用业务数据库导入方式,并确定导入周期频率(按天、按周等),定期导入。
设计人员应与研发逐个确认事件和属性采集的可行性与成本,对于实现成本高,需要重要性不高的需求可做取舍,并制定整体埋点优先级的排期。
相似场景是合并一个事件还是分不同的事件
事件设计 | 场景示例 | 说明 | 事件设计示例 |
---|---|---|---|
设计为同一事件 | 例如相似场景下的按钮点击可合并,不必一个点击一个事件,需合并为一个事件。 | 对于全局性的事件,我们建议设计为同一事件,通过特定的属性值对特定操作进行区分,而不是针对每一个操作设计一个事件。 | |
设计为同一事件 | 例如:点击banner、点击热门活动位,都是点击首页的推荐位,可通过增加属性区分。 | 各事件所需属性相差不大,平时分析场景多整体分析。 | |
设计为不同事件 | 例如一个内容平台,有视频,有文章,因视频和文章所记录属性差异较大,浏览内容详情应区分为浏览视频详情和浏览文章详情 | 各事件所需属性相差很大,分析场景多分别分析。 | |
设计为不同事件 | 例如:收藏商品、浏览商品详情,虽属性差异不大,但是收藏和浏览业务关系不大,且通常为单独分析。 | 各事件所需属性相差不大,但平时分析场景单一分析,并且业务含义区别较大。 |
多重身份用户的设计
在在线教育用户中,有多重用户身份,例如老师、学生、家长等,要做好用户属性的区分,对不同身份用户的属性进行不同的设置。
主被动事件的处理
在线上行为中,很多需要记录的埋点事件非用户主动触发,为被动触发,例如平台审核、发放优惠券、被其他人关注等,所以这种场景下不存在主动事件,主动触发行为的不是用户,用户是行为的接受者,被动受到影响。但是在分析需求比如审核通过率,需要提交审核-审核通过的主体ID为一人,此时被动事件的上报主体会影响到分析结果,具体处理方式详见官方文档被动和关系事件。
曝光事件的处理
和其他事件一样,只是曝光事件的触发时机需要注意,例如某平台内容曝光事件触发时机为:
虚拟事件
虚拟事件是对元事件的合并和拆分,是一个特殊功能。所以在事件埋点设计时,如果虚拟事件可满足,不必增加新埋点。
事件类型 | 示例 | 图示 |
---|---|---|
合并事件 | 例如社交平台的互动行为包括:点赞、评论、喜欢、发送私信等很多行为,这时需求想分析当天发生互动行为的用户数去重。可对事件合并。 | |
拆分事件 | 例如618电商活动期间,频繁看带满200减20标签的商品的加入购物车数量。不想重复性的配置指标,可设置虚拟事件。 | 无 |