Fork me on GitHub

强化学习在京东 618 大促流量调控中的落地应用

图片

分享嘉宾:赵宇博士 京东零售
编辑整理:王妍红
出品平台:DataFunTalk

导读: 大家好,我是来自京东零售搜索算法部的赵宇,今天我来给大家介绍一下我们使用强化学习在大促流量调控中的一些实践和思考,希望能够对各位有一些启发。

今天的介绍会围绕下面五点展开:

  • 京东流量调控技术
  • 强化学习问题建模
  • 强化学习在京东大促中的实践
  • 强化学习模型的持续升级
  • 流量调控技术未来演进方向

01 京东流量调控技术

图片

流量调控 的就是通过算法策略和系统的设计和优化来构建一种综合考虑平台意志和长期价值的流量分发系统。它有以下几个作用:

第一是促进平台商家健康活跃发展,来提升平台用户和商家的价值

怎么来解读它呢?举个例子,比方说一些新上架的商品,很少用户看过、点击过、买过,那么这件新品在电商平台中沉淀的数据就很稀疏,排序模型很难准确知道这批新品到底能不能卖得很好。所以如果不在整个排序系统做相应的调整的话,那么这批商品一定被排在特别靠后的位置,从而使得新商品始终无法得到很好的曝光。这对于用户的体验和商家自身来讲都是不够好的,因为商家总是要推陈出新来维持整个用户的活跃度和粘性。所以我们就需要人为地扭转这种自然排序结果,对新上架商品做一些有倾向性的激励。

第二就是精准的搜索流量预估和快速的流量分配机制,能够将优质的流量以个性化定量的方法分配给商家和相应的用户

比方说每年在中秋节和端午节之前,月饼和粽子会卖得很好,但是在平时这两类商品几乎没有销量。在节日来临之前,平台面临需求的快速上涨和供给的滞后,我们就需要有一种快速感知用户需求的一整套算法和策略,能够把短期内销量快速上升的商品及时推给同类型的用户。这不仅要包含的流量的定量/个性化的分发策略,还需要有对流量的预估能力,包括预判什么样的商品在未来一段时间能够卖得好。

第三就是对预售、上新、品类日、大促等商家/商品活动,我们需要设计一种激励兼容的策略/算法并且进行持续优化

也就是说在设计新的策略和算法的时候,不应该损害其他方的利益。因为京东作为一个平台型的电商,需要兼顾商家、消费者和平台自身这三方的利益。所以我们需要设计一种新的算法,实现帕累托改进,也就是在不损害每个参与方的利益的前提下,能够有一方的利益能够获得增长。

以上就是整个流量调控的介绍。 我们这些年主要沉淀了四种流量调控的系统 :第一个是统一调权,就是在特定时间对于特定商品集合做排序加权;第二个是今天要着重讲的使用强化学习来做大促的流量调控;还有新品流量分发系统以及选测养系统。

02 强化学习问题建模

1. 强化学习在搜索场景的建模

图片

今天我会 着重讲强化学习技术在大促流量调控当中的应用 。在电商场景中,强化学习能起到很大的作用,因为我们可以通过强化学习来建模用户和系统之间的交互,从而优化系统长期的累计收益。在讲这个之前,我要先简述一下如何用强化学习对这个问题进行建模。

我们知道整个强化学习有一个奖励(reward)概念,我在右边的公式中将奖励(reward)定义为Q,它表示在当前时间状态 S_t下,如果做出了α这样的一个决策会带来怎样的累积收益。而这就特别适合作为平台型企业做决策的依据来考虑一系列决策的长期收益。同时它也可以平衡人货场三方的收益,其中“人”就是消费者,“货”是商家,“场”就是电商平台。

强化学习是一个偏交互的过程,这是与有监督学习的区别之处。当用户搜索了一个关键词后,平台会给出一个排序的结果,用户会根据给到的商品排序结果产生一系列行为,这些都包含着丰富的用户信息,我们可以把这个信息给拿回来,然后再回过头来判断前面的行为到底带来了多少价值。所以区别于有监督学习更关注于短期的、即时的收益,强化学习通过循环反复的交互过程,能够更多地关注平台的长期的累计收益。

