Fork me on GitHub

58 精准推送实践

转载自 58架构师 公众号
时间: 2019-12-15

引言

在大数据和算法的时代到来后,内容分发已经不仅仅是简单的渠道随意推送,而是精准地识别用户爱好、精准地为用户推荐他所喜爱看的内容,然后将“精准”变得越来越专业,进而牢牢地抓住用户。

在产品运营的概念中,常见的精准推送给划分为以下两种:

1、站内精准推送:包括站内广告、信息流的推荐、商品推荐等

2、站外精准推送:包括广告投放、短信、push

本文只针对站外(主要是push)进行谈论。

精准用户集推送服务衍生自58用户画像体系,根据用户画像数据生成精准目标用户集,并依托于公司内部的推送平台,完成消息、广告推送的全生命周期管理。精准用户集推送功能面向于集团内部运营人员,已于2016年年底上线。

本文将通过用户集服务架构演进精准推送算法优化两个方面,介绍精准推送在58的实践。

用户集服务架构演进

基本功能

用户集服务提供以下功能:

1、支持根据用户画像维度进行与、或、非等逻辑筛选用户集,用于在15分钟内的推送任务;

2、支持筛选过程中实时提示当前人群的预估人数;

3、支持对全量人群或筛选人群的进行画像维度统计和可视化数据展示。

架构原型

用户集服务基于用户画像数据作为数据源,其中用户画像的设计本文不再赘述,可参考《58用户画像实践》,目前已支持亿级用户的2000多个画像标签维度的用户集筛选。

整个架构根据功能拆分为三个服务:

1、优先处理推送用户集的人群筛选服务,提供同步调用服务;

2、人群分析服务优先级较低,耗时较大,提供异步调用服务;

3、人数预估服务提供人群筛选过程中实时显示预估人数的服务,区别于人群筛选服务和人群分析服务,为保证实时响应,采用了样本用户集预估计算而非全量用户集。

用户集服务底层存储前身基于MongoDB,后因计算效率等原因采用新的存储结构Bitmap取代了MongoDB。Bitmap采用全内存存储,存储和运算逻辑由C/C++代码实现。原理是将所有标签展开为具体项,每个用户所拥有的每个构成一个比特位,所有用户的构成一个超长数组,所有标签构成了数组list,包含了每一个用户该标签的拥有情况(有就是1,没有则是0),这样所有用户及其标签构成了一张巨大的二维稀疏矩阵;用户筛选过程就是对矩阵的扫描、‘与或非’操作,最终得到满足条件的结果用户。

为保证系统的可用性,将底层存储横向扩展为多实例部署和前置负载均衡,解决单点故障问题。同时由数据的更新是离线过程,耗时较长,使用单实例双副本(active-stanby)的方式提供更新时业务的一致性。

架构演进

随着用户数量和画像标签增长,原生的Bitmap存储容量也呈线性增长,在保证响应速度的前提下,我们考虑针对Bitmap存储的数据结构进行优化,经过几种方案的对比,我们最终采用了开源的RoaringBitmap实现Bitmap的存储和运算。其原理可简单描述为:使用Array和Bitmap两种容器来存储Bitmap的数据。

可证明:4K以内的数据量采用Array容器的存储空间优于Bitmap。对比我们较为稀疏的业务场景,可将内存大量压缩,同时也可保证逻辑运算的高效。

**

**

**
**

精准推送算法优化

应用背景

结合各个业务线的用户需求,结合用户的特征行为,融合多种机器学习算法,对每位目标用户进行实时精准推送。

机制设计

58用户画像推送系统针对来自不同业务线、不同目标用户群及不同目的的需求,为每一次推送实现“定制化”的服务。

例如从业务角度来看,是否推送一位用户,可以由于以下原因:

  • 对于全职招聘中的用户关注那些发布者对我感兴趣

  • 浏览二手车的用户可能会在天冷的时候更加有买车的欲望

  • 浏览新车的活跃用户对汽车的前沿资讯更加在意

它们在用户画像中分别表现为如下数据中:

  • 哪些企业或者雇主浏览过用户的信息

  • 二手车浏览用户增加、买卖双方通话量增加、IM微聊的信息增加、App使用频率变高

  • 浏览新车页面的用户行为与汽车新闻的浏览行为高度相关

