饿了么推荐算法演进及在线学习实践


饿了么推荐算法演进及在线学习实践

文章插图
 
本次分享的主要内容包括以下三个方面:首先是介绍推荐业务背景,包括推荐产品形态及算法优化目标;然后是算法的演进路线;最后重点介绍在线学习是如何在饿了么推荐领域实践的 。
 
一、 推荐业务背景
 
1.1 推荐产品形态
饿了么推荐算法演进及在线学习实践

文章插图
 
大部分人都熟悉饿了么App,甚至通过饿了么app点过外卖 。上图中着重圈出的内容就涉及推荐排序,其中首页推荐、类目、搜索构成了整个饿了么流量的入口,通过这些入口覆盖了全网90%以上的订单 。
饿了么推荐算法演进及在线学习实践

文章插图
 
目前饿了么每天的订单量达到千万级别,属于国内Top级,这就意味着流量分发的效率尤为关键,因为它涉及用户体验、商户利益、平台价值,而算法就在该领域发挥着重要的价值 。
 
1.2 算法优化目标在外卖领域有4个重要环节:流量、供给、转化和履约,其中算法在履约环节起着关键的作用 。
在不同的业务阶段想要实现的目标也是不一样的 。业务成长初期,优化app的点击率、转化率,当用户点击之后想促成成交;随后考虑平台收益就会关注客单价、单均价等;以及后期的满意度等抽象指标,需要将这些大目标拆解为小目标,分别建立不同的算法子模型进行优化 。
饿了么推荐算法演进及在线学习实践

文章插图
 
【饿了么推荐算法演进及在线学习实践】二、 算法演进路线
 
从2016年至今,饿了么主要经历了数据、特征、模型、业务理解4个方面的升级 。
饿了么推荐算法演进及在线学习实践

文章插图
 
2.1 数据&特征升级数据及特征方面进行了4个方面的升级:
饿了么推荐算法演进及在线学习实践

文章插图
 
1) 生产方面:将离线数据升级为实时数据;
引入Flume、Kafka等实时体系,通过模型打分将业务端实时生成的业务日志输出到日志服务器,构建样本时就不需要离线拼接样本特征及标签而是在线生成特征,进而保证特征的质量,避免了特征穿越、特征不准等问题 。
2) 时效方面:数据采集从天级别升级为实时,且增加了多维度实时特征;
3) 规模方面:不仅引入大规模的稀疏特征,而且将item、user、query等业务流程中涉及的环节通过word2Vector等实现了向量表达 。
4) 监控方面:在特征覆盖及波动、异常值检测、埋点问题等方面进行了实时监控 。
 
2.2 模型升级
饿了么推荐算法演进及在线学习实践

文章插图
 
最初通过人工规则提取特征,基于人工经验敲定采用的因子及权重,线上进行A/B Test实验 。当线上效果不太满意时,再次修改因子或权重,这样不仅浪费了时间,而且浪费了很大的流量 。
16年上线了简单的LR线性模型,通过机器学习的方法获得各因子权重,与此同时引入用户维度信息,这一阶段形成了个性推荐的雏形 。相对于人工规则,点击率、转化率提升了10% 。
16年底采用了非线性模型,包括GBDT树模型、FM等,相对于线性模型,在特征交叉表达方面效果提升明显 。16年底我们上线了第一版本XGBoost点击率预估,随后基于业务的理解将其拆分为点击率、转化率2个子模型,并引入用户、商户的实时反馈特征,如用户点击某个餐厅、餐厅近一个小时或者一天的情况,效果提升7%-8% 。可见用户维度信息增多了,特征维度丰富了,模型结构复杂了,真正做到了千人千面个性化推荐 。
从17年饿了么开始在推荐领域尝试使用深度学习及在线学习 。目前在线学习已应用在饿了么的很多业务场景 。
下面简单介绍Wide&Deep、DeepFM两个深度学习模型是如何应用在饿了么推荐排序领域 。
(一)Wide&Deep
饿了么推荐算法演进及在线学习实践

文章插图
 
初始阶段参照google发表的论文,复用GBDT模型使用的特征,将用户稀疏特征、商户稀疏特征输入线性部分,在没有引入更多特征的前提下,相对于base版本效果没有特别大的突破 。
随后将用户稠密特征等加入Deep部分,将GBDT的叶子节点通过One-Hot或者重新编码的方式加入Wide部分,效果有了较大的提升 。


推荐阅读