我们把环境(environment)定义为用户;动作(action)是这个商品的排序打分;奖励(reward)就是用户的反馈,其中权重最大的应该就是用户的购买来行为;智能体(agent)这个就是平台的排序策略(ranker)。

2. 问题抽象

图片

前面我们把强化学习里的经典的概念在这个电商场景下做了一定的抽象,现在还需要对大促场景下的问题进行抽象。

① 问题抽象1:商品集合达到特定的流量目标,通过调整商品的展示位置来实现

第一个问题是在大促中我们面临这样一种需求,就是特定的商家跟平台签订了合约,我们需要保障这个合约的完成事先约定的流量目标。那么我怎么保障这个合约的完成呢?那就是在搜索场景下,通过调整商品的展示位置来实现。我们看右边这张流量与展示位置抽象关系图,它是一个单调递减的函数,也就是说如果这个商品的展示位置越靠后,这个商品所能够获得的曝光越少。因此我们做了一个问题抽象,将特定商品的展示位置提前,由此提高商品的点击和订单,从而助力商家达成GMV或流量的目标

② 问题抽象2:平台关注整个页面的收益,而非单品的收益,所以商品展示位置的调整,需要满足效率约束

第二个抽象的就是要关注整体页面的GMV,不能因为只关注某些单品而忽视整体收益。所以在调整商品的展示位置的时候,还有一个底线的约束,也就是保障整个页面的收益不降。这里我们引入效率约束(在电商场景下定义为GMV/UV),它的含义是平台能从一个用户身上赚多少钱。我们需要在保证效率不下降的前提之下提升特定商品的销量。

③ 商品集合的实时销量、和目标销量之间,可以抽象为一个“反馈-控制”问题

第三个抽象可以抽象成一个“反馈-控制”问题。举个例子,假设京东跟某商家签订了618期间销售额100亿的目标,那么就需要每天监控实际销售是否达到预设的销售额。在这里预设销售额是一个目标,实际是否达成销售额是一个反馈,这就抽象成这样就可以抽象出一个“反馈-控制”的问题。简而言之就是如果今天达标了,那明天流量激励的强度就弱一点;如果今天没有达标,那第二天就要提高流量激励强度,这个“反馈-控制”要做到尽可能的快和准。

针对“反馈-控制”问题业界目前有两种路线 。第一种是 PID算法 ,它的特点是部署简单、维护成本低,但缺点是引入特征很少,算法模型的潜力不足。因为PID算法只看目标和实际完成之间的距离,然后来决定该怎样调整模型的参数。第二种路线就是 强行学习算法 。强行学习算法更先进,且后期可以引入多种特征,但是它的难点在于模型冷启阶段训练难度比较大,特别是刚开始的时候,我们并不知道这个模型参数该怎么调。

03 强化学习在京东大促中的实践

1. 京东大促流量调控:登月计划

图片

那么针对上述问题的抽象和我们的思考,如何让强化学习在京东大促场景下落地?我先介绍一下整个项目的概念,这个项目叫做登月计划。登月计划是京东的大促流量调控系统,是以流量调控为手段,达到低成本撬动商家优质货品资源,提高行业控比目标,从而提升平台对于供应链的这个掌控力度。

登月计划从2020年618开始,我们打造了相对值的调控能力,也就是说商家的商品能够比平台不做任何流量激励的情况下,多获取一定比例的曝光和点击。它只是一个相对的概念,相对于不做任何的流量策略的情况下获得的提升。到2021年的618,登月计划打造了绝对值的调控能力,这个是对商家更有价值。因为每年大促流量和销量激增,如果能够为商家的销售打造确定性,使他们提前准备,那么将对其生产经营和销售过程非常有帮助。去年的双11,我们又打造了多目标绝对值调控能力。

