基于无埋点技术的用户行为分析

埋点

用户行为分析从狭义来看是用户的行为数据分析,但是广义来说这一个词包含用户分析,用户行为的结果分析,用户的行为分析。用户行为的结果和用户的行为分析是不一样的,一个是结果,一个是过程。现在国内市场上关于用户行为分析的产品分为基于前台数据的用户行为分析和基于后台数据的用户行为分析。基于前台技术的用户行为分析侧重于用户的行为分析,而基于后台技术的用户行为分析侧重于用户行为的结果分析。这两类产品可以说是有一定的片面性,完成的只是用户行为分析的一部分。基于这个现状来谈谈全面的用户行为分析应该怎么做。这篇文章主要会从数据来源和数据收集方式两个角度来说。

一 用户行为数据来源

数据是用户行为分析的大前提,一切的分析都始于数据,巧妇难为无米之炊。用户行为的数据来源有前台点击数据和后台业务数据。仅仅使用后台的业务数据,会导致前台用户行为缺失,这样和仅仅通过数据库做传统地统计实现的效果差不多。假设有两种路径能够下单(用字母D表示),A-B-C-E-D和A-B-F-D。那么仅仅通过后台数据我们知道一个客户下单了,下单金额是多少,那么如果我们想知道哪种路径引导才能让客户更容易下单呢?

仅仅使用前台数据,还是上面那个例子,虽然能够识别出用户是来自A-B-F-D下单的,但是要想分析这个路径带来的用户有多大价值,在之后这个用户有没有回来,他之后有在我们产品消费了多少,像这种复杂的分析,依赖前台数据也是做不到的。

如果想分析用户结果是依靠什么行为产生的,以此来优化产品和业务来反向获得更好的结果,相反的想要根据用户行为来衡量行为模式的效果, 就需要将前后台数据打通进行关联分析。举个例子,订单金额大于1万的高净值客户行为以及其转化率这个指标就必须通过前台数据和后台数据相结合的方式。

怎么把来自前台和后台的用户数据关联起来?这是需要解决的问题。

二 用户行为数据收集技术

用户行为数据收集技术主要有两种:埋点和无埋点。先来科普先这两种技术方式,以及说明下应该怎么选择。

埋点

所谓埋点就是为了数据分析的需求在原本的复杂的代码逻辑之上在加上N行获取数据的代码。比如如果想获取某商品的点击数量,就得在点击事件的中搜集点击的商品数据,发出包含商品名称和点击事件的数据({productname,clicktime})。

埋点的优势:

1)埋点最大的优势就是数据都是手动编码产生的,灵活性比较大,可以更好得支持一些扩展数据。

2)埋点由于是按照埋点逻辑进行的预处理,所以对之后的分析友好,分析效果也比较好。

埋点的劣势:

1)埋点最重要的前提条件是必须十分清楚目标,即需要收集什么样的数据必须提前确定。所以埋点最容易出现的问题就是漏埋,一般来说在发布前一定要经过谨慎的校验和测试,因为一旦版本发布出去而数据采集出了问题。

2)在产品的迭代过程中,如果代码再迭代的时候忽略了埋点逻辑的更改,从而导致后续的分析逻辑不准,甚至导致产品bug。更甚于对于产品迭代比较快的场景,埋点就是一个定时炸弹。

无埋点

埋点技术和无埋点技术都需要在原有的业务代码上进行改动。无埋点就是通过编程语言自身的特点来完成数据收集的自动化过程。比如前台无埋点其实就是通过监听JS事件,把页面上发生的所有事件都采集下来。后台无埋点实现比较复杂,但是说起来很简单,其实就是将网络数据进行旁路反解析,前后端交互的数据肯定都会经过网络,所以网络中应该包含了绝大多数业务数据。

无埋点的优势:

1) 相对于埋点方式带来的收益就是正好就是埋点容易产生的问题,由于采集的是全量数据,所以产品迭代过程中是不需要关注埋点逻辑的,也不会出现漏埋、误埋等现象。

2)无埋点方式因为收集的是全量数据,可以大大减少运营和产品的试错成本,试错的可能性高了,可以带来更多启发性的信息。

3)最后一点,也是最清楚的一点,就是减少了因为人员流动带来的沟通成本。

无埋点的缺陷,也是无埋点存在的一些质疑点:

1)适用大部门,通用的场景,有少部分需要埋点的场景覆盖不了。

2)无埋点采集全量数据,给数据传输和服务器增加压力

根据前面关于埋点和无埋点的科普,我们都明白其实两个方式都有其自身的优势和缺陷,知乎和其他技术博客上关于这两个讨论点的文章也有很多,有人在批埋点,有人在批无埋点。关于技术,我们还是理性看待吧,它们两个不是你死我活的关系,通过我们调研的得到的情况是,目前没有方案能够完美解决无埋点问题,但是我们致力于研究最大限度通过通用方式解决埋点问题,尽量减少埋点代码,埋点代码越少,出错的可能性就越低。我们选择使用前台无埋点和后台无埋点技术相结合的方式来获取用户数据。

三 如何利用无埋点打通前后台数据

当前的分析手段,都需要进行大量埋点以及关联才能做到前台和后台数据打通,有没有可能通过无埋点将前后台数据自动关联打通?

前台无埋点弊端

前端无埋点针对数据分析比较简单需求是很合适的,如果是仅仅分析页面跳转,转化率、或者控件点击等行为,前端无埋点完全能够胜任。但是如果要做细粒度的分析,仅仅靠前端无埋点可能存在困难,最关键的原因就是前台采集技术再先进也还是有些数据难以采集到,比如客户的下单金额等数据,这些数据很多都是以html形式传到前台,在不同的技术实现中,前台所展示的金额数据可能仅仅是展示数据,并不会再传至后台。所以导致如果想要做一些按照客单价分群的行为,就很难仅仅依靠前端无埋点技术来实现。

后台无埋点的引入

在典型的前后台交互的程序中,数据最通用的来源,我们发现是wired data。Wired data应该包含了90%以上的细粒度的业务数据,只是这些数据是以不同格式存在于wired data中,这里面的难度就是设计一种数据处理方案,能够通用的将存在于wired data的数据利用起来,这是后台无埋点的实现关键。

前后台数据自动打通

前后台无埋点的关联点就在于cookie,在用户请求中埋入特殊的sessionid和uid。后台的数据采集wired data中如用户信息,通过sessionid和uid关联之后,就可以知道某次下单业务是哪个用户操作的,在页面上有何种行为。我们采用这种方式实现了前后数据的自动关联。