Fork me on GitHub

网易严选 | 流量分发决策:既要又要的平衡之路

网易严选 稿

在流量分发场景,人们对算法模型有两层需求(既要又要):
不干预:流量分发由模型接管, 算法模型解决流量如何分发的问题。
干预:流量分发可以被干预, 算法模型解决流量如何调配的问题。
严选主站场景流量如何分发由搜推广解决,流量如何调配由在搜推广之上的流量决策解决,本文讨论如何实现高效、有效的流量调配,保证短期利益的基础上探索业务的长期价值。

1 流量分发场景

在流量分发场景,人们对算法模型有两层需求(既要又要):

1.1 不干预:流量分发由模型接管

每个用户每次的内容呈现由模型决策,模型以最大化模块当前的UV价值为目标,具有以下特点:

  • 模型决策过程黑盒,很难具有可解释性。
  • 模型决策效果>>HLP(HumanLevelPerformance),HLP可以视为某种具体分发规则的实现。

该场景下的流量我们称之为自然流量 ,自然的含义是指没有人为干预。

1.2 干预:流量分发可以被干预

很多情况下流量分发只考虑当下的UV价值是不够的,例如:

  • 出于战略目标,希望保证某些商品具有足够多的流量。
  • 商品已到库存成本警戒线,需要加大清库存。
  • 新品培育、换季趋势商品需要更多流量支持。
  • 为保证用户体验需要人为调整流量。

上述几个场景相当于指定业务流量分发的大方向大策略,在此之下依赖重排模型落地精细柔性的流量调配能力,以最小的代价实现流量调配的业务目标。

该场景下的流量我们称之为调配流量 ,主要作用在重排阶段 ,有针对性的精细调整。

图片

2 流量决策的目标

2.1 进一步提升模块效果

线上场景容易发生Data/Concept Drift,原因可能是营销活动、外部事件带来的突发变化,又或者是季节性变化。自然流量下的模型:

  • 自然流量分发模型为“T+1更新” + “实时特征”
  • 可以捕获变化,但需要一定的时间积累适应数据,等模型适应后变化已经消失。
  • 可以增加策略,但太过生硬无法逼近最优解。

Data/Concept Drift 的存在使得技术上存在优化空间。自然流量的分发模型也可以做 “实时训练” + “过曝算法”来优化问题,但因为搜推广的算法小团队都在一起,所以我们统一放到“流量决策”去及时、优雅的解决变化(Drift)问题。

同时明确好项目间的职责边界:论证有效的长期策略/算法/特征,优先在自然流量下的模型固化融合,其余由流量决策来承载。

2.2 关注业务的长期价值

业务的长期价值:

  • 自然流量算法:解决如何高效分发问题
  • 调配流量算法:解决如何有效干预问题

自然流量下的模型关注的是当下最优,无法以长期价值调配流量,也无法解决流量和业务协同的问题(详见流量需要被干预的场景描述)。

所以流量决策需要以长期价值为导向,同时尽量保证短期利益。

3 流量调配技术

真实的流量分发场景,用户看到最终的Item(广义表述,可以是商品、内容、活动)呈现,历经的Pipelin包括:召回→过滤/合并→精排→重排 。流量决策落地在重排阶段,同时流量决策需要先回答两个问题:

  • 对哪些Item进行流量扶持?
    涉及到业务长期价值和潜力Item挖掘,先按下不表。
  • 如何对扶持Item进行流量调配?
    对当下模块价值不产生大影响,同时满足需要的加量目标,最好做到每份流量的调配决策差异。

流量调配的技术方案在我们场景分为两种:

  • Machine Learning(ML) + Operations Research(OR),将机器学习的输出作为运筹优化的输入,通过目标定义和约束表达来调整排序位置。
  • 构建实时反馈系统,以控制论PID算法更新动态参数,决策调配的Item。

3.1 ML+OR

我们依赖开源包OR-Tools作为优化求解实现。精排阶段的输出提供CTCVR,扶持商品有流量目标 Demand,基于这些数据可以构建优化求解的定义。

  1. 定义求解器
    重排问题可以视为0-1规划,Rerank Matrix为重排矩阵,其中 代表该Item重排结果,行数据 为重排后的位置,列数据 为重排前位置
  2. 定义变量
    Rerank Matrix中的每个值均为 0-1 BooleanVariable。
  3. 定义约束
  • Rerank Matrix 矩阵的每一行、每一列相加为1;
  • 也可以加类目多样性约束,CateInfoMatrix为重排前每个位置的Item类目信息。

图片

最终在 Rerank Cate Info Onehot 矩阵中计算类目占比约束。

  1. 定义目标
  • 将重排前Item的 CTCVR 、流量Demand可以综合为 OrgScoreWeight
  • PosWeight 为每个位置的权重

图片

  1. 优化求解
    最终目标函数为:MAX(sum(Object_Info))

该方案的好处是可以实时基于数据求解,坏处是会引入额外 20ms-30ms的耗时,但可以在重排范围,变量数量,T+1 调用等方面去缓解耗时问题。

3.2 控制论 PID

PID(proportion integration differentiation) 是控制论中广泛使用的算法。实现PID的关键是构建实时反馈环境,基于误差动态调整参数,达到实际值在目标值的接受区间内波动的控制效果。具体看下图示意:

图片

图中Reference、Sensor、Controller共同构成PID的控制实现组件。
在每一个时间片内Sensor收集数据,计算和Reference差异,通过Controller更新参数调节,最终使得目标数据在Reference区间内波动。

在我们的流量决策场景里,将重排问题转化为预算花费问题(类似程序化广告投放),预估每个位置的千展价值CPM,扶持商品的位置上拉定义为预算消耗,重排问题定义目标如下:

image.png

C_{ij} 表示扶持商品j 在第i 份流量的价值, X_{ij} 表示扶持商品 j在第 i 份流量触发重排曝光,目标是触发调配效果的商品价值最大。

1pv_{after}表示调整后坑位价值, $1pv_{before}表示调整前坑位价值, B$为扶持商品总预算。

CTR_{ij}表示第 i 份流量中商品 j 的预估点击率,R 为重排模块中CTR的下限要求。

引入两个约束: 总调节花费要小于总预算 B ,扶持商品的总体CTR要大于下限 R ,这两个都是软约束, 希望控制在一个区间波动。
问题定义推导后可以得到和约束相关的参数 \alpha\beta (即是PID动态更新的参数):

image.png

  • \alpha控制预算花费,当预算未花费缺口大, \alpha 减小提升调整幅度。
  • \beta控制CTR下限,当CTR下滑较多, \beta变大降低调整幅度。

动态参数\alpha\beta 使用 PID 来更新:

image.png

每个时间片会计算误差来更新参数, r(t) 为目标值, y(t)为目标值。

k_p为当前误差权重, k_i 为累计误差权重, k_d 为前后时间片误差权重。

\phi为PID汇总误差u(t) 下的更新函数,一般可选指数函数(注意正负号调整)。

该方案的好处是动态参数的更新和实时请求解藕,流量调配的重排不会增加请求链路的耗时,坏处是当环境数据比较动荡,动态参数不稳定会导致控不准。

4 最后

本文为严选流量决策项目的阶段总结,错漏之处欢迎交流沟通。


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