数据是机器学习的前提,前面 使用Python爬虫抓取数据 篇介绍了通过爬虫抓取网页的方式采集数据。对于新产品,最重要的事项是获取用户,参看前面互联网产品怎么发掘种子用户和意见领袖 这篇。
在产品上线之后,最重要的工作就是数据分析,产品和运营人员关心使用产品的用户的行为、使用习惯、人口统计信息及运营指标等,这些都依赖于数据。埋点是采集数据的重要途径。
数据埋点不是新名词,在电脑网站出来之后就有统计工具,站长们很熟悉的谷歌、百度统计等工具,通过在HTML页面中嵌入它们提供的js代码实现数据采集。
多说几句,无论谷歌、百度还是其它的web页面统计工具,技术实现原理都是由Web服务器端通过代码的方式向浏览器返回一张1*1像素的透明图片(在网页上人眼看不到这张图片),图片的过期时间设置成立即过期,这样每次打开页面浏览器都会去请求这张图片,服务器端就可以记录下请求数据。明白了原理,自己也可以写一个简单的统计工具。
在设计埋点方案之前需要确定收集哪些数据,将这些需求汇总,产品、运营、技术一起确定埋点方案。
从埋点位置划分,可以分为:前端埋点,后端埋点。
前端埋点
顾名思义就是在用户可见的那端(APP、网页、PC客户端)嵌入数据采集代码,像一些第三方的统计工具,比如友盟等,前端嵌入它们的SDK,调用SDK提供的接口采集数据。
前端埋点能收集到用户在界面上的操作轨迹,这些数据后端没法收集,比如用户点击了哪个按钮,打开了哪些页面,页面之间的跳转次序等。
后端埋点
后端埋点就是在服务端嵌入代码,收集数据,由于是在服务端采集数据,可以避免前端埋点的以下一些问题:
客户端采集数据,为了尽量减少对用户体验的影响,需要对采集的数据压缩、暂存,为减少移动端的数据流量,一般只在网络状况良好的情况下向服务器发送数据,因此数据会有延迟,丢数据等弊端。而在服务端采集数据,数据在内网传输,数据传输的即时性强,丢失数据的风险小。
客户端采集数据,如果要增加采集点或变更采集方案,需要修改客户端代码,这就需要发布新版本,受发布周期的影响,而且通常很多用户并不会及时更新版本,将导致新方案不能覆盖所有用户。在服务端采集数据则没有这些问题。
通过以上比较,实施时尽量采用后端埋点,除非后端没法采集到所需要的数据。
前端埋点技术
目前常见的前端埋点技术,有下面三类:
1、代码埋点
谷歌统计、百度统计、友盟等都是代码埋点的例子。在前端代码里嵌入数据采集代码,比如在APP启动时嵌入,在按钮点击事件里嵌入等。
代码埋点的优点是控制精准,采集的数据项精确。缺点:首先是需要开发人员到处添加采集代码,添加和修改的工作量大;其次变更采集策略,需要发布新版本,代价巨大;此外对于APP来说还有耗电、消耗数据流量、丢失数据的风险。
2、可视化埋点
从上面可知,代码埋点的缺点很多,最大的缺点是变更需要开发人员修改代码,不灵活。为了改善,有的公司开发出了可视化埋点技术,产品与运营人员通过GUI界面,鼠标点击的方式随时调整埋点位置,增加、取消埋点,再也不需要开发人员的介入,而且不用发布新版本。
最早提供这种方案的是 Mixpanel 公司,Github上有该公司发布的SDK代码,https://github.com/mixpanel。国内提供可视化埋点技术的公司大都是在它的基础上进行二次开发而成。
技术实现原理
基本原理就是将埋点位置信息做成可配置的资源,通过在后台管理端上操作生成这些配置,客户端启动或者定时从服务器端获取这些配置,客户端根据最新的配置采集数据,发送给服务端。
具体实现是SDK定时做界面截图,在截图的同时从界面UI的根对象开始遍历所有的可视化子对象,得到其层级关系。根据截图和UI元素的可视化信息重新渲染页面,识别可埋点的控件。当产品人员在后台管理端的截屏画面上点击可埋点控件,设置事件关联方面的配置,服务器保存这些配置,客户端在获取到这些配置信息以后,按照新配置采集数据。
3、无埋点
原理跟可视化埋点几乎一样,唯一的不同就是,无埋点是先把所有控件的操作数据采集下来,发给服务器,数据分析人员在后台管理端设置对哪些数据进行分析。由此可知,这个方案收集的数据量巨大,增加了网络传输和服务器存储负担。
无埋点比可视化方案优势的地方是收集的历史数据齐全,可以回溯分析过往数据。
工具选择
国内不少数据服务公司提供了数据采集、分析工具,初创公司可以选择使用它们的服务,不过最好选择可以独立部署的提供方,方便控制,防止数据泄漏。
总结一下,数据埋点需要根据需求而定,灵活使用以上方案,扬长避短。