图片

我们从0到1构建了基于强化学习的流量调控系统,系统主要分成三个部分

第一部分是强化学习算法,这部分是离线训练的。第二部分是在线流量分配,第三部分是为模型训练所打造的离线流量回放系统。我们首先离线训练模型,训练好模型后推上线,然后再考虑线上如何调整流量的分配以及商品的展示位置。所以它就分成离线的强化学习中控模块和在线的流量分配模块。对于离线训练模块,我们又打造了一个离线流量回放系统。因为模型训练需要训练数据,但在模型未上线部署前,线上训练数据是缺失的,所以我们只能人为的构造一些模拟的数据来训练模型,先让模型冷启动跑起来。所以整个流量调控系统共分成三个部分,接下来我会来一一介绍。

2. DQN强化学习算法

图片

第一个是强化学习算法,这部分我们首先要基于强化学习对搜索场景进行建模。首先状态(state)表示当前整个系统的状态,根据当前系统的state产出一个动作(action),由action得到相应的奖励(reward),再由reward来反馈给模型形成新state,让模型更好地产出action,继而进行循环。

① 将状态(state)抽象成几类特征

  • 时间维度特征 ,主要指当前的时间和调控的次数。例如在大促场景之下,6月1号的前一天晚上和6月18号的前一天晚上这两个是流量的高峰期,而6月1号到6月17号之间可能流量是比较平稳的,因此时间维度特征是非常重要的。
  • 流量目标特征 ,主要指流量完成情况,流量分发情况,类目下流量分布。这个特征主要指流量激励的完成情况,我们要看这个商家当天的销售额或点击量的完成度。如果完成度是20%,那说明完成度比较低,我们需要在下一个时间片段把流量激励的强度提高;如果流量完成度是200%,那说明流量给多了,那么下一个时间片段我们需要降低流量,这就是流量目标特征的含义。
  • 搜索效率特征 ,包括曝光点击率CTR、点击转化率CVR和UV价值diff等。这些搜索效率指标是所有搜索算法都需要考虑的因素。

② 动作(action)设计

当把state输入到模型以后会产生一个决策行为,这个决策行为必须变成可解释、可执行的一些数字才能够真正在线上起作用。我们把这个调控因子进行离散化,范围在[-20%,+20%]之内,步长是5%。它含义就是说,如果调控因子等于1,那就表明下一阶段不需要调控,只维持上一个时间段的效能就可以;如果调控因子变成了1.2,那就表明下一个时间段平台流量激励强度要更高,需要多分发一些流量;如果调控因子变成0.8,那就要把调控流量的激励强度降下来。

**为什么这样设计action?**首先调控因子在1附近,做到了无量钢化。因为不同的商品情况不同。例如手机和牛奶,它们的客单价相差很大,不同的单价会影响流量调控系统。所以我们把所有特征以及action都做到无量钢化。

另外还有一点, 我们为什么要做离散化? 这是为了方便线上部署。同时我们把调控因子的变化设定在[-20%,+20%]范围内,就是不希望调控模型在两个时间段之间有太强烈的波动,从而对流量分发系统造成一定的风险。

3. Reward函数的设计与思考

图片

接下来讨论一下reward函数的设计思路。

在函数中,C指的是目标完成度,C_0是累积目标值,参数a和b都要大于1。那这个设计思考是怎样的?来看右下图,横轴是时间,纵轴是奖励值。如果C小于bC_0 ,则RELU等于0。reward等于C,它就让整个模型朝着最大化C的方向前进,也就最大化流量的方向;相应地,如果C大于bC_0,说明流量给多了,则RELU作为惩罚项;另外,b的设计应该略大于1,因为当b等于1时,实际的流量完成值就会在目标值C之下来回的震荡,使得整个流量调控的目标完成度略小于100%,而这并不符合平台的期望。

4. 线上流量调控的核心:调序公式

图片

