网易严选|如何在工业界做流量调控
严选技术产品团队 稿
在严选场景我们有多种模块进行流量的分发,比如搜索、推荐、资源位等等,每一个模块都是和严选用户的直接对话,其曝光逻辑影响着用户的决策。为了进一步完善流量结构并提高流量效率,严选开展了流量决策项目,在保留深度学习优势的基础上以一套逻辑透明,可解释性强的调控策略来寻求流量调控的帕累托改善。
1. 背景
在严选场景我们有多种模块进行流量的分发,比如搜索、推荐、资源位等等,每一个模块都是和严选用户的直接对话,其曝光逻辑影响着用户的决策。近些年深度学习在各个模块都进行了落地运用,也都取得了不错的效果,但是深度学习的黑盒模式却让业务方越来越失去了抓手,这样下去很容易陷入模型独自优化模型,运营独自运营的境况,同时也容易引入系统偏差放大的风险。在电商环境中,算法决策和运营策略是相辅相成的,脱钩的独立迭代肯定不如携手共进,我们需要取各方之所长,所以黑盒的打开势在必行。
其次流量资源是有限的,各方对流量的需求却是无穷的,一味地向效率最高者倾斜,系统结构稳定性必然会受影响,太过于平均主义也必然导致平庸和衰败,因此我们需要一套兼顾效率和公平的流量分配机制。
结合以上两点,我们推动开展了流量决策项目,在保留深度学习优势的基础上以一套逻辑透明,可解释性强的调控策略来寻求流量调控的 帕累托改善 ,不断接近帕累托最优。
本文适合技术亦适合非技术同学,力求通俗易懂,文章略长,重点在于思路的分享。
2. 流程
以下会从方向和方法两个角度对流量决策系统中的关键元素展开介绍:
- 方向主要涵盖调控的指导方针以及原则。
- 方法部分对一些核心能力做简要介绍。
2.1 方向
大方向总的来说是:
构建一个模型主导的循环链路固然优雅但也面临风险和偏差,消费场景不像图像语音等场景那么纯粹,落地时更多业务思考的融入往往会事半功倍。我们需要致力于营销、流量形成合力,助力新品培育和成长、提升重点品的流量空间、优化商品结构提升商品力,不仅关注模型的一环而是在整个流程上的优化,从一单模块的迭代优化走向全局多模块的联动调控。
细分的话可以总结为以下几点:
- 通过商品池划分来便利后续的一系列动作,使得流量的流向更合理;
- 通过多维度多场景及用户差异化的扶持略策略来合理调配流量;
- 通过踩点用户需求节奏和活动运营节奏来高效利用流量。
传统上我们主要是做的兴趣导向的流量分发,常用商品表征、点击转化预估、多任务学习、一些冷启动以及打散策略等技术,应对新的方向我们需要扩展业务导向的能力,需要扩展包括但不限于商品池划分、流量调配、联动扶持等技术。
2.2 方法
从这开始将对系统中涉及的主要技术做简单梳理和介绍,主要包含以下几个方面:
- 选品能力
- 定向能力
- PV价值预估
- 调配算法
- 其他能力
接下来我们一个个做介绍。
(文章较长,读者可挑自己感兴趣的部分阅读)
2.2.1 选品能力
在新品扶持和爆品打造的背景下,我们首要的就是围绕商品做探查,回到商品本身,从多维度来理解和分析商品。就像胡塞尔说的“回到事物本身“我们需要不带任何偏见,依照它们显现时的样子,而不是依照我们认为它们应该是的样子,来准确地记录它们。让我们思考一些理所当然的事物,去重新认识,以此来恢复事物的丰富性。
以商品评估为例,大家已经习惯于依据商品销售额的SABC分级,觉得这是理所当然,大家习惯于只关注商品目前的点击转化率指标,觉得这几个维度涵盖了商品的全部表现。结果指标确实能反应一些问题,但是只盯着果而不关注因,只盯着终点而不关注过程是很难做好事情的。为此在选品阶段我们重新梳理的商品评估的各个维度,主要从两方面展开, 一是角度之区分,二是时空之区分 。
- 其一,扩展商品指标关注的维度。 扩展的原则又可以从两个视角考虑,一是BU一是用户。BU视角关注的是这些指标如何能与他们的优化动作关联上,可以看指标来定位问题和展开协作。用户视角则可以从感兴趣到愿意买到用得好等几个维度来分析,和用户在一起提升用户体验。结合以上两个视角我们重新梳理了数十个关键指标,包含点击、时长、搜索、转化、评价、退货、复购等多维度,这个过程有点像传统的特征工程又不止于特征工程。
- 其二,从只关注截面数据走到同时关注时序数据。比如商品A昨日的UV价值或者商品A近一个月的日均销售额这些都只是截面数据,从截面数据出发我们只能获知不同个体在同一时间下的累积状态和区分,关注个体间区别,很难判断个体将如何变化。比如还是商品A,截面数据反映它的UV价值相对其他商品要高,但是是否需要继续给他流量这个问题其实是回答不了的,而要回答这个我们必然需要引入时序数据,围绕时间变化来分析趋势。电商场景有较多的活动,部分指标容易出现偶发的异常偏离,简单的趋势计算往往是失真的,于是,在一的基础上我们为每一个指标增加了经过波动修正的归一化趋势指标,通过这个指标我们可以迅速感知商品在时间维度上的变化,比如是比较稳定得增长还是比较波动还是趋势往下,同时也可以在个体之间进行趋势差异的比较。说到比较,不同品类商品的直接比较必然会有问题,但是单纯在细分类目做相对优势的比较也不合适,因此我们做了多层次优势排序的处理,在全局维度、一级类目维度、二级类目维度都做了截面指标和趋势指标的相对排序,汇总得到能把握全局又能兼顾局部的相对优势指标。
综合以上两方面,我们包含截面和趋势的指标既可用于BU的动作参考,又可用于商品指标分的计算并进一步作为选品依据。其次我们看一下实际的运营需求,按场景区分有针对新品栏目的主推选品、有针对促销栏目的活动选品、有品牌心智考量的选品、有针对大促的爆发选品、有针对节日的主题选品,也有针对应季等需求的趋势选品,按目标区分有以新品培育为目标的选品,有以栏目冲GMV为目标的选品等等...于是基于指标以及场景差异我们构建了新品跃迁池、潜力品池、应季品池、SA补充池等多个选品池用于后续的扶持指导以及运营的动作参考。
2.2.2 定向能力
有了扶持商品池之后要考虑的第二个问题就是这些流量从哪里获取,就像广告投放一样,自然而然就会想到需要定向能力。在此主要介绍三个定向逻辑,分别是 人群属性定向、兴趣定向以及季节触发定向 。
2.2.2.1 人群属性定向
首先谈一谈 人群属性定向 ,这是最简单也最直接的定向方式,解决的问题也很直接,比如女士服装不要推给男士这类显而易见的逻辑。
2.2.2.2 兴趣定向
其次是 兴趣定向 ,用户的兴趣挖掘也是个老生常谈的话题了,通常有基于属性和基于行为序列的人群画像以及长短期兴趣之划分,在流量决策项目中我们从用户需求程度出发将兴趣做了三个层次的划分,分别为浅层交互、明确需求、候选需求,本质上是对带行为类型及时效性的行为序列做兴趣抽象,毕竟昨天在首猜随意点击一个商品和用户今天直接去搜索后点击商品在用户需求层面是有非常大的差异的。通过兴趣抽象我们将用户的需求映射到各级类目上,对于需求少的用户我们会针对性做一些关联的需求以此帮用户扩展兴趣。最终我们进一步抽象出了二十几个基础的用户需求类型,每个用户可同时存在于多个用户分群,这些分群用于定向任务的生成标记。
2.2.2.3 季节触发定向
最后是 季节触发定向 ,这个定向能力来源于对应季品流量供给的需求。例如在夏季防晒、风扇等都是大家都需要的东西,即使有些用户自身行为没有表现出对它们的兴趣倾向,但是我们其实也可以在合适的时机来给他们展示这些商品,以希望获取一部分转化,那么什么是合适的时机呢?什么是应季品呢?这是我们要解决的两个问题。先解决第一个问题,什么是合适的时机,大家都知道中国幅员辽阔,不同地区有较大的气候差异,杭州的朋友需要防晒的时候,东北的朋友可不是这么想的,那么这个时机必然是和地域相关联的,那么问题就转变为如何在特定地域发现这个时机。我们的切入点是从搜索数据来推断应季需求的出现和消失。基于检索词和商品的映射以及一些常识我们构建了应季品相关的搜索词库,通过不同地区用户应季品相关搜索量和当地整体搜索量的比例关系我们便可以判断当前地区用户对应季品的需求程度,如下图:
我们可以看到从搜索数据推断的应季需求和实际气温几乎一致。这时候也许有读者会考虑,是否可以直接拿各地区天气预报的数据来做推断,这样还能进一步推断未来的情况。最初我们也这么考虑过,但是实际上用户的需求并不是一直气温关联的,比如到了7月底的时候,气温依旧很热,但用户的需求其实是开始下降了,毕竟该买的应季品基本都买了,所以基于搜索数据做应季需求推断会更合理一些。其次是什么是应季品的问题,这个问题比较好解决,如果商品中心的标签比较完善,那么基本可以筛选出大部分,但是实际总不是完美的,于是我们基于商品的标题、类目等信息,使用标签明确的商品做训练数据便可以训练一个季节推断模型,将那些季节标签模糊或者没有标签的商品做出分类。因此季节触发定向用一句话说就是在特定地区,当应季需求达到一定程度的时候,我们会对进入应季品池的应季品在当地做针对性的流量扶持。
最后提一下流量扶持场景特殊的柔性定向处理。流量扶持必然有其特定数量的扶持目标,但是定向能力却将我们总的可能空间给缩小了。在流量扶持场景下满足流量需求的优先级是高于定向设定的,因此随着时间推移,当实际流量和目标流量一直有很大差异的时候,我们会适当放宽定向约束,以一个可变的参数来控制一定概率可以无视定向约束。
2.2.3 PV价值预估
PV价值代表着 流量的承接能力 ,通过对商品在特定模块的PV价值预估我们可以做出调控的合理决策。作为排序模块后置环节是否要做PV价值预估呢?是否可以直接使用上游的排序得分呢?答案是可以也不可以。这和我们后面要介绍的调控模式有关,主要有两种模式,一种是直接插入式的调控,一种是位置调整式的调控。对于前者我们不得不做,对于后者我们可以不做。实际运用中考虑到性能需求以及预估的稳定性,我们使用商品在模块下的实时PV价值和用户多兴趣向量计算得到的兴趣得分的融合来代替PV价值,通过这个预估值我们来做出后续的调控决策。此外后续将会提到的过曝调控层会和流量扶持形成博弈,进一步来优化流量的承接能力,在此不再展开。
2.2.4 调配算法
调配算法主要是两个问题:调多少、怎么调。
2.2.4.1 调多少
先说说 调多少 。调的信息输入有两种,一种是商品自然成长需要的,一种是特定的运营活动需要的,后者比较好解决,接下来主要针对第一种展开。
不同商品成长会有不同的路径,有的商品从上架开始表现就不错,在流量供给和转化提升的正循环中不断成长为爆品;有的商品初期表现一般,但是在合适的时机突然开始成长,然后进入不断提升的正循环成长为爆品;有的商品初期迅速成长但是后力不足逐渐走向衰退;有的商品则一直很平庸,早早得退出舞台或者在舞台上也无人关注;有的商品为波动式,转化成此起彼伏之状。针对不同商品在不同阶段提供多少扶持的流量在很大程度上会影响商品进入怎么样的路径。
拿新品举例,对于不同新品,我们如何决定他们每一天的扶持量呢?在严选场景,我们将新品做了四个阶段的池子划分,分别为测品期、培育期、成长期、爆发期,每个阶段会有差异化的进池逻辑、扶持底线和扶持逻辑,第一阶段的测品期用于保证新品初期的流量供给,重点在于公平。每个商品都会赋予在不同模块差异化的初始化流量,此外每日会依据商品的UV价值情况、可供调配的总预估流量、模块差异来动态更新商品的流量需求。此外表现好的商品可迅速进入后面的池子,跃迁依据为之前提到的商品指标分以及运营所关注的商品能效等级,跃迁商品的流量供给也会有一个量的提升。跃迁后也不是一劳永逸的,如果商品能效或者商品某些维度的指标明显降低了,那么会有很大的概率会回退到之前的池子甚至退出所有池子,这种时刻恰恰也是运营同学特别关注的,因此除了针对性的流量动作,我们也会输出每日的变动监控,结合多维度指标的趋势方便运营做针对性策略。
再拿离开了新品期的商品来说,在这些商品的子集上我们构建了潜力品池,对这些商品也需要做每日的调控量分配。对于这些商品我们希望让已经爆发的商品进一步爆发,同时发现那些潜在的可能爆发的商品从而推它们一把。因此对这些商品而言流量分配的关键在于在原有流量的基础上进一步给量,给多少量以及从哪里获取量呢?先说给多少量,目前的给量策略以商品前三周的平均流量为基础,综合考虑商品近期的指标分、商品渗透度、商品的活动排期信息及可供调配的流量来给予每个商品一个增量扶持得分以此计算出每日的目标量。至于从哪获取量,我们会和劣势品池子做联动,对劣势品做降权操作而潜力品做扶持,这样便能自然得将劣势品的流量转化为潜力品的主要流量来源。而对于应季品,他的流量分配还会进一步考虑地区实际变动的应季需求程度。
有了每个商品总的需求量之后我们会基于第二天小时级别的流量预估将目标量分配至小时粒度,以此来做到更细的调配控制。
分配问题是一个大问题,世界上大部分的经济活动本质上都在做资源的合理分配与利用,大到国家的经济政策,小到企业的资源利用亦或我们的流量调配场景,面临的问题和决策本质上是一样的,对于这个问题我们还有很多可以优化的空间,优化的时候不妨看看国家、政府、企业是怎么做的。举个例子,如果经济运行的结构,尤其是分配结构不合理,那么经济的停滞会扩大贫富分化和深层次矛盾。当蛋糕一旦无法再做大,原来生产端的问题就会转移到分配端。当前大环境下大家都面临流量蛋糕的问题,需要想办法去破局,除了分配还要发展,用发展解决发展中的各种问题,目前接着就能做的便是先借助调来促发展。
2.2.4.2 怎么调
接下来我们谈一谈 怎么调 。调的模式主要可以抽象为下图所示的几种:
基于其基本模式我们接下来主要介绍两种直接且有效的模式,分别是固定位模式和 动态位模式 :
-
固定位模式:关注短期爆发
对于固定位模式我们可以将其理解为一种柔性资源位的概念,在产品形态没有变化的情况下,算法先行可以迅速在多模块类似资源位的模式给目标商品提供流量,这种流量供给模式有资源位的优势,比如流量供给比较迅速和直接,也有其自身的优势比如各商品的目标流量满足后会自动释放占用的位置,其次能够将定向能力、预估模型等能力迅速扩展到各个推荐和搜索场景。具体的流程可以简单概括为:对每一次请求,对扶持池商品基于模块信息、人群定向、当前时刻的流量需求以及PV价值预估进行过滤和排序,然后基于概率采样来获取我们本次需要调控的商品,将这些商品在固定位进行曝光。在此需要说明下,对于某些模块,我们会开启插入模式,即使商品在召回链路没召回也会做曝光,可以认为扩展了召回的渠道,而对于大部分模块我们只干预有召回的商品,可以认为是一种重排。
当前时刻的流量需求可以展开稍微谈一谈,因为这个子场景也是一个公平和效率的典型例子。比如A商品的总需求是5,当前已满足需求是2;B商品的总需求是100,当前已满足需求是60;C商品的总需求是20,当前已满足需求是8,流量的扶持是流模式提供的,那么如何评估他们当前相对的需求大小呢?按照绝对量来看B商品需要40大于A商品3的需求,按照相对量来看,A商品还有60%的相对差距大于B商品的40%的相对差距。如果按照绝对量优先,那么类似A的商品流量很难被满足或者很长一段时间都轮不到它,如果按照相对量优先A和B当前的优先级看似合理了但是A和C如何排序呢?因此我们设计了兼顾绝对量和相对量以及阶段误差和累积误差的需求评定算法,有点像PID的控制逻辑,只不过我们面临的是多商品相互竞争的控制而非单一目标控制。通过这个控制来让流量分配在品间轮流,使得流量供给在时间维度平滑的基础上加了品间的平滑。类似的问题还有一个叫做最大最小公平分配算法,和我们的场景略有差异但是有兴趣的也可以看看。如果对商品再加一些其他的指标约束,问题会进一步复杂也更接近现实,这是个有意思的方向。
业务中,比如新品和趋势品采用的是固定位的方式,这些品需要更直接的流量供给以及短期快速的流量提供, 像一个短跑选手,关注短期爆发 。
- 动态位模式 :关注耐力和节奏把握
接下来说一说动态位模式,这个模式没有插入,可以认为是纯粹的重排,关键是基于实时的反馈去学习每个商品对应的位移大小。和固定位不同,在这个模式下我们复用了上游的模型排序,只不过使用的是绝对的排序位置而非实际得分,出于两点考虑,一是多模块的复用性,二是调控的稳定性。其次同上我们会计算商品的实际流量和目标流量的差异,分别获取累积差距、累积相对差距、阶段差距、阶段相对差距等误差项来计算当前位移更新量。此处的误差计算和固定位任务类似,可以做统一,因此在工程实现上将两种task汇总后统一调度实时查询接口做计算以提升性能,只不过参数更新逻辑上会有差异。为了控制调控的力度,每次请求会对重叠的商品集合依据调控位移值做概率分布的转化,然后采样出N个商品做位移调整,最后再加一层调控密度分布的位置校验。
业务中,潜力品等商品则采用动态位的方式,这种方式能干预的范围相对更大,但是力度上会弱一些,是一个涓涓细流持续扶持的过程,商品们在这过程中不断得优胜劣汰, 像一个长跑选手,关注耐力和节奏把握 。
最后再提一下和前两种模式相博弈的过曝控制层,过曝层的主要逻辑是监控商品实时的PV价值,将其与同类商品比较判断其实时的流量承接能力如何,通过对承接能力差的商品进行降权来和流量扶持任务形成对抗,从而达到一种动态平衡。
2.2.5 其他能力
流量调控的整个流程一环扣一环,无论是选品、定向、预估还是调控等算法都仅仅是整个流程中的一环,数据、工程、可视化等将一环环串联起来。拿数据举例,最基础的我们需要各个商品在各个模块的实时流量和转化数据,进一步,当我们需要做AB实验的时候,不同于模型推断主导的场景(直接分流开实验即可),每一次差异化调控的结果都会实时反映到调控的输入端,因此我们需要数据段提供在AB分组下各商品在各模块的流量和转化情况,这样我们才能在各分组进行无干扰的实验。工程层面,因为调控更类似策略服务而非传统深度学习模型服务的简单调用,需要对调控任务的设计、同步、协调等都做好管理,比如任务的多层级kv储存设计以及读取的各种缓存优化都必不可少,调控任务的多样性可能会出现特定商品的任务间冲突,因此任务的冲突处理也很关键,调控算法的实现上需要综合多种基础能力,同时兼顾好不同策略的差异化以及互通性,此外还有很多要点在此不再一一展开。至于可视化,这是目前和运营相关同学关于调控事宜最便利的沟通方式,数据的呈现简单而直接,通过对商品探查看板、调控池构成、调控池变动、调控效果监控等信息的梳理和呈现,技术和运营之间的距离缩小了,有效推进了流量调控项目的进一步发展,将流量调控的效益最大化。
3. 总结
整个项目做下来,流量调控的项目遵循的是设计思维的模式,通过对用户、运营需求以及模型本身的分析来定位出问题,基于面临问题跳出纯粹的模型迭代,思考更多的解决方案,然后在一些单模块进行流量调控的测试和迭代,包括但不限于调控对象的迭代、调控策略的优化等等,这个过程中也会不断有新的一些想法的出现,之后再将策略进一步向多模块推广,构建模块联动的调控,调控过程中持续关注用户、运营等的反馈不断迭代。
本文由作者授权严选技术团队发布