用户画像系统:如何实时计算圈选的人群包大小?

关于用户画像系统,我们分享过很多相关的内容,包括《相似人群的扩展look-alike》、《用户关键特征的提取》、《用户画像系统的应用》等。今天分享一个基础功能的实现:人群包大小的实时计算。

用户画像系统:如何实时计算圈选的人群包大小?

01、项目背景

首先聊聊,人群包的实时计算,到底是咋回事。

之前的《画像应用》中讲过,画像系统的一个重要应用,是通过标签的组合,进行人群圈选,从而获得人群包,进行精准人群触达。而业务人员为了获得一个“满意”的人群包,往往需要进行多次的圈选逻辑调整。如下图:

用户画像系统:如何实时计算圈选的人群包大小?

而人群包的圈选生成,往往是离线的技术过程,如果等人群包圈好了才看到人数大小,用户再进行逻辑调整,无疑效率是极低的。

根据圈选条件,实时反馈人群包的大小,这就是人群包的实时计算。

对了,聪明的小伙伴一定发现了,如果圈选的逻辑很松了,圈出来的人仍然很少咋办?对,那就要用相似人群扩展功能了。具体参考以前的文章《相似人群扩展》,不再赘述。

02、技术实现过程

关于实时计算人群包大小的技术实现过程我们简单分享一下,还是蛮有意思的。

(1)整体架构

首先看一下整体的技术架构:

用户画像系统:如何实时计算圈选的人群包大小?

大家可以看一下上图中两个技术方案的差别。左边是旧版计算方案,计算效率很低,右边是新版计算方案,计算效率基本是秒级返回。

(2)数据的处理加工

看看我们怎么把hive中的明细数据加工成标签数据。下面是原始的数据存储结构:

用户画像系统:如何实时计算圈选的人群包大小?

我们期望的标签数据为:

用户画像系统:如何实时计算圈选的人群包大小?

关键的差别在哪呢?

对,原始的数据存储是按照userID为主键存储的,每条记录是该用户的详细数据情况;而加工转换以后的数据表,是按照标签为主键的,且只有三列:日期、标签、人群包。

为啥要进行这样的转换呢?

因为原始按照用户为主键的存储,数据量是巨大的。一方面用户量比较大,另一方面存储的字段量也大,对存储的挑战是比较大的。而转化之后的表格,按照标签为主键存储,记录数量大大减少。

(3)人群数量的计算

hive中的明细数据加工成标签数据,其存储还是在hive中,不适用于同步接口的使用场景。所以需要将hive中的数据导入到在线olap引擎中,我们选择了gp。

hive → gp 中间需要经过oss转储(为了优化速率),所以最终数据的流向为:hive → oss → gp。

gp中最终的表设计为(只截取部分核心字段):

用户画像系统:如何实时计算圈选的人群包大小?

需要注意的是gp中的tag_audience是bitmap格式存储,为了解决存储以及使用位运算快速做标签的交并差,所以gp中存储的实际数据为:

用户画像系统:如何实时计算圈选的人群包大小?

【1101】代表第1、3、4个用户(从右往左看)都有这个标签,第2个用户没有。【1010】代表第2、4个用户有这个标签,第1、3个用户没有。

实际人群包是一个 2^32 位的bitmap(最大为512M),即一个bitmap可以存储 2^32 = 4294967296 的用户集合。

所以计算不同标签的交并差,就成了计算不同人群包的位运算,这个计算速度是很快的。

以上就完成了人群包实时计算的技术过程。

03、产品化示例

其实关于产品化,可简单可复杂。各给一个案例吧。

(1)京东

以下是京东人数计算的产品化过程:

用户画像系统:如何实时计算圈选的人群包大小?

前序的人群圈选过程是维持现状的。在圈选完之后,提供【人群计算】的按钮,支持用户进行人数的查看。

如果人群量不符合预期,可以继续调整圈选逻辑。

(2)达摩盘

以下是达摩盘的截图:

用户画像系统:如何实时计算圈选的人群包大小?

达摩盘确实是非常成熟的产品了,这里在选择标签的时候,会直接呈现覆盖人数,并给出可触达人数的预估,这个体验是非常好了。

关于画像系统中,实时计算人群包的人数,就分享到这,欢迎继续关注。

业界动态

金三银四如何快速跳槽,实现升值加薪?

2021-3-29 13:27:17

业界动态

MVP:如何绘制产品战略路线图?

2021-3-29 13:40:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索