美团推荐算法实践

互联网的深入发展产生了严重的信息过载,如果不采取一定手段,用户很难从如此多的信息流中找到对自己有价值的信息。解决信息过载:1.搜索,用户有明确的信息需求意图,将意图转换成几个简短的词或词语的组合(query)-提交给搜索引擎-海量信息库检索出与query相关的信息返回;2.推荐,用户意图不明确或很难用清晰的语义表达,甚至用户自己都不清楚需求,需理解用户意图推送个性化结果

一、美团推荐系统框架

从框架角度,推荐系统可分为数据层、触发层、融合过滤层和排序层。数据层包括数据生产和数据存储(利用各种数据处理工具对原始日志进行清洗,处理成格式化的数据,落地到不同类型的存储系统中,供下游算法和模型调用);候选集触发层主要从用户历史行为、实时查询行为、地理位置等角度利用各种触发策略产生推荐候选集;候选集融合过滤层,对触发层的不同候选集进行融合,提高推荐策略的覆盖度与精度,同时从产品、运营的角度确定一些人工规则,过滤掉不符合条件的item;排序层主要利用机器学习模型对融合过滤层筛选出的候选集进行重排序

候选集触发和重排序需要频繁修改,需要支持ABtest,为支持高效率迭代,美团对这两层进行解耦(结果是正交的),因此可分别进行对比试验,不会相互影响。同时在每一层的内部,美团会根据用户将流量分成多份,支持多个策略同时在线对比

二、美团用户行为数据

行为类别

行为详情

主动行为数据

搜索、筛选、点击、收藏、下单、支付、评分

UGC

文字评价、上传图片

负反馈数据

左滑删除、取消收藏、取消订单、退款、负评、低评

用户画像

用户人口属性、美团DNA、品类偏好、消费水平、工作地与居住地

 

1.主动行为数据记录用户在美团平台上不同环节的各种行为,这些行为一方面用于候选集触发算法中的离线计算(主要是浏览、下单),另外这些行为代表的意图强弱不同,因此在训练重排序模型时可针对不同行为设定不同回归目标值,以更细刻画用户行为强弱程度。此外用户对deal的这些行为还可以作为重排序模型的交叉特征,用于模型的离线训练和在线预测

2.负反馈数据反映当前结果可能在某些方面不能满足用户需求,因此在后续候选集触发过程中需要考虑对特定因素进行过滤或者降权,降低负面因素再次出现机率,提高用户体验;同时在重排序的模型训练中,负反馈数据可作为不可多得的负例参与模型训练,这些负例要比那些展示后未点击、未下单的样本显著的多

3.用户画像是刻画用户属性的基础数据,其中有些是直接获取的原始数据,有些是经过挖掘的二次加工数据,这些属性可用于候选集触发过程中对deal进行加权或降权,另外一方面可作为重排序模型中的用户维度特征

4.通过对UGC数据的挖掘可以提取出一些关键词,然后使用这些关键词给deal打标签,用于deal的个性化展示

三、候选集触发过程中的算法

1.协同过滤,需要根据具体业务做一些差异化处理,清除作弊、刷单、代购等噪声数据,合理选取训练数据(时间窗口不宜过长或过短,需经过多次试验确定,同时考虑引入时间衰减),user-based与item-based相结合

2.location-based,移动设备位置是经常发生变化的,不同的地理位置反映不同用户场景,可根据用户实时地理位置、工作地、居住地等地理位置触发相应策略

根据用户的历史消费、历史浏览等,挖掘出某一粒度(如商圈)内的区域消费热单和区域购买热单。当新的线上用户请求到达时,根据用户的几个地理位置对相应地理位置的区域消费热单、区域购买热单进行加权,得到推荐列表,同时也可根据用户出现的地理位置,计算用户相似度

3.query-based,即便是搜索无转换也代表一定的用户意愿,计算每一个用户对不同query的权重,计算每个query下不同deal权重,当用户再次请求时,根据用户对不同query的权重及query下不同deal权重进行加权,取出权重最大的topN推荐

4.实时用户行为,当用户产生下单行为上游的某些行为时,会有相当一部分因为各种原因使行为流没有形成转化。但是这些上游行为是非常重要的先验知识,用户当时没有转化并不代表对当前item不感兴趣。当用户再次到达推荐展位时,可根据用户之前产生的先验行为理解并识别用户真正意图,将符合用户意图的相关deal再次展现,引导用户沿着行为流向下游行进,最终达到下单这个终极目标。目前引入的实时用户行为包括:实时浏览、实时收藏

5.替补策略,虽然有一系列基于用户历史行为的候选集触发算法,但对于部分新用户或者历史行为不太丰富的用户,上述算法触发的候选集太小,因此需要使用一些替补策略进行填充。热销单:在一定时间内销量最多的item,可考虑时间衰减的影响等;好评单:用户产生评价中,评分较高的item;城市单:满足基本的限定条件,在用户的请求城市内的

6.子策略融合,为结合不同触发算法的优点,同时提高候选集的多样性和覆盖率,需要将不同的触发算法融合在一起。常见的融合方法有以下几种:

加权型:最简单的融合方法就是根据经验值对不同算法赋给不同的权重,对各个算法产生的候选集按给定权重进行加权,然后再按照权重排序

分级型:优先采用效果好的算法,当产生的候选集大小不足以满足目标值时,再使用效果次好的算法,依此类推

调制型:不同算法按照不同比例产生一定量的候选集,然后叠加产生最终总的候选集

过滤型:当前算法对前一级算法产生的候选集进行过滤,依此类推,候选集被逐级过滤,最终产生一个小而精的候选集合

目前美团使用调制和分级两种融合方法,不同算法根据历史效果表现给定不同候选集构成比例,同时优先采用效果好的算法触发,如果候选集不够大,再采用效果次之的算法触发,依此类推

四、候选集重排序

对不同算法触发得到的候选集,只是根据算法的历史效果决定触发item的位置有些简单(只能用于第一步的初选过程),最终的排序结果需借助机器学习方法(排序模型),综合多方面因素决定

1.非线性模型:

主要采用非线性树模型additive groves(AG),是个加性模型由很多Grove组成,不同的Grove之间进行bagging得到最后预测结果(减少过拟合影响)

每个Grove内部由多棵树组成,训练时每棵树的拟合目标为真实值与其他树预测结果之和间的残差,当达到给定数目的树时,重新训练的树会替代以前的树,经过多次迭代后达到收敛

2.线性模型:

LR,online learning接入实时数据流,使用Google提出的FTRL方法对模型进行在线更新

主要步骤:1.在线写特征向量到hbase;2.storm解析实时点击日志、实时下单日志,改写Hbase中对应特征向量的标签;3.通过FTRL更新模型权重;4.将新的模型参数应用于线上

五、数据

负例:正例是用户产生点击、下单等转换行为的样本,但没有转换行为的样本不一定是负例,因为很多展现用户根本没看到,常用的方法是skip-above(用户点击的item以上的展现才可能视为负例),上面负例都是隐式的负反馈数据,用户主动删除的item为显式负反馈数据

特征:1.deal-团购单维度特征:deal本身的属性,包括价格、折扣、销量、评分、类别、点击率等;2.user维度特征:包括用户等级、人口属性、客户端类型等;3.user、deal交叉特征:用户对deal的点击、收藏、购买等;4.距离特征:用户的实时地理位置、常去地理位置、工作地、居住地等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章