前些日子笔者在规划建筑行业B2B电商的商品推荐系统,特意去钻研了商品推荐原理,在此作个总结,也算是对这些日子的一个交代。1 为什么做推荐系统
电商的主要任务就是把商品销售给客户,“销售”这个概念由来已久,线下零售店模式中,客户进店来,要么是向售货员沟通自己想要的商品,要么是自己在店里找商品。而所谓电商无非就是把原本线下的销售搬到了线上来,看起来只是渠道变了,但原本的销售模式在线上却行不通了。相较于线下,线上业务增长的边际成本几可忽略,电商在带来业务规模的同时也带来了更为惨烈的竞争。随着客户数量和商品规格的大幅增加,运营人员的客户咨询工作将愈加吃力,客户往往也没有没耐心在数千种规格的商品中慢慢挑选。如果不能在短时间内促成销售,客户立马就切换到其他网站或其他店铺,如何快速地为客户找到合适的商品便成了电商需要重点攻克的难关。这其实是个人货匹配的问题,线下的匹配模式是“人找货”,商品被固定地陈列在货架上,卖家不关心客户是从哪里来,客户需要什么样的商品,整个销售过程以“货”为中心,商品以被动选择为主,典型的案例就是常见的便利店。 到了线上,为了快速促成交易,就需要研究客户的购买喜好,为客户打上各种各样的标签,通过丰富、灵活的场景引导、吸引客户购买,商品也由被动选择变为了以品圈人、主动曝光,这就是“货找人”模式。比如淘宝首页的猜你喜欢 做推荐系统就是通过“货找人”的模式来解决人货匹配的问题,而淘宝的猜你喜欢就是推荐系统的经典案例。
2 推荐依赖的数据
在建筑行业B2B物资采购中,所有物资采购均为项目采购,其物资需求并非由某一个人的偏好所决定,所以我们的推荐对象就由个人变为了项目,那么这里的客户基本信息就不是账号的资料信息而是这些物资所归属的某个项目的基本信息,比如项目类型、建筑结构、建设状态、所在地区等。项目信息采集的越全面、信息更新的越及时,我们掌握的项目特征就会越准确,也就越能为项目找到合适的商品。通过数据埋点,我们可以采集到大量的客户行为数据,比如搜索的关键词、浏览的商品、浏览时长、浏览次数等。通过这些数据可以构建出客户的物资采购偏好模型:某客户在安全帽商详页浏览了3分钟,与客户在防尘网商详页浏览10秒后就跳出相比,我们认为给该客户推荐安全帽更为合适。(笔者之前在淘宝搜索过大衣,现在淘宝的猜你喜欢满屏都是各色各样的大衣)包括客户的下单数据、加购数据、收藏数据等。如果客户收藏了某个商品,说明对这个商品具有一定的购买倾向,现在没下单的原因可能是因为当前价格不合适需要再观望,可能是规格还需要再确定,不论如何,在保持关注的基础上可能下次就下单了。如果客户将商品加入购物车了,那大概率是会下单的,如果还没有下单或许是因为当前的采购计划暂未将该商品纳入在内,当客户重新制定采购计划后就会完成下单操作。如果客户已经下单了某商品,我们可以推测多久之后客户需要再次采购该商品,届时可以继续向该客户推荐此商品。3 推荐的多路召回
推荐系统的核心是召回和排序,所谓召回就是通过各种不同的策略或模型分别为客户找到一些可能会感兴趣的商品候选池,而不同的召回策略或模型我们称其为“多路召回”。通过订单数据可以统计出销售量特别高或销售频次特别高的商品;通过对商品的点击、浏览、收藏、加入购物车等数据可以统计出客户关注度特别高的商品。这类商品我们定义为是“热门”商品。越热门的商品,表示对其感兴趣的客户越多,那么其被客户采购的几率就越大。对于电商的整体客户而言一定也会存在大量客户对这些商品不感兴趣,但做商品推荐本就是通过不同方式去猜测客户可能会感兴趣的商品,所以只要其可能感兴趣的程度达到一定的覆盖率,就可以将这类商品推荐出去。客户对商品的偏好程度往往也经常跟客户自身的属性挂钩,在C端可以体现为性别、年龄、地域等。在笔者所在行业,客户就是项目,其自身属性体现为项目类型、建筑结构、建筑类型、所属地区、项目阶段等。我们可以根据这些固有属性构建客户兴趣模型,通过模型一方面可以为客户人为配置推荐商品,另一方面也可以跟业务数据结合后自动推荐商品,如下表:以建筑类型和建筑结构为例,可以沉淀出不同建筑结构和建筑类型的项目采购的商品池,以此商品池为基础数据为其他项目推荐商品。当然初始的时候推荐结果可能不太理想,但只要对项目维护的指标越丰富、准确和及时,随着订单数据增多,其兴趣模型将越来越成熟和完善,届时其推荐效果将大大提高。协同过滤可以理解为利用某兴趣相投、拥有共同经验之群体的喜好来推荐客户感兴趣的信息,总结出来就是:物以类聚、人以群分(1)人以群分:我和别人具有一定的相似性,别人喜欢的商品我可能也喜欢。(2)物以类聚:某些商品具有一定的相似性,如果我喜欢其中一些商品,那么剩下的商品我可能也喜欢。值得注意的是这里的相似性并不是针对商品的固有属性而言,而是指其业务数据。老生常谈的就是啤酒与尿不湿的例子:通过对俄罗斯某超市的销售数据分析,发现啤酒和尿不湿经常被一同结账,其原因是宝宝的爸爸出去买尿不湿的时候看到啤酒往往都会带上几罐,此后大多数俄罗斯超市都将尿不湿和啤酒摆放在一起。由此带来了推荐系统的两个经典算法:基于用户的协同过滤算法和基于物品的协同过滤算法介绍这两个算法之前要先引入客户对商品的偏好度概念,我们可以基于客户的行为数据来计算其对商品的偏好度,像搜索、浏览、加购、下单、好评、中评等,如下表所示以笔者所在行业为例,根据客户(项目)对商品的偏好度整理如下(图中空白部分表示客户对该商品不存在偏好关系)在计算项目间的相似度之前我们需要先将项目进行向量化,以项目a为例:以安全帽为x轴,以螺丝钉为y轴,以探照灯为z轴,项目对这些商品的偏好度就是对应轴的刻度,这样的话我们可以把项目想象成从原点出发在以安全帽、螺丝钉、探照灯构成的三维空间的一条向量;每增加一类商品就是增加了一个维度,那么每个项目就是多维空间的一条向量,而两个项目之间的相似度就转变为两个向量之间的相似度,又因为向量间的夹角越小向量就越相似,由此我们可以通过余弦相似度公式来计算项目间的相似性。cos(a,b)= (2*3+6*7+3*2) / (√(2²+6²+3²) * √(3²+7²+2²)) = 0.98cos(a,c)= (2*4+6*2+5*3) / (√(2²+6²+3²) * √(4²+2²+3²)) = 0.93从计算结果看得出来b、c与a的相似度都非常高,但是b和a的相似度更高一些。现在我们有了客户对商品的偏好度数据与客户相似度数据,接下来就可以计算需要将哪些商品推荐给客户了上图中的例子可以看出,如果项目A未采购商品1的话就可以为项目A推荐商品1
我们已经有了各项目对各商品的偏好度数据(见上表),可以得出各个商品分别被偏好的项目数和每两个商品同时被偏好的项目数由表中可以看出螺丝钉和防尘网的相似度最高,其次是螺丝钉和探照灯。现在我们有了客户对商品的偏好度数据与商品相似度数据,接下来就可以计算需要将哪些商品推荐给客户了上图中的例子可以看出,如果项目A未采购商品6的话就可以为项目A推荐商品64 推荐数据处理阶段
推荐系统一般可以分为四个阶段:召回、粗排、精排、重排
召回就是通过推荐算法找到客户可能会感兴趣的商品,召回的商品会沉淀为推荐候选商品池,这时侯选池的商品数量一般都会比较大,如果直接排序来显示给客户会出现处理速度跟不上的问题,所以在排序之前还可以加个粗排环节
粗排可以通过规则配置或者较为简单的排序模型对候选的召回过滤,比如将不同侯选池的商品去重、剔除当前已失效的商品等。粗排后侯选池的商品数量会大幅减少,同时产出对客户价值更大的商品集
精排阶段可以进行各类倾向性的排序,比如为某些商品加权或降权、剔除客户近期购买过的商品等,这个环节更多是偏向业务策略,意在为客户推荐一些指向性商品,在这个环节候选集的商品数量进一步减少
最后是重排环节,为了保证推荐商品的多样性可以在这个环节对精排后的商品池进行打散重排,上面有说到“多路召回”,同一种方式召回的商品很容易排序,但不同方式召回的商品因其召回规则和算法不一样所以就不太容易排序了。这个时候就需要对每个方式召回的商品进行统一排序,比如可以通过客户分别对召回商品的CTR预估进行再次排序
以上便是笔者对推荐系统的理解,工业界中的推荐系统远比文中介绍的更为复杂,推荐算法也更加成熟和全面,本文只是通过几个简单的例子大致介绍下商品推荐的原理,方便大家理解。