数据埋点
数据埋点,是指在应用中的特定流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑[1]。
数据流程
用户行为模型
4W1H用户行为模型:
- WHO:用户属性
- 用户属性本身不随行为的发生而改变,可不在埋点中体现,可user_id将用户行为与用户属性宽表关联
 
 - WHEN:行为发生的时间(不是上报时间)
- 一般上报时间比行为时间晚
 
 - WHERE:行为发生的地点
 - HOW:发生行为时的一些状态
- 操作系统
 - 网络状态
 - 屏幕比例
 - 分辨率等
 
 - WHAT:具体发生的行为
- 点击
 - 曝光
 - 浏览
 - ……
 
 
事件
什么是事件?
追踪或记录的用户行为或业务过程
- 注册账号
 
- 登录
 - 观看视频
 - 点赞
 - 评论
 - 关注
 - ……
 
事件通常包括曝光(expose)、点击(click)、浏览(view)。
事件三要素
- 操作(action):定义一个操作动作(点击、拖拽等)
 - 参数/属性:参数可以是任何与该事件相关的属性,包括触发这个事件的人、时间、地点、设备、操作的业务信息
 - 属性值:参数/属性的值参;参数和值以kv(key-value)形式存储在JSON串中
 
| 事件类型 | 事件名称 | 事件显示名 | 参数名 | 参数显示名 | 参数值类型 | 
|---|---|---|---|---|---|
| 电商行为类 | order | 购买 | order_id | 订单编号 | STRING | 
| sku_name | 商品名称 | STRING | |||
| sku_type | 商品类型 | STRING | |||
| sku_num | 购买数量 | NUMBER | |||
| order_amt | 购买金额 | NUMBER | |||
| order_type | 购买方式 | STRING | |||
| complaint | 用户投诉 | user_id | 用户id | STRING | |
| comp_contents | 投诉内容 | STRING | |||
| comp_object | 投诉对象 | STRING | |||
| comp_channel | 投诉渠道 | STRING | |||
| comp_type | 投诉方式 | STRING | |||
| order_return | 退货 | order_id | 订单编号 | STRING | |
| return_amt | 退货金额 | NUMBER | |||
| return_reason | 退货原因 | STRING | |||
| return_type | 退货方式 | STRING | |||
| 通用功能类 | search | 搜索 | search_keyword | 搜索关键词 | STRING | 
| search_type | 搜索类型 | STRING | |||
数据埋点
数据埋点是数据产品经理、数据运营以及数据分析师,基于业务需求或产品需求对用户在应用内产生行为的每一个事件对应的页面和位置植入相关代码,并通过采集工具上报统计数据,以便相关人员追踪用户行为,推动产品优化或知道运营的一项工程。 ——产品埋点答疑指南
平台
- 移动产品:经常称之为移动端、M端
- 手机APP
 - 内嵌H5页面
 - 小程序
 - WQ页面
 - ……
 
 - 网页产品:经常称之为PC端
- WEB页面
 - PC客户端
 
 - 移动设备:智能手环、POS机等各种智能设备、掌上电脑
 - 服务端:一般是指服务端服务器资源
 
各种平台的埋点手段:
| 设备类型 | 展现形式 | 展示形式 | 采集工具 | 
|---|---|---|---|
| PC设备 | PC站 | WEB页面 | JS | 
| PC客户端 | 客户端 | JS | |
| 移动设备 | 手机App | 移动应用 | SDK、http | 
| App内嵌 | App内嵌H5页面 | JS | |
| M站 | WEB页面 | JS | |
| 微信 | WEB页面 | JS | |
| 微信小程序 | WEB页面 | JS | |
| 服务端 | 服务接口 | 服务接口 | http | 
| 移动终端 | 智能设备 | 移动应用 | SDL、http | 
| 掌上电脑 | 硬件服务 | http | |
分类
按照获取数据的类型以及用户触发行为的不同,可将埋点分为以下几种:
- 点击事件
 - 曝光事件
 - 浏览事件
 
