QQ浏览器app应用专区推荐系统

1、背景

在互联网信息爆炸式增长的当今,通过传统人工筛选运营方式提供服务时代已然过去,能通过用户历史行为精准推荐用户感兴趣内容成为必然趋势,主流个性化推荐系统流程包括用户行为采集、分类提取、离线用户建模、在线用户模型预测等。结合目前手机QQ浏览器软件应用App分发业务发展需求,历时半年多时间,从无到有搭建一套个性化推荐系统支撑专区App分发业务。

2、业务整体Review

目前推荐场景覆盖包括专区首页猜你喜欢模块推荐,打底推荐与QB内垂直搜索,对应效果如下图红框标识:
这里写图片描述

进过半年的优化打磨,关键阶段效果提升汇总如下:
这里写图片描述

3、整体框架

在输出整体架构图前,先回归最初产品个性化推荐需求,技术方案选型最终都要服务于需求

【个性化推荐需求】

根据活跃用户的长期兴趣推荐用户最感兴趣的AppList,效果评价指标是推荐App的CTR

【技术方案选型】

工程Part

在线模块:分粗排阶段和精排阶段

1、粗排阶段根据用户长期兴趣画像召回相关度较高的Item,同时减轻精排阶段压力;

2、精排阶段则根据粗排召回的ItemList,通过离线训练好的排序模型预测CTR,最终下发TopN ItemList作为推荐结果;

离线模块:

1、用户长期兴趣:负责在线粗排召回,通过离线累计用户消费行为,映射成兴趣体系,最终积累成用户长期兴趣画像,最终将画像导入在线系统;

2、排序模型:负责在线精排阶段排序模型的训练,训练阶段需要用户消费日志,同时收集用户特征和Item特征,最终整合成训练样本集,通过Spark等分布式计算框架训练模型并导入在线系统;

算法Part

粗排召回:粗排的召回效果直接影响推荐的效果,不过项目初期的方案不太适合制定太复杂的策略,初期我们先敲定一个热度计算公式对备选Item进行全排序:HOT(x) = LOG(下载量(x)) + 评分(x) * 0.2,最后根据Item分类构建待召回反向索引结构

精排模型:产品制定推荐效果评价指标是App按天CTR,即排序模型是pCTR模型,结合业界成熟方案以及团队技术积累准备度,选用LR作为pCTR模型

【整体架构图】

这里写图片描述

1、将用户在专区预推荐位的Item曝光和点击行为上报到离线集群

2、用户实时拉取推荐结果,粗排备选池会预先Ready(对应架构图中的备选优化,策略参考上面算法Part的粗排召回),通过用户关联历史兴趣画像,根据画像获取关联度Top的ItemList,同时进行列表退避;然后用召回ItemList关联Item特征,用户关联用户特征,部分特征需要走特征工程处理,加载离线训练好的LR模型,预测每一个Item的pCTR,进行排序;产品策略会在兼顾用户体验维度对下发列表进行干预,比如多样性,游戏App占比等;最终下发排序结果列表

3&4、将用户交互行为与推荐结果等数据导入离线计算集群:1)根据按天用户行为计算按天兴趣画像,同时和历史画像进行合并构成用户兴趣长期画像;2)用用户对Item点击或曝光作为样本原,与Item特征、用户特征关联形成训练样本集,通过Spark API训练得到稳定的LR模型

5、按天将用户累计长期兴趣画像和LR模型结果导出到HDFS路径

6、用户兴趣画像定期刷入在线Cache

7、将LR模型按天导入在线DB,在线服务定时加载LR模型以及查询用户长期兴趣画像

4、优化小结

将个性化推荐系统Pipeline搭建上线后,目光就转移到推荐效果的优化,优化主要分三部分:

1)LR模型特征优化,主要包括常用特征工程方法以及引入新的业务特征;

2)LR训练工具Spark API训练性能提升加学习率曲线绘制;

3)粗排召回阶段引入基于Item的协同过滤;

【特征优化】

1、特征工程

在当前项目中,我们主要采用的特征工程方案包括:

这里写图片描述

离散枚举:性别(男性1,女性2,未知3),单维特征扩展成三维,一条样本仅设置一维

连续等距:比如用户年龄,可观察在如下样本中用户年龄的分布图(x坐标表示年龄,y坐标表示对应用户群累计占比),14-46岁间隔用户群分布均匀(且为相对有效年龄),且占整体用户群99%以上,这类特征可以对样本进行等值切分,间隔可根据模型效果调整

这里写图片描述

归一化LOG:比如App下载量,如下是样本中App对应的下载量分布图(x坐标表示下载量,y坐标表示对应用户群累计占比),对比年龄分布图,App群50%占比以上比较均匀,但是前50%跨度较大,此时我们使用的方案是对整体下载量求LOG,然后再进行等值One-Hot
这里写图片描述

2、引入新特征
这里写图片描述
项目初期使用的特征包括如下脑图中的蓝色与绿色特征,训练的样本量是按周,采样的正负比例是1:5,最终的AUC是0.6890;

在专注特征优化阶段,主要的方向是引入更多的特征,通过梳理,将脑图中的标黄和标灰特征纳入到引入阶段。在具体引入优先级的排期中,需要权衡特征收集的复杂度、特征的覆盖度等因素,最终在优化阶段确定引入脑图中的标黄特征,结果AUC提升到0.7592

这里写图片描述

【Spark API 训练优化】

详见文章Spark MLlib LR 实战笔记

【协同过滤】

分类粗排召回策略的优势是对主打用户长期兴趣方向定向,缺点是很难引入Item相关度较高但并非同类的Item,也就是较难发现用户隐含兴趣;协同过滤的目标就是对分类粗排召回策略缺点的一种补充。

常用的协同过滤Based-Memory包括User-Based与Item-Based,对标两种模型有如下对比:
这里写图片描述

通过调研目前项目的推荐场景优选Item-Based,接入流程上,回到整体架构图,采用离线训练Item-Item相似度矩阵并离线根据用户历史安装App进行预测,最终刷入在线Cache,供在线服务在召回流程查询协同过滤推荐结果,进而统一精排下发

5、项目展望

1、LR模型引入更多新特征 以及 特征工程更多的尝试,可参考参考文献[5]

2、pCTR预测模型尝试GBDT + LR

3、App分类互斥策略

感谢过程中Carbonzhang & Meifangli 的大力支持

参考文献

[1]《practical lessons from predicting clicks on ads at facebook》
https://pdfs.semanticscholar.org/daf9/ed5dc6c6bad5367d7fd8561527da30e9b8dd.pdf

[2]《Spark MLlib 机器学习算法、源码及实战详解》

[3]《Spark 技术内幕》

[4]《机器学习实战》

[5] 特征工程 http://km.oa.com/group/22605/articles/show/295781