以上是对Reward函数的一些设计和思考。那么 最核心的就是如何在线上使用 ,这就 涉及到线上流量调控的调序公式 。调序公式我们使用Δrk,rk是rank的意思,Δrk代表商品在前后两个时段的位置差。所以Δrk越大,就表明此商品的展示位置前移的越多。

我们知道不同的商品客单价不同,单价高的商品更有助于抬升平台整体的GMV。所以公式中间的虚线框是pctrpcvrprice,表明这个商品的曝光能够带来的期望GMV。这个值越大,该商品给平台带来的价值就越大。

参数α是强化学习的调控因子,模型的输出通过参数α来控制商品排序。举个极端的情况,如果把α制为0,那就意味该商品不会再获得任何的流量提升,因为Δrk为0,它的展示位置不会有任何迁移。

另外,考虑到不同商品原始位置下调序空间不同,这里加上这个log(rK_0)rK_0指的是商品原来的展示位置。例如原来展示在第1000位的商品提升100位,它的流量可能没有任何变化;而原来展示在第3位的商品挪到第2位,它的流量可能会有巨大的提升。因此对于原展示位置靠后的商品,调序的幅度会大于展示位置靠前的商品。
**
我们还引入一个介于0到1之间的止损参数β** ,当流量调控引发了整个平台的搜索效率下降时,止损参数就起到兜底的作用。如果β等于1,止损部分模块不发挥作用;如果β等于0,表明线上调控系统归0。

α_0是冷启参数,同时也为了平衡不同的商家GMV量纲上的差异。关于冷启参数α_0如何获取,我们首先假设α和β始终为1,α_0在当日调控中保持不变;另外假设调序前后个性化转化率与商品有关,个性化点击率与位置相关。根据以上假设及调序公式,计算出pvid下所有活动商品的位置改变量。当商品位置冲突时,我们的解决方法是,原排序位置更高的商品优先级更高,优先级较低的商品向后递推。在计算位置改变后pvid下所有活动商品的新pctr累积和作为点击数的估计。接着在pvid维度下进行模拟,以一定步长在α_0定义域范围进行枚举,直至所有pvid累计点击数和,且恰好大于点击流量目标。

右图是2021年618期间某一天流量随着时间逐步分发给商家的调控效果图,比较深色的阴影部分的线表明流量的完成情况是逐渐地上升的,也就说明流量是随着时间逐步分发给商家,最后使其能够达成流量目标,这就是调控的效果。

5. 离线流量模拟系统

图片

接下来又有一个问题是如何解决强化学习模型训练的冷启问题。不同于有监督学习,强化学习的初期冷启动阶段,也就是流量调控模型没有上线时,没有任何真实的数据来训练模型。针对此问题我们创意性地设计了离线的流量模拟系统。我们假设点击率pctr只跟展示位置有关,而点击转化率pcvr只跟商品本身有关。基于这些假设,就构造了一种离线的流量的模拟系统。

图片

用图和例子来解释这个生产流程。例如我们可以拿到搜索手机的排名顺序以及用户点击构面商品的日志,然后我们想把A手机从原来的第四位挪到第二位,那么这个位置变动将使原来第二三位的商品挤压下去,从而影响GMV的变化。因为考虑到前面做了一个假设,点击率只跟这个商品的位置有关。而当用户点击进入到了商品详情页后,具体是否购买商品就跟商品自身的质量有关。这是基于第二个假设,转化率只跟商品有关。通过这样的位置调整可以得到一个在新序列关系下的新GMV,由此我们可以计算奖赏函数。

所以我们 离线模拟数据的生产流程是 ,依据离线日志计算初始state,接着随机给出一个action,算出对应的新state和reward,然后循环进行从而构造多组state、action 和 reward。通过这种离线流量回放的方式将构造出的模拟数据作为冷启阶段的数据输入。这个系统的部署方式是,最开始使用100%的模拟数据来训练一版模型。将模型推上线运行以后,开始累积真实数据,然后使用90%的模拟数据和10%的真实数据来训练模型。随后不断地提高真实数据的占比,最后达到理想的训练结果。所以整个强化学习模型的部署是一个比较漫长的过程,模型效果逐渐变好。

