Part1:算法概述
菜品推荐是集成在火小二扫码点餐的一个功能,客户扫码后,算法基于用户的历史行为和当次点菜行为数据,通过智能算法计算,最终为用户推荐适合其口味,喜好,消费能力等的满意的菜单。目前推荐菜单的菜肴的个数为12个。目前上线的有三套算法,分别为a、b、d桶。
A桶为热门排行榜:主要是基于本店的最近1个月的最热点菜的Top12,推荐给用户,个性化比较差,不会根据用户自己的点菜行为进行调整。
B桶是item_cf:是基于物品的协同过滤算法,通过分析用户喜欢的菜的相似菜来为用户推荐适合他的菜肴。
D桶是改进的item_cf:主要是考察用户历史行为和当前点菜信息的融合型算法。
三个算法,从转化率来看,A桶转化率最低平均为2.9%,主要是作为参照桶;B桶次之,平均为3.4%,比A桶高18.1%左右;D桶转化率最高,平均为3.5%,比A桶高19.5%左右。
Part2:算法流程
Item_cf:
ALS2:
Item_cf+Als2:
Part3:online任务说明
Als2:
1198->1286->1259
1198和1286是计算用户对菜品兴趣值得核心任务;
1259是把计算的结果导入到前端mysql表中,*品调用;
Item_cf:
444->(565,447)->440->1285->1290
444是过滤最第价格菜和最高价格菜,以及过滤掉菜品名称不符合条件的菜,如:打包、米饭等;
565计算每个店内每个菜的回头率值,作为加强因子存在;
447计算每两个菜的相似性,作为减弱因子存在;
440综合565和447的结果计算最终每两个菜的相似度分值;
1285是把计算的结果导入到前端mysql表中;
1290是把数据存入到缓存表中,*品调用;
Part4:item_cf算法介绍
线下部分计算物品之间计算两两之间的相似度
(公式1)
wij表示物品i和物品j的相似度,|N(i)nN(j)|表示用户在最近俩月点菜N(i)的时候有点菜N(j)的次数,|N(i)|表示用户最近俩月点菜N(i)的次数。
同时考虑N(i)菜的回头点击率ai,ai的计算方法如下:
(公式2)
其中ai表示最近俩月中用户点菜N(i)的回头率,其中O(i)表示所有订单中出现菜N(i)的个数,O(di)表示所有订单中经过customerregister_id去重后的个数。
接着,我们对wij通过回头率ai进行强化,强化后的wij为:
w’ij=wij(1+ai)(公式3)
线上部分通过用户已经点的菜的集合N(u),来计算和N(u)最相近的K个菜作为菜单推荐给用户:
(公式4)
其中表示puj用户u对物品N(i)的兴趣值,N(u)是用户u当前已经点的菜的集合,
S(i,k)是和物品N(i)最相似的K个物品的集合,wij表示物品i和物品j的相似度,r(ui)是用户u对物品i的相似度。
Part5:基于营养搭配模型菜品重排序:
1)首先根据每个菜品的菜名和荤菜关键词库进行模糊匹配,如果匹配成功则该菜标志为荤菜,否则为素菜。
荤菜关键词库如下:鸡、鸭、鱼、羊、牛、蛙、肠、虾、肝等。
2)对于推荐的菜单的每一个菜,进行荤菜总个数统计,使之大于3小于9。
3)如果不满足上述条件,则重排序菜单,直到满足为止。