点击事件
用户在应用内的每一次点击行为,都可以记为一次点击事件。
一般通过点击事件,可以统计得到点击PV、点击UV
曝光事件
曝光事件是为了统计应用内的某些局部区域是否被用户有效浏览。
eg:推荐区域、某个按钮
做曝光埋点的时候应该注意:
- 要科学、合理地定义有效曝光
 - 为了不影响页面性能和用户体验,不能在应用内的所有区域都加曝光埋点
 
页面浏览事件
页面浏览事件通常是指页面的各种维度信息的统计
eg:页面流量PV、页面流量UV
页面事件通常统计的信息包括:
- 浏览器信息:浏览器版本、浏览器语言、浏览器编码、屏幕分辨率等
 - 访问信息:用户账号、当前页面URL、上次访问时间、访问时长、页面停留时间等
 - 来源信息:
 - 物品信息
 
方式
数据埋点方式主要有两种:
- 公司研发在自己的产品当中注入统计代码
 - 集成第三方统计的SDK,如友盟、百度移动统计、Sensors Data、GrowingIO、Talking Data等
 
按照埋点工具可分为:
- 代码埋点(客户端)
 
Talking Data、Google Analytics
- 可视化埋点(客户端)
 
诸葛IO、神策数据、MixPanel
- 无埋点/全埋点(客户端)
Heap Analytics、Growing IO
 
类别
通用埋点
通用规范事件
自定义埋点
- 需求名称
 - 采集端
 - 页面名称/模块名称
 - 自定义事件名
 - 自定义事件用途
- 仅用于内部测试
 - 用于统计
 - 用于推荐/画像
 - 同时用于统计和推荐/画像
 
 - 需求备注
 - 事件其他隐私说明
 - 同时提交隐私审核申请
 
思路
- 梳理业务流程
 - 确定关键指标
 - 细化各流程影响因素
 - 评估对老业务的影响
 
设计原则
埋点设计原则:
- 唯一原则
- 埋点字段相互独立
 
 - 枚举原则
- 将所有可能需要的数据涉及的埋点一一枚举
 - 可以根据页面穷举或根据流程穷举
 
 - 精确描述
- 描述包括:采集逻辑、数据结构、特殊情况处理
 
 
埋点流程
埋点的基本流程:
- 整理埋点方案
 - 采集工具植入
 - 埋点测试
 - 线上数据跟踪
 
或为:
- 业务需求梳理
- 需求背景:该打点是为了什么场景/活动/页面
 - 需求提出方:产品、运营、研发等
 - 衡量指标:根据以上需求背景,明确需要量化的指标
 - 其他信息:对以上信息的补充
 
 - 埋点设计
- 根据业务需求,将指标进行拆解,拆解出原子指标及维度,罗列出需要埋点的具体点位,设计出每个埋点的点位应该用什么事件,需要带哪些参数、每个参数的类型、填什么取值
 
 - 埋点需求评审:对埋点设计进行评审,对不合理的设计进行调整,剔除不可实现或过于复杂的埋点或寻求其他方案
 - 埋点开发:研发按照评审后的埋点需求文档进行开发
 - 埋点测试
 - 上线校验
 
整理埋点方案
通常至少要包含以下几点内容:
- 埋点位置:需要添加埋点相关信息的位置
 - 埋点标识:每一个位置上需要设置一个埋点的标识来代表这个点击位
- 必须全站唯一,不能出现重复
 
 - 埋点参数:除了正常的流量数据(UV、PV)外,还想看到的数据
 - 页面名称:当前埋点所属的页面
 - 应用标识:当前应用的唯一标识,也叫站点;用来进行数据归属划分
 
采集工具植入
- 数据的采集工具通常为埋点代码
 - 不同的产品形态采取不同的埋点代码植入
 
通常有3种:
- JS文件
 - SDK
 - http请求
 
埋点测试
埋点测试是指完成埋点代码植入后,需要对埋点的有效性进行测试
通常关注以下内容:
- 埋点代码是否引入
 - 点击位以及相关事件参数是否正常加入埋点
 - 数据能否正常上报
 