04 强化学习模型升级

1. 原有方案及问题

图片

在模型取得了很大的业务收益基础之上,我们目前正在对强化学习模型做持续的升级,因为原来的模型方案还有一些可以改进的地方。第一是目前我们按小时级来做流量的调控,也就是每小时模型输出一次action,我们认为做的更快会更有价值。第二是我们以前更关注大促流量调控的目标是否完成,以后还要同时关注点击率、转化率、加购率等指标,因为行业效率是始终不能打破的底线。

2. 强化学习模型升级

图片

基于此我们提出两种解决思路:

第一个是分层强化学习。

设置两个agent,其中high level agent 负责把小时级的调控周期拆分到请求级别,而low level agent负责完成high level agent所指示的目标。也就是构建两类智能体,一个智能体专门负责分发目标做决策,另一个智能体负责具体的执行。这种方式可能会使模型更高效。

第二个是 多目标强化学习

构建多个强化学习模型,每个模型负责一个业务目标(目标完成度、点击率、转化率、加购率、效率等),分别输出相应的Action。由于商家在不同阶段经营目标不同,例如月底商家可能更关注加购车指标,而大促期间更关注转化指标。因此商家的经营模式和我们的技术模型也要随着用户浏览行为偏好和随时间的演进做一些自适应的调整。构建多目标强化学习模型不仅可以将不同业务目标全部囊括到模型中,同时可以做到可配置的融合目标。

图片

左侧图表示多目标强化学习模型,第一个塔负责输出目标的完成度,另外的几个塔负责输出效率指标,然后进行多塔融合。当前如何权衡目标完成度和流量分发的效率呢?这就需要做一些决策融合,也就是说,当行业效率不错的时候,以完成流量倾斜的目标为主;当行业效率不佳时,要保障大盘流量分发的效率,因此要减弱流量激励的强度。这里也涉及到决策的自动化的决策融合策略。

图片

如何在融合多目标强化学习模型输出的reward进行融合,寻找最佳平衡点的action? 也就是说,如果从目标完成度而言,将流量激励强度应变成1.2,而从效率而言,流量激励强度需要应变成0.8。在目标融合时需要对1.2和0.8两者之间做权衡。我们通过构建函数,以线性方式融合两个目标的收益,其中每个收益的参数灵活可配置。对于每个目标的收益,首先进行无量纲化处理,然后用参数w_1w_2来做融合得到最终的收益。这样强化学习模型就朝着优化最终的收益方向走。以上就是我们提出的目标融合和决策机制。

05 流量调控未来演进方向

图片

关于流量调控未来的演进方向我们也做了一些思考。当前存在的问题有几个:第一个是流量调控的精度不够高。预设的目标和实际流量分配结果之间还存在差距,我们希望差距变得越来越小;第二个是小目标的流量调控很难。也就是说对于整个商家的流量比较好调控,但是对于某一个商品很难做到的,因为个性化搜索有很多query约束,同时要兼顾用户体验,所以不能随意分发流量;第三个是目标设置还有些僵硬;第四是调序公式并不完美,需要寻找真正契合业务诉求并兼顾效率的调序公式。

基于以上提出的问题,未来的方向就有针对性地进行演进:

第一, 引入更稠密的action 和个性化特征,探索小步长精细化的强化学习模型; 第二 ,用步长自适应控制的强化学习模型来解决小目标调控的问题; 第三 ,用多目标融合和自动化调参来解决目标设置过于僵硬的问题; 第四, 优化调序机制。在调序公式中的红色部分加上基准桶(也就是零策略桶)的基础数据比较来决策Δrk调的更大还是更小。

分享嘉宾

图片


本文地址:https://www.6aiq.com/article/1665662093588
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出