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