分享

58 商业流量排序策略优化实践

 新用户0175WbuX 2022-02-07

  背景

  58作为国内最大的生活信息服务平台,涵盖了本地服务,招聘,房产,二手车,二手物品等多条业务线。 商业部门作为中台部门,其职能是服务各大业务线,辅助优化各业务线商业流量的变现效率,同时满足各业务线个性化,多元化的流量变现需求。

  在不同的商业产品类型以及不同的场景下,业务线对于变现效率和用户体验存在不同的诉求。 目前在listing模式下,当帖子候选数量较大时,排序对变现效率和用户体验的影响很大,满足业务线的多元化需求,在不同的商业产品提升变现效率的同时,兼顾用户体验,成为排序需要去解决的非常关键的问题。

  本文主要介绍商业策略技术团队在58商业流量上的排序策略优化实践,主要包括数据流升级,特征升级,模型升级,排序机制升级四个部分,并阐述在升级过程中,对新技术落地的实践效果和心得体会。

  优化前排序策略介绍

  在介绍上述4个部分升级前,先简要介绍一下优化前的基础模型情况。

  如上图所示,也从4个部分来阐述基础模型:

  58 商业流量排序策略优化实践

  ? 基础数据流

  数据流主要产出供后续样本生成和特征指标计算的基础数据。 在这个部分,需要完成离线日志合并,数据清洗以及一些基础的数据加工操作。 我们能获取的业务日志,一般有列表页展现日志,点击日志以及转化日志,日志合并操作会按指定的key(一般会打平到单次展现下广告粒度,方便后续进行聚合分析等操作)进行合并。 由于作弊,爬虫等原因,我们合并好的基础数据中包含了大量噪声,直接用来进行指标计算或者样本生成会对模型效果产生较大的影响,所以需要对合并完成后的数据进行清洗和反作弊,对于商业流量,因为有线上反作弊系统,所以拿到的原始日志中是会带有反作弊标识的,直接根据该标识对日志进行过滤即可(一次展现下如果有一个点击被识别为作弊点击,则去除所有改成展现下的日志数据)。 对于清洗,主要是通过ip黑名单和用户黑名单的方式来进行日志过滤。 完成上述操作后,我们会获得带有上百个基础字段的可用样本,这些样本数据会在下一个环节被用来生成最终样本和进行指标计算。

  ?特征工程

  人工特征工程一般包括特征设计,特征加工,特征选择三个步骤,首先在特征设计环节需要结合当前的业务场景,进行详细的数据分析,判断哪些类型的特征会对业务指标带来增长。 举一个例子,比如黄页的用户,返回率较低,大多数用户,当天找到服务后,很长一段时间都不会重复寻找相同服务,例如找开锁换锁,那么在黄页场景下,用户特征的效果就会大打折扣。 但是用户在找黄页服务的时候,对距离因素特别在意,那么在排序中增加lbs相关特征,效果就会比较明显; 不同业务线差异较大,二手车上就需要高度的用户个性化,所以特征设计环节,就是需要结合对业务的理解和数据分析,来判断该往哪个方向去设计特征。 这里以比较常见的,也比较通用的帖子维度历史点击率为例简要介绍一下几种常见的统计类特征加工操作: 1.位置消偏,listing模式下,位置对点击率的影响非常之大,通过统计数据也可以发现,很多业务线上,首屏占了大部分的点击,而这种位置带来的点击率会影响特征统计,所以需要对位置进行消偏,一般会采用COEC来进行位置的消偏; 2.平滑处理,这里主要是针对一些曝光量还不够的帖子,在曝光量不到达具备统计意义的情况前,通过这些数据计算出的点击率是极度不靠谱的,需要进行平滑处理,一般会采用贝叶斯平滑; 3.离散化: 对连续性的指标,会进行离散化或者归一化的处理,一个目的是增加其泛化能力,另外一个目的是可以加快模型的训练速度,减小模型复杂度。 特征选择一般会基于信息增益和单特征AUC来进行挑选。

  ?模型计算

  基础模型中支持FTRL(带正则的进阶版LR),GBDT以及wide&deep,支持这些模型的批量和增量的天粒度更新,其中wide&deep基于tensorflow server api实现线上批量预估。

  ?排序机制

  支持单一因子的排序,例如纯ctr,cvr或者按ecpm排序;

  上述基础模型在线上运行后,陆续发现了一些类似特征diff,特征实时性不够,排序因子较少等问题,针对发现的这些问题,我们进行各个部分的优化升级,取得了不错的效果。

  数据流升级

  基础版的数据流中,有几个比较明显的缺陷,会制约模型对业务的增长:

  (1)特征diff: 通过特征监控发现,在原有的数据流中,存在较多的特征diff(特征线上线下取值不一致)情况,分析后发现,这种情况出现在线上特征库更新的时候,比如当天10点,线上特征库中的统计类特征进行了更新,在10点前,线上服务获取的统计类特征依旧是未更新的,离线的样本拼接的都是更新后的数据,这样离线样本中10点前的特征就跟线上产生了diff。 由于集群计算资源不稳定,线上特征库的更新时间也不稳定,所以通过离线还原样本的方式,很难完全消除特征diff。

  (2)特征时效性: 在用户操作密集型的业务线,例如二手车,特征的时效性尤为重要,例如用户在前几分钟点击了宝马,那当前的排序中,就要能根据用户的实时行为做出反应,基础模型中,基于天粒度的特征更新,是无法达到这个目标的。

  针对上述两个需要优化的地方,我们升级了数据流,搭建了两条实时数据流,其中一条基于spark streaming,用于进行实时展现点击日志拼接,实时样本生成,另外一条基于storm,用于进行实时指标计算;

  (1)实时样本流:

  实时样本流采用实时拼接展现点击数据的方式,从kafka中读取展现点击数据,采用spark streaming,对日志进行实时清洗/反作弊处理,提取关键字段,实时拼接在线特征库中的特征,在集群稳定的情况下,相比线上的真实请求,实时流生成样本的延时约在1分钟左右,在如此短暂的时延下,样本中获取的特征数据跟线上请求中获取的特征数据,产生diff的情况会极大减少。 实时样本流上线后,特征diff率从5%下降到1%以内。 同时,实时样本流也为支持实时模型训练打下基础。 实时样本流请见下图:

  58 商业流量排序策略优化实践

  (2)实时指标流: 跟实时样本流不一样的地方是,部分实时指标的计算,不依赖展现点击日志拼接,例如用户对某车型的实时点击数,用户对某品牌的实时筛选次数,同时这部分对于实时性的要求更高,这里我们采用了storm(后续将升级为flink)进行实时指标流搭建,实时反应速度较spark streaming更快,经测试,从用户发生点击/搜索/筛选行为,到特征库中指标发生更新,在3s内完成,该实时特征作用于模型中,反馈在排序里面,显著提升了用户体验。 实时指标流请见下图。 下图主要以用户实时指标加工为例,其中除筛选行为可以直接通过筛选项进行聚合外,搜索词需要使用映射表映射到属性上(因为搜索词种类繁多,且无法直接跟帖子属性进行match匹配),点击/转化等行为因为是落到帖子上,需要跟进imc帖子属性信息,将其映射到属性上,各项行为数据聚合到属性和帖子粒度后,再经过一些算子,计算得到特征入库到特征库(redis)中。

  58 商业流量排序策略优化实践

  特征升级

  基础版模型中,有一类特征是比较难有效处理的,就是id类特征,例如二手车业务线中的车型,车系,品牌等,这类非连续类型的特征,无偏序关系,在基础版模型中,将其取值直接进行md5值编码后放入模型中,由线性古董模型的记忆功能去使得这些特征发挥作用,但这种处理方式的泛化能力较弱,制约模型效果。

  在深度学习出现以后,其强大的表征能力,能对人工特征工程进行有效补充,对于一些之前较难处理的特征,例如上述离散类型特征,能进行较好的表征,我们采用其embedding的能力,再结合attention机制,对部分离散类似特征进行了升级,取得了较好的效果,以二手车业务线两类特征为例:

  (1)用户兴趣类特征处理

  58 商业流量排序策略优化实践

  用户兴趣类特征向量的生成流程相对其他特征要复杂一些,输入的信息是用户对某些属性的累积操作数量,先对属性的离散值进行embedding,然后使用累积操作的数量,对embedding结果进行加权(标量乘以向量,attention),形成兴趣矩阵,最后进行pooling操作,使其变成固定长度的兴趣向量。

  (2)用户跟当前帖子属性的交叉特征处理

  58 商业流量排序策略优化实践

  以用户对当前品牌的累积转化行为特征为例,属于用户跟当前帖子属性的交叉特征,跟用户兴趣特征向量的区别在于,直接输出embedding后的加权向量即可。

  将这些特征表征好后,其表征方式将跟随模型一起进行学习,最后生成的表征向量,是满足模型优化目标的最优化表征方式。

  模型升级

  对 模型的升级动作主要有三种,实时模型,多任务模型,相关性模型,下面将分别进行介绍。

  ? 实时模型(Online training)

  业界对于模型时效性提升有过一些探索和尝试,比较主流的三种方式分别是1.动态特征(实时特征)+ 静态模型; 2.静态特征 + 动态模型(实时训练); 3.动态特征 + 动态模型。 这里我们的对模型的升级,指的是模型的实时训练(Online training)。

  在有了之前的实时样本流(见数据流升级)以后,模型的实时训练就能较方便实现了,实时训练中,模型我们采用的是FTRL,该模型的稀疏性较好; 开启实时训练后,每半小时,会dump一份模型,推送到线上服务器,线上预估服务支持模型热加载,达到Online training的效果。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多