导读:推荐系统的概念这几年非常火爆,给很多公司带来了实实在在的收益,但如果想将其作为公司增长飞轮中的一环,其实背后有非常多的点需要我们深思挖掘。本文将首先介绍业务以及从宏观和微观角度看增长,再者结合具体案例介绍宏观与微观的关注要点,最后再进行下总结。
我们是一家出海 2C 电商,目前每日有流量和订单的国家和地区超过30个,主要的用户来自印度,是目前印度的第三大电商,国内出海印度第一大电商。
业务模式包括:自营和平台模式自营和平台模式,自营是国内商品跨境卖给印度用户,平台则是印度商家入驻卖给印度用户,右边是我们公司的app,我们公司还有一个特色,就是我们技术+大数据占公司接近50%,运营占比在30%以下,所以很多问题一上来就是以技术和数据驱动为主的,为了提高人效,初期我们就一直关注如何建立一套可循环可迭代的系统。这个有利有弊,但是算是走出了一条不一样的跨境出海之路。
我们的使命是“整合全球商品信息,使人人都能触及并从中受益”,落到推荐算法这一块,“触及”两字是核心,让用户看到和感知到多快好省,提升流量匹配效率,这几个字都非常重要考察了电商的很多核心能力,稍后会做一些讨论。
当然这里面也有很多挑战:
推荐侧:场景多,目标多,往往不是完全一致的,而且没有ground truth,用户购物链路长;
数据闭环侧:需要考虑用户全流程体验,商品的起量和衰退,商家的成长和分级。
公司作为商业机构,也会考虑业务模式的平衡,用户、商家、商品的平衡。比较不一样的点,印度相对中国用户兴趣分层 ( 中国一二线与四五六线城市的需求差异 ) 还未这么明显,对价格折扣异常敏感,海外购物因为信任 、支付等问题转化低,正反馈更加稀疏。用户群需求差异越大,推荐能够发挥效果的空间越大。
接下来从宏观和微观分别论述下我们对增长问题的见解,一般大家遇到增长问题喜欢拆解,这里把规模分别拆解成了流量乘以转化乘以回访和复购,回访和复购我称之为X因素,因为其实他比转化更难把握,转化更加短期更加当下,但是X因素才是企业最终能够笑到最后的本质,相信大家也听过1.01的365次方和0.99的365次方的故事,复利思维可以带来恐怖的增长或衰退。
宏观来看,规模依赖底层的用户体验、供应链能力、组织、财务、数据算法能力的高低,这里用户体验很好理解,在电商场景下就是让其感知多快好省,这背后供应链是感知层的上流,必须有够好、够省、够多的商品,够快是组织能力,财务、数据算法是闭环能力,如何让飞轮高效、健康地转起来。
微观我们来看看转化这个点,个人提炼了几点,外层是算法、数据、产品的闭环,中间是数据、特征和算法、底层依赖商品、用户、商家理解,微观转化层面后面刚好涉及,我先不过多展开。
接下来我们进入微观/流量效率这个模块进行一些细粒度地探讨,上面这个图是做推荐的人再熟悉不过的了,从召回到最终展现,层层筛选商品,最终用户根据结果进行反馈,大模块间串联、前后依赖,这里我想分享自己的一些感悟是数据流是漏斗从大到小的,我们是正着用,但是往往很多时候我们没有系统化细粒度地去观察和理解,我称之为反着看。何解呢,就是门当户对的概念,今天你死命优化召回,但是排序太弱了,没效果,今天你死命优化排序,召回太弱了,没效果。推荐系统因为串联和前后依赖的原因,短板效应非常明显,一方超前和落后迭代效果都是不明显的,我们结合具体实例进行讲解。
每个模块我自己梳理了几个点,相关,新鲜、多样、流行、商业需求等,如果前置模块没有做好,那甭想后面的模块做的多好。
举个召回的例子来说,我们可以看看评估方式,这里介绍2种,比如i2i的评估,我们可以去看命中率,a的相似为b、c、d,用户点了a后点了d、e、f,则命中率为三分之一,这里还可以结合位置等因素,当然我们还可以评估i2i的准确率、召回率、F1、覆盖率、零结果率、深度等等。
还有的评估方式其实普适性更强,就是我们用后一轮的用户反馈结果来评估前一轮效果,比如上图,我们用下一轮的推荐结果来看跟上一轮的结果的效果,当然这里有一个大的问题,用户想要的小于用户随意看的小于用户看得到的,用户没看到的肯定他无法表达想要给予正反馈,所以很多公司会在这里给予random,这个细节我们后面几页ppt再做探讨,假设无影响的情况下,这算是一个自洽的评估方式,当然应该会有更合适的评估方式。当我们有了一套合适的评估方式,那我们就可以期待离线的数据提升可以大概率带来线上的效果提升,如果发现离线评测效果提升明显,但线上效果不显著,可以排查特征和用户分布是否出现很大不一致。
这里我们根据召回模块进行细粒度的拆解,我们不过多介绍类似如何利用word2vec或者als计算i2i的逻辑,这里介绍一下召回源的融合,包括i2i、c2i、tag2i等,不同的场景不同的迭代阶段也会有不一样的逻辑,可以离线融合也可以在线融合。
这里介绍离线重一些的模式,线上只做查询,不做融合。首先我们需要一些信息,比如用户的静态信息,包含了用户国家、性别、设备等,这个的出发点是不同的人其实也会有差异,i2i召回的时候可以用用户静态信息加item_id进行召回;trigger信息,在商详可能是商详的主商品,在个性化推荐场景则可能是用户的行为,trigger可以包含商品id,也可以包含行为时间,也可以包含行为类目;召回源信息,则是这个商品来自于word2vec、als还是swing,不同的召回源会有不一样的业务假设,这里面的信息量也比较多,比如ALS和W2V,前者偏向全局、后者偏向于时序高频,当然这些可能需要结合埋点,需要将召回逻辑埋入日志,供提取数据和特征;商品信息则好理解一些,就是商品的静态、动态特征,比如类目、点击率、转化率等。下一步就是通过用户真实的反馈进行数据、特征的构建,配合不同模型的选取来进行融合预估。
这里我想讲的是其实光召回侧,其实我们就可以在性能范围内进行多维度的考虑,尽量满足我们对于这个模块的诉求,最终类似BP的思路,既要正向流转,又要反向传播,把误差往前传修正前置的依赖。保留越多的信息越好,数据收集的越仔细越好。
讲完召回我们再讲讲排序,排序我们也是按照业界的常规思路,尝试了lr、xgb、wide&deep等模型,这里面挑了几个问题点来讲,这里的工作集中在数据清洗构建契合实际场景的样本,构建丰富的用户、商品、上下文特征来预估点击率、转化率。
第一个讲的问题就是个性化问题,个性化元素是比较重要且核心的一个点,如何将个性化做到恰到好处,根据兴趣强弱影响整个排序结果是一个可以探讨一下的点,比如我们可以将用户兴趣落到具体的类目、品牌、标签上,然后在做完点击率、转化率预估后,将个性化分在最外层与两者融合,也可以作为特征放入排序模型中,这里的方法是通过一层建模对用户兴趣进行了降维表达,具有可解释性,但也会丢失一定的信息。还有一种方式其实就是将用户行为序列作为特征放入模型,通过网络结构去学习用户偏好,比如dien,通过类似gru这种rnn的结构进行兴趣建模,后期的网络迭代也是类似的诉求。前者其实就会涉及如何构建合理的衰减因子,其实就是捞取用户真实的行为,拟合其兴趣偏好的冷却过程,这就是依赖人做了一些工作,但是效果还不差,至少在推荐系统演进的初期,是一个快速拿结果的方式。这种方式比较千人一面,具有统计泛化的同时就丢掉了个性。还有就是我们在迭代过程中,如何通过构建wide模型来完成deep模型的结构,比如我们可以将用户对某个商品的点击与否,结合时间节点前的点击序列构建特征,比如对a点或者没点,在这个反馈行为前用户点了c,d,e,则特征就可以是a&c、d&c、e&c的id pair对构建 one hot作为特征,比纯id特征就可以构建用户兴趣,其实也有一些i2i的意思。din就不过多解释了。记忆和泛化是两种方式,都可尝试。
这里为什么讲个性化,因为这个是一个重要的因子,也是现在很多模型都去构建相关的网络结构对其进行建模的初衷。
第二个排序中想讲的问题就是分布变化的问题,前面讲了推荐的召回和排序等等模块会影响用户看到的,然后用户看到的又会影响用户的反馈,用户反馈又会影响样本分布,就会影响模型,循环了,那怎么去解决呢,这里尝试可以尝试引入随机因子,完全随机和部分随机,保证预留一定的空间可以让分布更加自然,当然这里面有很多学问,需要考虑和平衡。我举个我们遇到的问题,比如i2i召回很依赖用户的行为序列,看了又看的pair对数据,当大促期间,某些折扣商品会有较大的曝光,然后也就影响了看了又看,整体i2i就因为折扣因子影响,噪声带来了i2i的不稳定,如何平衡也是可以持续研究的。类似的商品折扣在活动中和活动后都会影响排序,因为大部分模型在排序特征中会利用商品的历史点击率,这时候往往会低估商品的流量效率,活动后则会高估。并且有时这部分商品可能没有召回,更加没法排序了。这时候我们可能需要引入实时特征、在线学习、流量调控等手段,历史的表现作为先验,结合实时特征和表现,进行流量调控,折扣的力度可以作为初期流量分配多少的依据。总之推荐是一个系统,要具有鲁棒性。
接下来我们再来探讨一下识别和表达用户兴趣,这里面其实在推荐召回来说也是三种召回形态,兴趣泛化的召回、热点的召回、retargeting召回,兴趣泛化可以是类目、标签维度的,在看牛仔裤的用户推荐类似的牛仔裤,在看连衣裙的推荐类似的连衣裙,热点就是热门,retargeting其实就是交互过商品的召回,比如用户收藏、加购了某个商品,还是推荐这些商品,三者在推荐场景中均有不错的收益,前面两个比较好理解,最后一个retargeting也比较有用,常常在推荐和push中使用,尤其是个性化推送,作为规则触发有不错的收益。在某些推荐产品、业务、时间节点中其实非常有用,比如电视剧这种长视频推荐场景、比如双十一当天尤其。但是如果我们仔细想想,其实这种推荐也会存在流量浪费和体验差的问题,并且这里对用户的兴趣探索也有伤害。比如电视剧场景,你不推《庆余年》,用户可能也会在其它场景看到,你各个场景都去推,重复会非常多,第二个收益不大,但是如果是生命周期的初期,刚开始看,其实这个收益就会更大,生命周期的末期,我们需要评估用户行为延续性和留存,我们希望能在用户离开前找到下一个可以留下的剧。这中间需要平衡用户快速找到信息的体验和用户兴趣探索延续的任务,比如我们可以建模一个delta收益,ratargeting的用户收看的概率减去不做召回用户收看的概率,或者全场景的推荐策略信息透传、串联去构建全局的收益。
这也就是我下一页ppt想讨论的,我们首先得在产品心智和业务诉求层面先对推荐产品进行功能划分和作用识别,我们希望商品list页中搜索可以更强调收敛,首页可以强调发散,但是也可以根据用户意图的差异进行策略的切换,比如搜索iphone 6s 128g 黑色就是非常强的意图,如果只是裙子则意图较弱,可以相对发散让用户有一定的选择空间,首页类似,搜索根据搜索词走,首页跟着用户行为序走。同理下面的各个场景不做过多的讨论。
最终我们也可以通过技术手段实时地识别用户的旅程,然后根据旅程在各个推荐场景进行推荐策略的调整,来最大化全局收益。
最后我们讨论几个大一些的问题,我们公司也在尝试解决,公司维度有几个大的目标。
第一个是生态闭环,商家流量和成长的平衡,流量分配,运营机制,我们需要引入更多的商家提供更多的商品和服务,这时候新入驻的商家我们需要给予一定的流量带来出单,保证一直有新鲜血液融入其中,同时我们也希望好的商家有更多的流量,保证他们保证他们有足够的利益,建立更强的对平台依赖。平台维度希望用户的回访、复购更好,带来更高的LTV,这中间就是需要建立netgmv的诉求,我们希望逆向更少,正向是商品从商家流进用户,逆向是用户不满意拒收、退货等。如果当天卖了100件,几天后退了80%,那其实net gmv异常的低,这不是我们想要的,这种优化更加偏长期,更加多因子。
第二个是商品理解和建设,我们会通过一些站外和友商数据对我们的新品进行预估,是否会在平台卖爆,当我们现在有100w商品的时候我们知道展示的优先级,并且结合一些bandit的算法进行高效的新品测试。这时候在推荐过程中,商品维度的explore时可以更加高效。这中间就是典型的双边市场,越丰富的商品带来更大的选择空间,带来越好的体验,转化就会变高,持续的流量也大,这时候商家也会有更多的收益,吸引更多的商家加入,最终带来良性循环。
第三个是用户理解、智能投放,低延时高效展现,这里面很多在前面有一定的介绍不做过多的介绍。
视觉窄化最近谈论比较多,刚好结合这页ppt讲讲,就是我们会遇到很多问题或者目标,这些目标大逻辑都在围绕用户、商家、平台展开,大循环是三者的,每个模块内部也会有很多问题,比如用户维度的视觉窄化和平台维度马太效应类似,如何缓解这些问题,我的建议是初期就尽量top down的思考整个问题,尽量从三个角度都建立一套评估指标。并在各种产品、算法、业务迭代中如观察或者甚至融入这些指标,只要指标设立的是正确相对全面的,那么跑起来后就是健康的。当然这不仅仅是个技术活,也是个艺术活,不是纯技术范畴的事情。我们公司也在摸索尝试中,目前有一些收益。
最后做几点总结:
第一点,业务效果好的算法不一定是复杂算法,基于假设、分析后的策略迭代开发评估才会带来好的效果。包括系统地思考整个架构和体系,不要虎头蛇尾的优化局部模块
第二点,我们要时常回顾案发现场,增加埋点,将整个推荐策略中黑盒的埋进去,比如某个商品展现给用户,他从哪个召回源来的,用户当时的行为偏好是怎么样的,这个召回源的效果如何,都可以从埋点中溯源,并且还可以作为模型的特征
第三点,迭代思路上我有一个觉得非常不错的点,就是逆向看,比如我们可以去溯源每个场景高流低转的商品,结合第二点的埋点,去分析他是来自于哪个召回源,经过怎么样的排序,最终展现给用户的,可以便于我们排查定位问题。
第四点,全局收益,场景打通了看,平衡局部最优和全局最优,举个例子就是往往很多产品在推荐的初期,个性化场景非常相似,因为都是根据用户的行为,利用现有最优的模型进行排序,往往结果相近或者类似,但是忘记了用户购物需求很多时候是有上限的,不会因为你推荐的好我就会买很多,有些场景应该重短期转化有些场景应该重回访、复购等长期指标,最终构建接近全局最优的推荐方法论。
第五点,最重要的就是建立合理的指标,推荐、搜索、广告等等都是子系统,我们得建立生态维度更加健康的指标。方向比努力更重要。