暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用户画像系列——布隆过滤器在策略引擎中的应用

496

用户画像系列—当我们聊用户画像,我们在聊什么?

介绍了用户画像的应用场景:

(1)个性化推荐

通过用户标签给用户推荐合适的商品或者内容

(2)营销圈选

参考:用户画像系列——Lookalike在营销圈选扩量中的应用

(3)策略引擎

根据用户标签命中不同的策略,比如说:高消费人员有奢侈品入口通道

(4)算法模型

(5)画像报告

背景:

这篇文章分享的是用户画像在策略引擎中的应用。首先来了解下策略引擎是干什么的?

比如:当某个用户第一次进入某个平台,会给你弹窗有什么优惠,新用户优惠券等等;或者某个用户消费金额极高,达到一个阈值,认为该用户有极大的消费能力,可以开放奢侈品入口,即:淘宝上的奢侈品频道是根据之前有消费过奢侈品、且高价值的用户才开放的。

上述是一个简单的策略引擎,通过进行判断当前进入的用户是否满足某个或者多个条件然后进行相应的营销策略


问题和思路:

当引擎策略(或者称之为规则)过于复杂,同时还会经常对规则进行变更,那么是否有一个更加简单的方法来处理呢?即是这篇文章要要分享的通过人群圈选功能,圈出目标用户,定义为人群包,然后当前用户进行平台判断该用户是否在这个人群包里面,因为是线上服务,要求进行用户去查询人群包匹配是否存在的过程需要在毫秒内返回结果

通过上述方案,只需要修改圈选条件,就能够非常简单的解决,策略条件过于复杂以及经常调整的问题。


线上实际应用以及遇到的问题:

因为要求线上用户访问去人群包进行匹配的过程,需要在毫秒级进行返回,因此需要对于人群包数据进行存储,考虑采用redis 进行存储。

redis数据结构如下:

key:人群包id key_1,value:圈选出来的用户列表[userId_1,userId_2,userId_3等等]

    SADD key_1 userId_1 userId_2 userId_3 添加用户id到人群包key_1中
    SISMEMBER key_id userId_3 判断userId_3在不在人群包key_1中

    但是随着人群包越来越多,需要的存储也越来越多,通常一个人群包里面的用户少则几万多则上千万甚至亿级。


    优化方案:

    通过使用redis 的布隆过滤器

      bf.madd key_1 userId_1 userId_2 userId_3 //添加用户到人群包中
      bf.exists key_1 userId_3 //判断用户是否在人群包中

      假如一个用户id大小为1b,一个亿的用户为一个人群包,这样的人群包线上有2000个,使用set 存储需要200GB,而使用布隆过滤器只需要10G不到,这远远小于使用哈希表的空间。

      由于布隆过滤器存储空间小,并且节省空间,不存储数据本身,仅存储hash结果取模运算后的位标记。



      布隆过滤器详细原理参考:

      https://blog.csdn.net/belongtocode/article/details/103985737

      https://blog.csdn.net/wuhuayangs/article/details/121830094


      你好,我是诸葛子房,前京东、BAT 程序员,Apache Griffin Contributor,在大数据领域有多年实践经验,喜欢在工作之余写一些文章总结。

      文章转载自诸葛子房的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论