对于一个精准推送的需求,往往除了需要把完整的业务逻辑清晰地转化在数据的表征上,同时还需要可能通过机器去挖掘专家经验系统之外的数据表征,看其与目标用户是否存在某在潜在关系,通常会从很多方面入手,例如:

  1. 个人基础属性:年龄、性别、收入水平、兴趣爱好

  2. 行为特征:浏览偏好、活跃程度、通话频率、微聊使用频率、活跃帖子类目

  3. 网络属性:好友圈、常驻位置等

根据众多维度的数据表征的情况,对目标数据进行深度数据挖掘,获取精准推送用户明细。

由于需要考虑专家经验系统以外相关的数据表征,因此实际上用到的数据可能多至数千维,数据源融合自多个业务线及多个子公司,用户表征各不相同、数据稀疏、倾斜度高。

为了确保模型的可靠和稳定,在进行特征工程之前,需要初步筛选出较高信息量的数据维度,同时获取带有标注的用户集合。然后分别使用数理统计方法对特征变量进行进一步的增减,例如各种相关性计算,显著性检验等。随后,在剩余的特征中利用画像的基础模型对特征进行补足,例如图中的年龄、性别、收入等信息都与用户的租房偏好、应聘偏好直接相关。随后通过数据的预处理,使用可用特征,根据业务逻辑及多维周期维度构造衍生变脸,然后利用特征工程对数据进行进入模型前的最后处理,例如行为特征与文本特征融合后的处理,连续变量在某一个特定区间段内的离散化等,最后模型进入分类器判别目标用户。

当模型的预测效果在现在使用后,模型会根据每一次线上转化的评估结果进行迭代自优化,逐步提升模型效果。

多维融合

精准推送的三个特性主要表现在三个方面场景化、本地化和实时化。

场景化:

用户、终端以及时间空间同时构成了推送的精准场景,在如今移动互联时代,用户已经不是生活在曾经一人一机的年代里,而是同时使用pc机的web端,浏览器m端,app端等,数据可能分别来自是同城、赶集、转转、到家等,这时我们需要同时把用户在同一场景下来自不同数据源通过IDMapping汇总,把每一个用户的行为特征、个人属性、偏好喜爱都尽可能刻画的更加完整,在充分了解用户的位置信息、需求意图以及行为轨迹后,推送系统能在最合适的时间、最合适的地点触发精准推送,提升用户的使用体验的同时也尽可能让用户的需求更加简单的得以满足。

与此同时,推送系统还会调用其他数据挖掘模型为用户避免一些潜在的风险,例如在招聘推送中,会根据职位行情为用户判断薪资是否在一个合理的区间内,过滤薪资太低或者虚高的信息,以免用户吃亏或者上当受骗,同时也杜绝一些冒名招聘、涉黄等违法信息;在租房相关推送中,根据发帖者身份、房屋情况、帖子内等,推送时避免经纪人冒充个人租房帖,含有发帖者不安全的联系方式(非平台渠道)帖,违规房源(例如安置房等)帖,以及具有欺诈风险的帖子。通过多场景、多维度的模型融合,尽一切可能为用户保驾护航。

本地化:

电商是需要将来自五湖四海的商品带给各个城市的人,打消地理区域障碍,而58是一家本地化生活服务平台,力求为本地的供给方与需求方提供生活便利,提供及时精准的双方信息,在一些特定的场景下(如租房、招聘),只有推送对应位置的内容才能为所推送的信息提供有效的保障。

实时化:

以租房场景为例,通过移动设备提供的位置信息,我们可以推算出用户的工作地、居住地、路途耗时等,从而得知用户期望的租房价位、工作距离、活动半径等,当用户产生了租房需求的时候,为用户及时推送智能识别出的最优方案。

未来展望

现有的画像推送系统结合了传统的机器学习模型、时间序列分析模型、以及一些深度学习的网络结构(CNN,RNN,CRNN,胶囊网络,BiLSTM-CRF等)所训练出来的标签。

而如今我们正在借鉴一些广告推送的思路,例如Audience Selection Model,Bidding Strategy以及DQN与OpenAI在对抗中的强化学习的一些想法,力求能够为用户提供更好的实时推送服务。


总结

精准推送目前已服务于58各业务线的日常推送和活动运营中。作为用户画像的一种应用场景,解决了千人千面的差异化推送需求,从技术上助力了58的用户增长。


本文地址:https://www.6aiq.com/article/1550291298573
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出