线上数据跟踪
埋点上线后,可用对应的数据可视化产品进行产品数据展示,或使用SQL提数看数据。
用户唯一标识
用户唯一标识:是用户唯一的身份ID;包括设备ID和用户ID。
设备ID
使用相应的算法,生成一个设备ID,以唯一识别用户的终端设备。
Android系统
Android系统适合做设备唯一标识符的几种标识符及其特性:
| 标识符 | 安卓版本/权限特性 | 重置特性 | 
|---|---|---|
| OAID | 1. Android 10及以上版本支持 2. 需要获取OAID的权限  | 
      1. 用户可手动重置 2. 恢复出厂可重置 3. 用户可关闭OAID的获取权限  | 
    
| Android_id | 1. 不需要权限 2. Android 8.0之后,Android_ID将不再适合唯一设备标识符  | 
      刷机、root、恢复出厂设置会重置 | 
| IMEI | 1. 获取IMEI需要READ_PHONE_STATE权限 2. Android 6.0之后,这类权限需要动态申请 3. Android 10之后,禁止获取手机IMEI号  | 
      具备唯一性,恢复出厂设置不会重置 | 
因此,IMEI是最适合做设备唯一标识符的,但是获取IMEI需要授予权限且Android 10之后不再开放IMEI的权限
因此,在Android系统中,应按
$$IMEI \rightarrow OAID \rightarrow Android_ID$$
的顺序生成设备ID
先获取IMEI号;获取不到IMEI时获取OAID;获取不到OAID时,再获取Android_ID;然后使用相关算法生成设备ID。
IOS系统
IOS系统的可用于生成设备ID的标识符:
| 标识符 | 说明 | IOS版本/权限特性 | 
|---|---|---|
| IDFA | 广告标识符 | IOS 10之后,用户修改后或关闭后无法确定用户的唯一性 | 
| IDFV | 应用开发商标识符 | 统一开发商下的不同App的IDFV相同 | 
| UDID | IOS设备的唯一标识码 | IOS 6及以前系统是可以获取到设备的UDID,IOS 7中已经完全禁用 | 
苹果系统生成设备ID的标识符顺序应该是
$$IDFA\rightarrow IDFV\rightarrow UDID$$
先获取IDFA;获取不到IDFA时获取IDFV;获取不到IDFV时,再获取UDID;然后使用相关算法生成设备ID。
Web网站
使用cookie_id作为设备ID,并存储在浏览器的cookie中
小程序
微信小程序通常使用openid作为设备ID,也可自己生产一个ID作为设备ID。
用户ID
用户ID:用户在业务产品注册的用户账号
意义
- 了解用户行为
- 用户的使用习惯
 - 用户的决策路径
 - 用户的注意力分布
 
 - 掌握产品动向
- 产品用户量
 - 产品所处的生命周期
 - 目前的数据表现
 
 - 支持产品决策
- 新功能的上线
 - 旧功能的迭代优化
 
 
注意事项
- 
埋点方案的梳理要越早越好,并且与开发同步,以防止相关的埋点参数接口取不到
 - 
埋点一定要测试
 - 
埋点标识要唯一
 - 
埋点方案发生变动要及时同步到各方
 - 
引:埋点代码是否引入,引入的代码是否与当前产品形态吻合
 - 
埋:是否产品的所有模块都添加了埋点
 - 
报:埋点之后数据是否能够正常上报
 - 
落:上报的数据最后是否落到了对应的表里面
 
一些埋点管理系统
网易HubbleData
网易HubbleData是一个洞察用户行为的数据分析系统,提供一套完整的数据解决方案。
平台工作流程:
1  | graph TB;  | 
平台包括的应用有:
- 事件分析
 - 漏斗转化
 - 用户路径分析
 - 用户分群构建
 
HubbleData平台用户分为两类:
- 
匿名用户:SDK内部自动依据某个算法生成的唯一id,且只生成一次,该id同时
 - 
真实用户
 
参考资料
- 产品埋点答疑指南
 - 数据埋点:用户唯一标识
 - 从业务视角,分析埋点思路
 - 如何做好数据埋点?
 - HubbleData事件管理
 - 网易HubbleData之web端js-sdk数据采集库讲解
 - 一周数据埋点之旅
 - 用户行为的深度追踪——事件与埋点