万万没想到!上网会曝露这么多信息?10000 字深度解密用户数据埋点采集技术
优采云 发布时间: 2020-08-04 07:04我们先来看两个小故事。
No.1
神秘的建行按揭额度
前段时间,我常常收到招商银行信贷部的电话,本来我都是直接死掉的,但是有三天打了好几次,我总算忍不了了,接上去问:“能不能不要再给我打了?说了不需要不需要!“,对方的回答却使我有些震惊,甚至有被激怒的觉得: “真的不需要吗?真的不需要吗?“。我再度指出:“真的不需要!“。然后对方说:“我这儿听到你近来在银行 APP 里浏览了e招贷页面,猜想您可能有资金方面的须要,我们如今有xxx让利,最高给您开到xx万,都是随借随还的…… “。我:“…“”。
No.2
数据统计差别的迷思
有一次,一个活动做完以后,运营朋友拿着两张数据报表来问我:“为什么我们的数据跟外部的数据有如此大的差别呢?”。我反诘:“你确定两侧的数据统计口径一致吗?”。运营朋友答:“一致呀,都是用户访问量呀!”。我:“我的意思是,你的访问量是根据哪些估算的?怎样才算是一个访问呢?即使统计口径一致,埋点和上报方式也有区别… blabla”。说完那些我突然发觉,这不是“人话“啊,怎么样能够把这种转换成谁都能听懂的“人话“呢?我深陷了思索。那么,通过这两个小故事,我们得到了什么信息呢?首先,我们在互联网上的一切动作,都可能有人在观察、记录、分析、预测。其次,大部分人并不晓得,我们在上网时的信息和行为是怎样曝露的,即使晓得概念,也未必清楚细节。因为细节是魔鬼,而且说出来也很难被理解。因此,笔者觉得有必要对基本的用户数据埋点采集原理进行一些讲解,让你们了解我们在互联网上,到底会曝露什么数据,这些数据会对我们形成如何的影响。
目录
CONTENTS
1. 网站或应用能采集哪些用户行为信息1.1 硬件能力1.2 软件能力1.3 数据权限1.4 用户输入2. 目前主流的数据埋点技术2.1 手动埋点2.2 *敏*感*词*2.3 全手动埋点3. 目前主流的数据上报技术3.1 客户端主动上报3.2 服务端获取信息4. 基本的辨识剖析方式4.1 设备唯一性4.2 用户唯一性 4.3 用户行为剖析5. 主流的统计平台及工具5.1 数据剖析平台5.2 行业剖析报告5.3 自建数据平台的优劣
1、网站或应用能采集哪些用户行为
若要了解我们会曝露什么数据,首先要知道我们的“敌人”有什么能力。我将其分为四部份来讲,其中数据权限也算是软件能力的一种,差别在于须要用户的授权能够领到。许多硬件能力也都是要用户授权使用的,只是有时候授权的提示过分复杂,容易混淆视听,不留神授权了你完全不理解的东西。
1.1
硬件能力硬件能力包括设备能做的一切事情,这里的设备,可以是个人笔记本、服务器、智能手机,以及其他智能设备等。那么,以个人电脑为例,它可以联网、办公、打游戏等等。用户的所有行为,都可能被记录,并通过网路发送到远程的某台服务器进行剖析。这个你们是晓得的。
如果是智能设备,能做的就更多了。比如*敏*感*词*、麦克风、陀螺仪、GPS、NFC 、蓝牙、WiFi 等等,都是硬件提供的能力。有了硬件基础,软件能够通过驱动程序获取这种硬件提供的信息,进入下一步的处理逻辑。常见的智能设备有:手机、笔记本、iPad、ATM、自动售货机、快递柜、智能家居、智能水杯、智能腕带,智能车辆等等。那么你可以思索一下,这些设备平常都具有什么能力,可能采集你的哪些信息?
1.2
软件能力
硬件基础为软件提供了基础能力,比如估算能力、存储空间、联网能力等等。智能设备中的软件也可以操作*敏*感*词*、麦克风等,甚至是在用户不知情的情况下开启。比如前段时间某 APP 偷偷打开用户*敏*感*词*曝露的风波。我们也会在影视作品中见到用户笔记本或手机被黑客攻击以后,*敏*感*词*被偷偷打开,记录了用户的隐私影响,并借此逼迫用户的风波。再如韩剧《CSI 网络*敏*感*词*调查》中,黑客通过黑进用户的网络*敏*感*词*,长期观察用户日常生活习惯,终于找到机会在父亲不知情的情况下,偷走了*敏*感*词*中的孩子。这些,都是软件能力的彰显。黑客距我们的生活还比较遥远,普通用户最常接触到的就是上面提及的智能设备为软件提供的这种能力了。除了那些之外,用户在操作软件时的行为,大部分也是可以被辨识记录的,比如触摸、滑动、点击、摇一摇、横竖屏、截屏等。只要软件能有反应,就说明有程序插口可以响应,就可以被记录。还有 PC 上最常见的键盘点击,可以全局记录键盘的任何点击,哪怕只是你手臂抽筋在空白处随意点了几下。把这种点击数据汇总上去,叠加到界面上,就成了点击热力图:
除了键盘点击之外,你晃键盘,屏幕上的箭头就动,那么假如有须要的话,你的整个键盘轨迹都是可以被记录的。有些人的手是随心而动,可能某个顿时想看那里,鼠标箭头就跟了过去,然后思索一下又舍弃了。那么依据整个键盘轨迹,你发觉用户明明对这部份内容形成了兴趣,但是逗留几秒,又移走了,那么就可以剖析一下,是不是这部份内容设计得不够吸引人,诸如此类。
1.3数据权限
正常的情况下,对于*敏*感*词*、麦克风、GPS 等涉及隐私的能力,系统会寻问我们是否容许获取这个能力。然而,极端情况下的黑客攻击,我们是难以制止的。此外,很多人在授权这种能力的时侯,其实并不清楚会带来怎么的后果。就像是你不知道勾选了“同意xxx用户使用合同”意味着哪些一样。举个反例,手机相册的授权恳求,往往都是要求读写权限,比如各类 P 图 APP。写权限好理解,就是它可以存相片到我的手机里;那么读权限呢?有没有可能在你不知情的情况下扫描所有相片,分析你的生活习惯呢?即使没有,你只是单纯地上传了一张自拍,这意味着哪些? a. 设备信息、用户信息、可能还有其他信息,与你这张脸绑定了,大几率相片中的人就是设备主人; b. 除了脸之外,照片中可能有其他重要信息。比如背景中标志建筑,门牌号,店铺名,这曝露了你的身分和位置; c. 照片的元信息中可能储存了拍摄时间、地点等重要信息; d. 更夸张一点,你的眼瞳倒影、墨镜反光、或者其他细微之处的影像,也可能曝露重要信息。大家可能听过“社会工程学”(Social Engineering,又被翻译为:社交工程学),就是通过这种蛛丝马迹,再加上一些非技术手段,来获取某个人的隐私信息的。而授权这种数据权限,可能就是个开始。再例如,有的人可能接到过催债邮件,但邮件里的人并不熟悉,只是有点印象。这显然是往年办事须要,存储了某人的手机号,而这个人正好使用了个别网贷 APP,并且逾期没有还贷。然后网贷公司都会批量地向这个人的*敏*感*词*好友发送邮件,而你正好就在其中。
1.4用户输入
有些时侯,我们的数据泄漏并不是被动的,而是我们主动把数据交给了他人,然后我们的数据又被滥用引起。比如,买房以后太长一段时间,都会收到各类中介的恐吓。甚至不需要买车,只是手机注册了某个房产 APP,然后你的手机号都会在房产圈一遍一遍盗卖,甚至可以持续好几年。再例如,淘宝上有个精典的骗子,就是一分钱疯抢。用户下单以后,卖家就可以领到用户的姓名、手机、收货地址了。这样骗到几百上千个信息后,活动下线。那么就领到了一份特别有价值的信息,然后再以每条几毛到几元的价钱转让即可赢利。类似的,大部分快件货运的纸质收据上,都有明晰的姓名手机和住址,这在先前可能不是哪些问题,但是互联网时代就不一样了,快递员用心记录出来,都可以拿这个数据换钱。什么?手写太麻烦?有 OCR 拍照辨识啊~要求上传*敏*感*词*的,就更要当心了,要知道好多办事流程只要*敏*感*词*扫描件或*敏*感*词*即可。那么一旦你的电子版*敏*感*词*流出,就可能出现新闻里说的,莫名其妙多了 N 张*敏*感*词*,甚至身分被顶替的风波。
2、目前主流的数据埋点上报技术
前面述说了一些基本的能力,和典型的用户行为记录,那么设备记录那些数据然后,如何上报给服务端呢?也就是说,你的数据是如何被他人“拿走”的呢?下面,我们就来瞧瞧目前主流的数据埋点及上报技术有什么。
我们可以根据自动化程度,将埋点方式分为三类,即自动埋点、*敏*感*词*埋点、全手动埋点。所有的埋点形式,都要包含基础代码。在 APP 中,一般称为 SDK(Software Development Kit),在网页中也可以有 SDK,或者就是一段通用的统计代码片断。除此之外的自动化程度,才是它们之间的差别所在,下面挨个进行讲解。
2.1 手动埋点
手动埋点也叫代码埋点,那么是谁自动呢?当然是开发姐了。根据需求的不同,开发姐在某个 APP、小程序、网页中进行埋点。其基本原理,就是为界面中的某个元素(按钮、图片、视频等)绑定一个风波,即前文提及的触摸、点击等风波。然后再用户执行这种动作的时侯,就可以通过程序捕捉到,并记录出来,上报给服务器。下面是(你能读懂的)伪代码示意:
按钮
如果把执行的动作讲到每位元素中,显然是不科学的,我们可以把上报的逻辑抽离下来,而只是为这个元素分配一个标记:
按钮
然后在程序的公共逻辑中*敏*感*词*特定的风波,并将对应元素的动作上报:
if ( event.type == ‘click’ ) { send_data_to_server ( ’触发事件的元素的 tag’ );}
当按键被点击时,公共的上报程序将按键的 tag 上报给服务器,服务器就可以按照这个预先埋好的 tag 来辨识这个元素。手动埋点方法是最原始,也是订制程度最高的,可以按照需求完全订制。缺点就是开发周期长,需求变更时不够灵活。
2.2半手动埋点
许多埋点工作虽然是重复劳动,并且有共同的特点可以抽离,那么必然可以工具化或自动化。但这个过程既要保证系统的便利性,又要保留一定的扩展性,于是就有了所谓*敏*感*词*的埋点。顾名思义,这种方法有实现了某种程度的自动化,不完全须要编码。但是须要人工干预,比如设置参数、修改配置等。那么原理虽然也很简单,我们只须要把辨识和定义元素的 tag 部分,抽离成可以配置的信息即可:
按钮
那么具体怎么配置,这个配置怎样应用到代码中,就是程序员小哥的工作了。目前有些数据统计平台提供了可视化的埋点技术,其实就是在这一层上面加了可视化的界面,让操作人员可以更方便地选到这种元素,然后系统再把这种配置整合到程序中即可。
2.3 全手动埋点
全手动埋点,也叫无埋点,无痕埋点。从名子上来看,就是完全自动化,什么都不需要做。然而事实并非这么。前面提过,所谓全手动埋点,也是要在应用中要包含基础代码的。差别在于,这种方法只须要包含基础代码,不需要额外的开发。其原理,就是将用户的一切可捕获的行为上报全自动采集最新行业文章,然后由产品人员自己决定关注什么数据。或者是由产品营运人员自己定义风波,决定要检测什么元素或用户行为,然后保存配置即可。这样,其实就回到了 2.2 的*敏*感*词*可视化埋点状态了。
据说可视化埋点是可以解放程序员的。当然,这只是理想状态,不然程序员就都待业了。涉及到业务属性的数据,如订单号、金额、商品数据等须要调插口的埋点,可视化埋点就难以支持了。此外,由于各个端的代码结构各不相同,也未必都能可视化获取所有元素,这也是可视化埋点的局限性。总而言之,可视化埋点只是个辅助能力,重点就在于可视化。能够满足一部分需求,解放部份生产力。但是稍稍复杂一些的埋点,还是须要编码来完成。
3目前主流的数据上报技术
前面论述了客户端的埋点技术,下面再来介绍一下主流的上报技术。
3.1客户端主动上报
无论是 APP 还是浏览器,我们都可以统一叫做客户端。大多数情况下,客户端是通过 HTTP 请求,将数据上报给服务器的。APP 或桌面软件使用相应的程序语言发送恳求,而网页通常使用 Javascript 脚本语言发送恳求。这个过程可能发生在用户刚才步入界面时,也可能发生在用户离开界面之前,或者用户执行某个动作时上报,或者在用户无感知的情况下间歇性上报。
具体的上报时机选择各有优劣,需要在统计的实时性、服务器压力、数据的准确性之间进行权衡。比如,如果把数据攒一部分再上报,虽然效率提升了,服务器压力也小了,但是丢数据的风险就提升了。
这里可以解释有些时侯数据为何会不确切,因为客户端上报是要通过网路发送恳求的,请求过程可能会遗失数据,称作丢包。再例如极端情况下,客户端刚想发送数据到服务器,但是网路忽然断开了,这时候假如联网时没有重试机制,或者不再联网,那这部份数据必然是统计不到了。如果是网页端的 Javascript 脚本上报,还会存在诸如页面的其他业务逻辑出错造成脚本不再执行,或者页面关掉前 onbeforeunload 事件未执行等等。总之,要接受一定程度的上报偏差,只要偏差在可容忍的范围内即可。
3.2服务端获取信息
在网页中,用户首次见到的一切,都是从服务器返回的(APP 不同,因为部份界面和逻辑早已安装在了用户的设备上,展示这部份界面不需要网路恳求)。那么服务器在应答你的客户端恳求的时侯,也能领到一些基本信息,比如你的浏览器类型、版本号、屏幕分辨率、IP 地址等等。这些也可以作为基本的剖析数据,比如业务中的网页究竟要兼容什么设备,就可以先参照一下这种统计数据,看看是否要舍弃兼容这些占比特别小的浏览器或设备。这些数据有部份是可以通过页面中的脚本语言获取,再“异步”上报给服务器的。所谓“异步”,即并非在你访问网页的顿时执行,而是有延迟,异步执行的逻辑。除了服务器能获得的那些基本信息外,其他信息都要通过上文论述的埋点技术获取,并异步发送给服务器记录了。
4基本的辨识剖析方式
这里讲的辨识剖析方式,还没有到数据剖析层面。只是对于上报的零散数据有一个基本的认识。
4.1设备唯一性
前面讲过,设备的基本信息是可以获取的,但是也可能被伪造。那么究竟如何才算是一个真实的设备呢?常用的办法,就是为每一个设备分配一个惟一的 ID,至于这个 ID 叫哪些就无所谓了。比如友盟的设备惟一 ID 叫做 UMID,其定义为:新增用户以 UMID 作为惟一设备辨识,UMID 是基于友盟+自己的设备 ID 生产算法,在 APP 的生命周期保持稳定性和唯一性。而 TalkingData 的设备惟一 ID 为 TDID,TDID 是基于 SDK 获取的设备信息以及常量参数并结合 TD 的加密方案生成一台设备的标示,以便持久化来保持设备的唯一性。从里面一段话我们可以发觉,各家都是拥有自己独到的生成算法的。为什么这样呢?答案就是,普通的算法很容易被伪造,只能绞尽脑汁想出不易被破解的算法,才能真正辨识出真实的惟一设备。至于具体的算法,基本都是依赖设备的 MAC 地址,以及其他辅助信息生成的,具体不展开。
4.2用户唯一性
同理,用户倘若不加足够的验证条件,也是很容易被伪造的。因此,就要有针对用户的唯一性判定。我们可以为用户也分配一个惟一 ID,可以叫 uid,uuid,unionId 什么都可以。那么,这个惟一其实是理想状态,根据具体实现不同,我们能做到应用内惟一,业务内惟一,跨业务惟一,全网内惟一等等。网站数据统计中常说的 UV(Unique Visitor)独立访客,就是指这个惟一用户的访问计数。而 PV (Page View)访问量,就是用户每次打开某个页面的计数。那么,要想定义 UV,首先要看你定义的用户,是在哪些范围内的惟一用户,即对你来说,满足什么条件才会称为一个用户。这个条件可以是惟一的手机号,唯一的陌陌 unionId,唯一的设备 ID全自动采集最新行业文章,你自己的系统生成的惟一 ID 等等。关于怎么辨识惟一用户,后面我会单独写文章介绍,本文先说到这儿。
4.3用户行为剖析
用户行为剖析这个概念很大,这里简单介绍几个概念和原理。方便你们理解基本的用户行为剖析是如何实现的。4.3.1 鼠标轨迹上面介绍过键盘风波的记录原理,那么键盘轨迹记录也很简单了,只要测量到键盘联通,就把当前的位置记出来,再择机发送给服务端即可。鼠标轨迹的意义,在于看出用户的苦恼与迷茫,思考过程中手部下意识的联通,和真的挪过去又舍弃点击,都可以在一定程度上,根据键盘位置和间隔及逗留时间推断下来。我们都晓得用户的浏览次序是有统计规律的,所以通常网页的核心信息构架都设计成 F 形。但是用户端没有眼动仪,要想追踪用户的浏览过程是不可能的,除非你黑掉用户的*敏*感*词*。此时,鼠标轨迹的意义就是帮助剖析用户的思索过程,属于用户研究的范畴。鼠标轨迹再结合逗留时间,就成了一副抽象派的艺术作品,用来做艺术创作也是不错的:
4.3.2 关键路径有些时侯,我们除了希望晓得用户在某个页面是如何操作的,还希望晓得用户在整个网站或应用中的操作流程是如何的,具体从那个界面跳到了那个界面,最后在那里转化,在哪里离开的。然后再按照这种数据优化网站或应用的的关键路径,提高转化率。上文提及过单个 tag 的上报原理,那么若想记录路径,就须要记录多个节点或操作。这些操作可能是在一个网站或应用中,也可能跨越了不同的网站和应用。无论哪种方式,都要保证这个数据可以始终传递下去,才有可能记录路径。比如,如果是不同网站之间的传递,可能就须要通过在网址前面附加参数来实现:
具体流程如下:
访问页面 1 时参数为:
?rel_id=page_1
离开页面 1 访问页面 2 时的参数变为:
?rel_id=page_1,page_2
离开页面 2 访问页面 3 时的参数变为:
?rel_id=page_1,page_2,page_3
如果几个页面不是同个系统,你只能掌控落地页,即 PAGE_3,那么链接上带的参数也足够说明用户的访问路径了。如果路径中的页面你都能掌控,那么也可以依据设备惟一 ID 或者 用户惟一 ID 加上访问的时间次序来确定用户操作路径,即服务器领到的访问记录为:
用户访问了 ?rel_id=page_1用户访问了 ?rel_id=page_2用户访问了 ?rel_id=page_3
这种情况下页面 123 中都须要埋入上报代码,每个页面只上报自己的 URL 即可。上报逻辑应尽可能多地上报原始数据,比如可以附加当前页面的逗留时间等,方便日后进行更复杂的数据剖析。4.3.3 转化率路径剖析的目的就是要提升转化率,那么程序逻辑上怎么定义转化率呢?我们先来瞧瞧转化率的定义:在网站分析中,转化率通常的定义是,实现设定目标的次数,与访问次数的比值。
可见,定义的关键在于分母,即达成目标的次数。我们的目标可以是下单、购买、或者抵达某个页面。如果是抵达页面,那么每一步的页面跳转都有一个转化率,剩下的就是蹦失率,或者叫跳出率了。要想提升转化率,不仅要在落地页(Landing Page)上下工夫,关键路径的优化也很重要。因此,在关键路径数据的基础上,单独剖析某个页面的抵达次数,可以估算转化率。或者,如果想通过下单或支付来估算转化率的话,一个简单的办法就是,看用户是否抵达了“下单成功”或者“支付成功”页面,并且上面有合理的依赖路径。当然,最准确的方法还是以实际的订单数据和支付数据为准。
5主流的统计平台及工具
目前互联网上已有诸多成熟的数据统计平台及工具,各家都有自己独到的特性和优势。也有许多公司会考虑自建平台,但不知是否可行,本章将探讨其优劣。
5.1数据剖析平台
目前主流的 APP 或网站统计平台有:GrowingIO、神策数据、MTA、百度统计、谷歌剖析、诸葛IO、友盟等等。具体你们可以去官网了解,这里不做介绍。
5.2行业剖析报告
还有许多行业剖析报告的平台,底层也是通过大数据+AI 分析出更高维度的推论,供你们查看。比如艾瑞咨询的数据报告,相信做互联网的同学们都有自己的百宝箱,这里也不赘言。
5.3自建数据平台的优劣
最后谈谈自建数据平台的优劣。首先,业务数据是敏感数据,接入第三方就要放宽心把数据交给其他平台。而自建平台就没有这个忧愁。其次,第三方平台似乎提供了好多强悍的功能,但未能实现多样化的统计剖析。容易深陷进退两难的窘境。而自建平台灵活性就高好多,但是对人员和资源的要求相对较高。最后,无论是使用第三方平台还是自建平台,都是逗留在工具层面,若想真正得出有价值的推论,需要资深的数据剖析人员来剖析这种数据。就算是 AI 也要有科学的剖析模型做指导,才能根据正确的路线学习进化下去。综上,我觉得假如是起步阶段的公司,建议直接使用成熟的平台,基本可以满足需求。如果是成熟的大公司,建议自建和外部同时使用,一方面可以满足多样化需求,一方面可以借鉴外部工具的优点,取长补短,综合参考。最后,结合上面的知识,我们再回到文初的两个小故事。
No.1神秘的建行按揭额度
故事中学,招商银行之所以打电话给我,定是在“e招贷”页面进行了埋点上报,并标记为关键操作。如果某用户浏览过这个页面,就将其打标为“缺钱,亟需用钱”等。在营销管理系统中,再将这批用户筛选下来,由营销人员逐个打电话推销产品。
No.2数据统计差别的迷思
故事中学,数据的差别是如何形成的?首先,两家平台对用户访问的定义可能不同。本例中百度是统计的用户打开页面算一个访问,而我们自建平台则是定义为有一个设备惟一 ID 进来,算一个访问。这里就形成了差别。此外,如果是点击按键后打开一个新页面,那么这儿有两个动作,一个是点击,一个是步入新页面,这里的统计口径也可能有差别。最后,前面 3.1 小节提及了上报时机的权衡,就是由于上报时侯可能会丢数据。比如用户的网路突然断开,还有网路传输过程的丢包。这也会导致一定的差别。所以,遇到这些情况,只要确定逻辑上没有败笔,并且统计口径一致,是准许一定程度的不一致的。
Q & A网友提问