作者:闲鱼技术-楚丰
背景
在互联网产品中,用户行为分析,通常是指通过统计、分析用户在产品上的各种行为事件,挖掘、发现出有用的信息,为产品的设计,运营策略提供有意义的依据。
通常,用户行为分析包含以下流程:
- 数据埋点
- 数据采集
- 数据清洗
- 数据展现
在闲鱼中,我们有海量用户埋点数据,这些数据信息量丰富,但是却很少有效地利用起来:
- 利用率低:埋点数据量大并且非常杂乱,通常都只是某个特定场景下,会统计某些特定埋点数据
- 数据太“原始”:通常埋点都是某个页面曝光、某个点击事件等等,这些事件维度“低”,单用这些埋点不能表达某些“高纬”的事件,比如“点击搜索框->输入文字->进入搜索结果页->点击搜索结果”为一次完整搜索商品行为。
那么针对这些原始埋点,我们是否能够通过算法处理,抽象出更高纬的用户行为数据,并且利用这些数据,挖掘出有用的信息呢?
本文我们将分享闲鱼在用户行为分析中,利用“序列模式挖掘”所做的的一些尝试和应用。
1.什么是“用户行为”
一般我们将用户行为定义为:由一系列的行为事件所串联成的序列。这个定义在不同的“粒度”上有不同的解释,比如粗粒度上来看,“搜索商品”->"聊天“->“下单”为一个用户行为,其中“搜索商品”是一个行为事件。
但是从细粒度上来看,“搜索商品”包含了多个更小的事件,比如“点击搜索框->输入文本->点击搜索按钮->查看搜索结果”等,从细粒度上这几个事件同样可以定义为行为事件,此时“搜索商品”就变成了一个用户行为。
因此,分析用户行为,要先看我们从哪个维度上进行分析。
在这篇文章,我们将行为事件定义为“页面跳转”和“按钮点击”两类事件,而用户行为则是“多个行为事件”根据时间顺序串联起来的序列。
对应到到数据形式上,每一个“页面跳转”都对应一个埋点,每一个“按钮点击”也都对应一个埋点,
因此,用户行为分析,实际上也就变成了:埋点序列分析。
2.什么是“序列模式挖掘”
序列模式挖掘,是数据挖掘里关联分析算法的一种,用直白的话来理解,就是:
从大量的序列数据中,挖掘出频繁出现的“子序列”。
以我们埋点数据为例,用户产生的埋点数据,根据时间排列可以得到一串埋点序列(上图中埋点1到埋点7), 而序列模式挖掘的作用,就是可以从大量用户的埋点序列中,找到其中隐藏着的模式:
埋点2->埋点4->埋点7(即大量用户都出现了“埋点2->埋点4->埋点7”这种行为模式,中间可能有其它埋点)。
利用序列模式挖掘,我们可以从用户埋点数据中,发现一些可能有价值的用户行为模式。
3.如何应用
3.1 发现未知行为
利用序列模式挖掘,可以“归纳”和“总结”人群的行为共性,那么如果我们先根据行为数据对人群进行无监督聚类,然后再对聚类出的人群进行行为序列模式挖掘,就可以“归纳”出该人群的“行为特点”。
行为聚类的流程大致如下,有兴趣的朋友可以查阅相关资料,这里不再展开:
这里无监督聚类可以根据人群内在的行为特性,得到不同人群。因为没有事先进行行为定义,因此可以发现一些以前未知的人群,但是同时也产生了一个弊端,就是聚类结果可解释性差,聚类出的人群为什么被聚到一起不得而知。
而行为序列挖掘恰恰可以“解释”一个人群的公共行为序列,因此结合聚类和序列模式挖掘,既可以发现不同的人群,又可以解释这些人群被分类的“原因”。
案例:发现未知黑产人群
用上述方案,我们对闲鱼的用户埋点进行分析,发现聚类出的人群里,有一个人群的行为序列是:
“商品搜索结果页->打开某个商品->点击聊天->发送文件->返回商品搜索结果页->打开某个商品->点击聊天->发送文件”
抽样查看这群人发送的文件发现,全部都是广告视频,也就是说,这些都是黑产账号,不断的在发送广告视频给别的用户,而这些黑产行为,是我们原先“未知”的(不需要提前知道这种行为的存在)。
这种方式相比原来的“补漏”型黑产防控有以下优势:
- 没有经验预设,可以快速从数据中发现新型的黑产行为模式,而不必等到大面积用户反馈以后做补漏。
- 算法抽象出来的行为模式相比人工“总结”会更加准确。(原来的防控大多数是根据用户反馈,然后人工观察这些人的行为,并用规则去识别匹配这些行为)
3.2 发现更多同类人群
假设我们已有一个特定人群样本(比如一批黑产账号),那么如何通过这批小样本,去找到更大的一批同类样本呢?
我们可以通过序列模式挖掘,挖掘出这些人群行为的序列模式,然后再用这些序列模式匹配所有人群,这样就可以得到一个更大范围的,满足这个行为模式的人群。
案例:发现更多骚扰用户的黑产账号
在闲鱼中,针对黑产的防控,有很多已有的成熟方案,这些方案会输出很多黑产人群。
其中一个人群,是将广告放在个人简介里,然后头像换成带有“看我简介”文字的图片,最后不断发送表情给别的用户,吸引用户去看简介里的广告。
这个人群是根据原来的策略产出的,平均每天能够发现大约 1800 个左右的黑产账号。
我们利用上述方案,挖掘这个人群的公共行为:
“搜索商品-点击商品-发起聊天-发送消息-点击个人主页-关注用户”
通过这个行为模式,我们再去匹配了所有用户,得到了更大的一个人群。这些人群经过验证,都是黑产账号。
经过交叉比对和人工验证,用行为模式匹配的方式:
- 比原来的策略多产生了 57% 的黑产账号。
- 产出的黑产账号准确率达到 99%
3.3 提供新的数据视角
通过挖掘所有用户的公共行为序列,我们可以得到一个行为序列表,有了这个表,我们就可以通过统计每个用户发生这些行为数据的次数,得到一份全新的数据,即“用户行为次数表”。这样,我们可以从不同行为的次数这个视角上,挖掘更多信息。
(挖掘出的行为表,因为行为组合的多样性,所以会有很多实际意义上重复的行为序列,可以用 PCA 主成分分析法来过滤掉重复的行为序列)
比如,可以比对不同用户群,在这些行为次数上的差异(一个id为一个行为序列,如 4633):
当然,这种这样的数据还需要进一步挖掘才能得到实际可利用的信息,针对不同业务和问题,也有不同的利用方式,这里我们也还只是一个思路,我们也在继续尝试,希望能从这个新的数据视角挖掘到对业务有用的信息。
4. 更多应用
当然,上述只是分享了我们利用序列模式挖掘在用户行为分析上的尝试,除了 这些方法,还有更多可以应用的场景。
比如除了上述这些较大粒度的用户行为分析,序列模式挖掘还可以用在更小粒度的场景上。比如分析单个页面内,用户行为是否有一些特定的模式(此时的行为可以定义为更细致的操作,如点击、滑动,长按等),从而进一步帮助优化用户体验,发现异常等。
对于用户行为分析和序列模式挖掘,本文的案例只是冰山一角,希望这里能够起到抛砖引玉的作用。