普通视图

发现新文章,点击刷新页面。
昨天以前收藏

领域驱动设计DDD在B端营销系统的实践

通过营销活动实现客户/用户拉新、留存和促活是业界普遍采用的方法。为实现商户增长和留存,美团核心本地商业/商业增值技术部也构建了相应的营销系统来支撑商户的线上营销运营。在系统建设过程中,面临着业务体量大、行业跨度大、场景多样、客户结构复杂,需求多变等挑战。本文试图还原从0到1构建面向商户的营销系统过程中,并通过DDD(领域驱动设计)来应对系统设计和建设中遇到的业务复杂度高、需求多变、维护成本大等问题。

2 基本概念

软件系统的复杂性主要体现在三个方面。

  • 隐晦:一是抽象层面的隐晦,抽象系统时,每个人都有自己特定的视角,你需要站在对方的角度才能明白他为什么这么做;其次是实现层面的隐晦,代码是一种技术实现,通常与现实世界的业务概念脱节,无形中增加了理解成本。
  • 耦合:代码层面的耦合扩大了修改范围;模块层面的耦合需要跨模块/服务交互;系统层面的耦合则需要跨团队协作。从代码到模块再到系统,耦合的影响逐渐扩大,成本随之增加。
  • 变化:业务需求决定了系统功能,不同的用户需求不一样,不同的业务发展阶段需求在不断变化,系统功能要随着业务需求的变化不断调整,这时就涉及到系统改动的频次和范围。

DDD(Domain-Driven Design,领域驱动设计)是应对软件设计复杂性的方法之一,它能很好的解决上述三个问题,但其概念体系复杂(如下图所示),学习曲线陡峭,即便深入研读DDD的两本经典著作,项目落地时依然有点“捉襟见肘”。

在展开介绍DDD之前,这里先回顾一下历史:

  • 早期,计算机创新更多聚焦在语言方面,为软件工程师提供功能更强大的语言来操作计算机,充分使用计算机的算力。
  • 60年代,面向对象语言诞生,通过封装、继承、多态等特性进一步增强了语言的表达能力。
  • 80年代,出现面向对象的分析与设计,解决了如何构建类模型的问题,帮助我们更好地使用面向对象语言来实现系统,但没有解决如何把物理世界映射到计算机世界的问题。
  • 2000年,出现领域驱动设计方法,通过分析业务,抽取概念,建立对应的领域模型,再采用面向对象的分析与设计方法构建对应的类模型,达成了从物理世界到计算机世界的映射。

什么是领域?领域由三部分组成:领域里有用户,即涉众域;用户要实现某种业务价值,解决某些痛点或实现某种诉求,即问题域;面对业务价值,痛点和诉求,有对应的解决方案,这是解决方案域。什么是领域驱动设计?通俗地讲,针对特定业务,用户在面对业务问题时有对应的解决方案,这些问题与方案构成了领域知识,它包含流程、规则以及处理问题的方法,领域驱动设计就是围绕这些知识来设计系统。

以营销为例,营销系统所服务的用户有4类:运营、销售、电销人员和商户。解决3个核心问题:如何发券、发给谁、发什么(红包还是折扣券)。解决方案:通过营销活动来承载发券,不同的活动类型对应不同的玩法(如买赠、折扣、充送等);通过目标人群来确定发给谁;通过权益来定义发什么(如:红包、代金券、折扣券等)。

  本文将从战略设计、战术设计和代码架构分3个部分介绍领域驱动设计的落地:

  • 战略设计:确定用例,统一语言和划分边界。
  • 战术设计:概念模型转化成类(代码)模型。
  • 代码架构:将系统设计映射为系统实现。

3 战略设计实践

战略设计之前,先要确定用例,也就是业务是怎么玩的,有几种常见的方法:

  1. 用例图:最简单直观的表达了用户与系统的交互。
  2. 用户故事:敏捷开发模式下用的较多,从Who、What和Why三个维度描述了业务需求。
  3. 交互原型:用户操作的页面及其操作流程,其缺点是过于关注用户体验,而忽略了业务底层逻辑。
  4. 事件风暴:关注业务的底层逻辑,但使用门槛较高,适用于大型而复杂的业务分析。

下图是营销系统的用例图(起初并没有这么完整,这是多次迭代后的结果):

确定业务玩法后,接下来是统一语言。从用例里抽取概念,并对概念进行甄别(去伪存真,抽象合并)找到真正描述业务的概念。比如,有多种方式来描述活动规则:充值送规则、返还规则和档位等,技术可能会泛泛地称其为规则,业务人员则用档位来描述(比如充值送活动,充1000送100红包,充2000送300红包,充3000送500红包,那1000、2000、3000就是业务所认为的档位)。抽取概念时,尽量采纳业务侧的叫法,这样统一语言比较容易推行。

接着是明确概念的含义,概念由术语、Term(术语的英文版)和含义三部分构成。含义明确的术语就是统一语言,这些术语将用在日常需求沟通、产品文档,技术设计以及代码实现中。

明确概念后,接着理清概念之间的关系(1对1,多对1,多对多),确定概念所代表的的业务实体的核心属性和行为,从而得到概念模型。后续在业务需求讨论、产品和技术方案设计时,基于这个概念模型,使用统一语言进行描述,大家能很容易对齐;同时精心抽出的概念和建立的概念模型更接近业务本质,为后续的战术设计打下了基础。

基于统一语言和概念模型,业务 - 产品 - 技术三个角色比较容易就需求达成共识,保障沟通的一致性。

缺少这些就很容易出问题,如:刚开始做营销系统时,在如何描述“商户”上,没有统一语言,资金域有三个概念来描述商户(资金账户、账号ID、资金账号),商家域有四个概念描述商户(商家账号、商家ID、登录号、登录ID),到了营销域,不同的人采用不同的概念来描述商户,造成了沟通的混乱。给商户发红包时,“资金账户、账号ID、资金账号、商家账号、商家ID、登录号、登录ID”这些概念都可以描述商户,但业务人员弄不清这些概念之间的区别,导致ID误用,红包发错。事后对这些概念进行了梳理和统一,营销域只关注资金账户和商家账号,系统功能上明确使用资金账户或商家账号来发送红包,这样就不易出错了。

概念模型是一张大网,描述了概念间的关系以及关键属性,但还不能直接映射为代码模型,要映射为代码模型,还需拆解,化繁为简。

本源论认为世界的本质是简单的,复杂问题由多个简单问题构成;康威原理认为系统架构受制于组织沟通架构,系统落地时,首先要确定系统边界,再依据系统边界组织分工。这两个原理表明:我们可以将复杂问题拆解为多个简单问题,并针对团队资源组织分工协作。

这里提供一种拆解方法(来自美团内部)给出了一种拆解方法:按纵和横两个维度来拆,纵是从业务价值和目标维度划分,横是从功能的通用性维度划分。这里尝试从业务角度来拆,没有系统支持时,业务要在线下运转,通常根据要达成的业务目标,将业务流程或业务组分拆解为多个节点,并定义每个节点的职责以及对应的规范和标准,安排对应的组织或人员执行。简单地说,就是从业务问题和解决方案出发,拆解到对应的人。因此基于业务的拆分通常能实现系统用户、业务问题和解决方案之间的一致性。业务系统是把业务的玩法从线下搬到线上,在进行系统拆分时,也可以使用这个思路。从三个层面来进行:

  1. 基于涉众域拆解:也就是按用户相关性进行拆解,不同的用户使用不同的系统功能,如:CRM由市场人员、销售人员、客服人员三类角色协同完成客户触达,签约合作,售后服务三大职能,针对这三个角色建设相应的系统能力。这种拆解方式比较简单,但也存在较大的局限性,可能导致功能的重复建设。
  2. 基于问题域拆解:不同角色/用户要解决的问题是相同/相似的,可基于问题域进行拆解,如营销系统的用户包括销售、商户、销运等角色,但它核心是要解决如何发券(活动),发给谁(人群),发什么(权益)的问题。基于问题域的拆解相较于基于涉众域的拆解更加抽象,但也可能复用性不够。
  3. 基于解决方案域拆解:不同的问题,可能有相同的解决方案,如HR域有请假审批、财务上有报销流程、CRM领域存在客户资质审批,三个领域各自需要解决审批流程的问题,可以构建通用的审批流引擎来统一解决,这是基于解决方案域进行拆解。基于解决方案域的拆解最抽象,也最贴合业务本质,但也容易陷入过度设计的陷阱。

营销系统基于问题域拆解为五个子域(活动域,权益域,人群域,推送域,数据域),每个子域解决特定的问题,各子领域相对内聚和简单:

业务系统要运转起来,需要子域之间相互配合,这就要定义上下文映射,实现不同子域间的协作。如活动域关注的两个目标人群:一是资金账户(表示已签约的商户);另一个是商家账号(表示未签约商户)。资金账户是财务域定义的,而商家账号是账号域定义的,两个概念都不是营销域原生概念。此时,营销域需通过某种方式依赖外部概念,将外部概念映射到营销域,通过防腐层来对接外部服务来实现这种映射。领域驱动设计里定义九种上下游映射关系,这里不赘述:

下图是营销系统的整体上下文关系:

从用例分析,统一语言到子域拆分,初步完成战略设计,但这并非终局,战略设计是一个持续迭代的过程,迭代的来源主要有3个:

  1. 用例精化:在探讨需求的过程中,用例不断丰富。
  2. 需求变更:业务不断发展带来需求变化,进而影响用例及相关概念的内涵,概念模型亦随之调整和迭代。
  3. 方案选型:当产品,业务或技术发生较大变化时,可能需要采用另一种方式实现它,这时所采用的概念会有所不同。比如早期构建营销活动域时,通过参与规则来定义谁可以参加活动,将商户与参与规则进行匹配,符合就能参与。这种方式带来的问题是无法提供一个完整的活动人群列表,除非将所有商户(5000万+)匹配一遍。随着业务方越来越重视活动参与商户的分层,触达和转化,引入目标人群的概念,通过目标人群来保存所有可参加活动的商户。从参与规则到目标人群,概念发生了变化,底层模型也完全不一样(参与规则是一套规则体系,而目标人群由筛选服务提供),实现了战略设计上的迭代。

有了战略设计,构建了统一语言和概念模型后,如何验证概念模型呢?通常用两个方法:

  1. 场景走查:把模型代入到所有的场景确认一遍,确定所抽象出来的概念模型和统一语言能正确描述它。
  2. 业务预判:未来业务的变化会在哪里,当变化发生时,概念模型的内涵和外延是否方便扩展并支持到变化。

4 战术设计实践

战略设计得到了概念模型,战术设计则是将概念模型映射为代码模型,有很多编程范式,比如事务脚本、表模式、面向对象,函数式等,最好的方式是面向对象的实现。

从概念模型到对象模型:

  • 首先,概念是分层的,如营销活动是一个泛化概念,其下还有充值送活动、消费返活动,买赠活动等具体活动。构建对象模型时,通过派生/继承来实现概念分层。
  • 其次,概念关系映射成对象关系,比如营销活动包含了档位和库存,那在构建营销活动对象时,可通过组合实现这种包含关系(档位对象和库存对象成为营销活动对象的属性)。
  • 最后,概念的属性行为,可以直接变成对象的属性和行为;概念的状态机以及生命周期也会变成对象的状态机。

两类对象:实体和值对象,这两者的区别是是否有统一标识和自己的状态。

有了对象模型,还需通过聚合根完成封装,如何确定聚合根的粒度?营销活动包含活动、库存、档位、档位项、目标人群五个对象,如果采用小聚合根模式,一个对象对应一个聚合根,这样每个聚合根都很简单。但从业务角度看,库存或档位会影响活动的状态,如:修改了库存或档位,活动需要重新审批和上下线,这种业务上的耦合需要在技术上进行处理。此时,就得在小聚合根上构建领域服务来封装这些逻辑。

另外一种模式是大聚合根。围绕活动,把活动相关的概念(活动、库存、档位、档位项、目标人群)都封装起来,但聚合根比较复杂,影响活动加载(一些活动的目标人群上百万,懒加载可解决问题,但增加了复杂度)。

聚合根的设计要遵循一定的原则:

  1. 满足业务一致性、数据完整性、状态一致性。比如库存档位和活动状态要一致,在数据上也要完整,不存在没有档位的活动,也不存在没有库存的活动。
  2. 技术限制。有些实体会带来技术挑战,如数据量太大,可抽出来单独考虑。
  3. 业务逻辑不灭,在业务封装与适度的职责边界之间寻找平衡。不管是大聚合根还是小聚合根,业务逻辑永远都是存在的,就是看把它放在哪里。

如下图是营销系统的聚合根:

聚合根已经非常接近代码实现,落地代码时,大家还会纠结用贫血模型还是充血模型。Spring MVC通常运行在单例模式下,引入充血模型会增加理解成本和技术复杂度。另外,不适合放在聚合根里的领域逻辑,可以放在领域服务里,如:同时存在多个充值送活动时,用户只能参加优先级最高的一个,在充值送活动聚合根里会标识活动的优先级,但挑选优先级最高的活动并非聚合根的职责,但确实是领域逻辑的一部分,此时可通过领域服务实现。

从概念模型,类模型到代码实现,整个过程都要使用统一语言。在落地代码时,代码要体现出业务含义,比如下图的例子,要避免左边updateStatus()这样的方法,它没有体现业务含义(必须阅读代码实现,才知道这个方法做了什么);图中右边的submitCampaign(),approveCampaign(),cancelCampaign()则有明确的业务含义。

5 代码架构实践

完成战术设计后,如何组织代码架构?无论是六边形架构,整洁架构还是洋葱架构本质上都是围绕着领域模型展开,应用层、基础设施层和外部接口都依赖领域模型:

下图是我们团队的工程实践,与前面三个图本质上是一样的。领域层和应用层次放在中间(两者都属于领域逻辑),基础设施和用户接口依赖中间层:

6 总结

  • 我们做的大部分系统都不是全新系统,如CRM、HR或SCM等,已经有很多业界实践,可充分借鉴这些实践,没必要自己创造新概念。
  • 要重视统一语言。没有统一语言就不会有概念模型,没有概念模型就不可能有靠谱的代码模型,拿到需求后就开始设计代码模型是不靠谱的。
  • 领域驱动设计是团队工作。现实中没有一个是严格意义上的领域专家,所有参与到这项工作的人都可以是领域专家,整个工作可以由技术团队主导,但一定要落地到产品和业务。
  • 拥抱变化,持续迭代。模型是相对稳定的,但并非一成不变,业务理解的深度,抽象的角度与方式,业务的变化都会影响到领域模型,领域模型的建立是持续迭代的过程。

这里分享几个常见的误区:

  • 深陷领域驱动设计的概念体系。在代码里生搬硬套领域驱动设计里的概念,比如聚合根、值对象、实体等,掰扯概念之间的细微差异,设计复杂的领域事件等。这反而增加理解成本,让系统变得复杂。领域驱动的精髓在于从业务出发,抽象出业务领域知识,构建概念模型,一步一步将这些概念模型映射成系统。至于如何采用聚合根、领域服务、实体、值对象、领域事件等,可以灵活取舍。
  • 试图通过精心设计来获得领域模型。领域模型不是设计出来的,而是通过战略设计的几个步骤,从业务中抽象出来的,最重要是理解业务,对业务进行抽象。
  • 使用了DDD就一定会产生好的领域模型的想法也不可取,我们知道飞机怎么造,但我们不一定能够造出好飞机,但如果我们知道这个方法,可以少走弯路。 

在聊需求的那一刻,设计就开始了,统一语言就是设计的一部分。

解决方案域在模型维度分为四层:

  1. 功能模型:产品表达给我们业务的玩法,我们把它变成了用例,从用例里抽取出功能模型。
  2. 概念模型:对功能模型进一步抽象,统一语言,形成概念模型。
  3. 代码模型:将概念模型映射为代码模型。
  4. 数据模型:业务数据需要存储,需要设计对应的表结构。

这里有两个陷阱:

  1. 看到功能模型后,就开始设计数据模型,考虑数据该怎么创建、怎么更新、什么时候该删除,沦落为CRUD boy。
  2. 看到功能模型后,就开始考虑操作数据的流程是什么,陷入到事务脚本陷阱。(对于一些简单的功能,不排斥使用事务脚本,但对于复杂功能,事务脚本的维护成本非常大)

另外,领域至少可以分为两大类:一是学科型,比如财务、会计、图形学、动力学,这类系统的设计须先深入理解学科知识;二是实践型,如CRM、订单交易等,是业务经验的总结,这类系统的设计不妨参考前人的实践。当然,如果自己的业务具有独特性,那就只能靠自己摸索了。

7 参考资料

大众点评内容搜索算法优化的探索与实践

美团在本地生活服务领域深耕多年,在帮助用户完成交易的同时,积累了丰富的图文视频内容供给。依托于这些内容供给,我们可以满足用户更丰富的需求类型,从交易环节扩展到交易前的种草、交易后的体验分享环节,将大众点评建设成为本地吃喝玩乐的社区。

在大众点评的用户中,有相当高比例会通过搜索来查找本地信息,而内容搜索是辅助用户决策、促进社区氛围的重要工具。例如当用户搜索“火锅”时,除了能看到火锅相关的商户和团单,还可以看到图文、视频、评价、笔记等多种形态和类型供给呈现;搜索“圣诞节活动”时,直接以双列内容形式呈现搜索结果,可以更加生动形象。

通过持续优化内容搜索体验,可以带来更多内容消费流量,进而吸引更多的用户转化为作者,激励创作出更多的内容,而有了更多的内容之后,又可以进一步带动体验提升,最终形成一个良性循环。从实际效果来看,内容搜索的价值也得到了用户的认可,如下图是用户访谈原声,可以看到通过内容搜索结果逐步拓展了用户对搜索功能的认知。

内容搜索与典型类型的搜索如网页搜索、电商搜索、商户搜索等相比,有如下差异点:

  • 在优化目标上,网页搜索更强调搜索满意度,电商搜索更看重商品交易总额,商户搜索更关注用户到店消费意向率,而内容搜索既要考虑搜索满意度,又要考虑点击和点击内容后的停留时长、点赞/收藏/转发/评论等交互行为。
  • 在地域约束上,网页搜索和电商搜索没有特别强的地域限制,而商户搜索和内容搜索却有非常强的LBS区域限制,因为用户在美团点评的搜索场景下更希望查找附近的商户和内容。
  • 在供给类型上,网页搜索、电商搜索、商户搜索结果类型较为单一,而内容搜索有非常多的类型,比如笔记、评价、旅游攻略、菜谱等。
  • 在结构化程度上,电商搜索和商户搜索相对较高,因为有商家和销售维护相应信息;网页搜索一般结构化程度比较低,可被检索的网页大部分信息是非结构化的;内容搜索的供给中既包括图片、视频、文本等非结构化信息,也有内容关联的作者、商户、关联话题等结构化信息,整体呈现半结构化的特点。
  • 在供给规模上,电商搜索和商户搜索供给量级相对可控,因为商品、商户的生产维护成本较高;而网页搜索和内容搜索的供给生产成本低,规模会相对更大一些。
  • 在更新频率上,一个商品从上线到下架、一家店从开业到关停,需要相当长的时间周期,而内容和网页生产和更新频率都更快一些。

从以上对比来看,内容搜索在各个维度上与典型的搜索类型存在很大区别,这就需要结合自身特点,进行相应的技术选型和方案设计。

我们对面临的困难挑战进行总结,主要包括以下四个方面:

  1. 多种类型供给并存,且供给中既有结构化的信息,又有非结构化的信息。
  2. 内容供给量级大且更新频繁,导致用户行为分散,单篇内容较难获取到足够的用户行为数据;在分发过程中又有较强地域限制,形成类似蜂窝状的消费规律,进一步加剧了用户行为稀疏的问题。
  3. 在优化过程中既要拉动内容消费指标,也要兼顾搜索满意度,在推进中需要综合平衡多个维度。
  4. 在最终搜索结果中,内容与商户、团单等以混排形式呈现,需要与其他类型搜索结果协同发挥价值,共同满足用户需求。

2 内容搜索优化实践

下面我们会从面临的问题和挑战出发,分享如何通过链路各环节,持续优化内容搜索的体验。

2.1 供给理解

面对用户持续创作生产的海量内容,我们需要对其进行充分理解,包括显式标签和隐式表征两部分工作。显式标签体系主要包括:

  • 类目标签:通过构建分发前台后台两套标签,可以实现前后台类目灵活映射。当需要进行前台类目体系调整时,可以通过调整映射层快速支持,减少对后台打标任务的影响。
  • 细粒度标签:类目标签个数有限,在推荐搜索等分发场景还需要更细粒度的刻画,为此构建主题标签、概念标签等,相互之间有一定的关联和组合关系。
  • 属性标签:前两类标签更多关注内容在讲什么,而属性标签更侧重于刻画内容本身是什么,比如是否涉政涉黄、是否重复、是否命中生态治理等。

除了显式标签,分发链路很多环节还需要更加泛化的隐式表征。结合实际场景特点,我们自研了多模态预训练模型,通过引入对比损失把图文表征对齐到统一特征空间,并结合自监督对比学习训练范式、掩码学习、图文匹配等优化,提升了跨模态交互效果。

2.2 召回环节

作为最前置环节,召回决定了一次搜索查询所能拿到的候选总集合,直接影响到后续环节的效果天花板。搜索场景的召回主要包括:

  • 语义召回:搜索召回需要首要保证结果相关,为此对语义召回进行了多维度的设计,包括不同颗粒度的语义单元召回、对用户需求进行细化和泛化处理。
  • 个性化召回:结合用户地理偏好、特定区域偏好与用户历史消费内容相似度等,设计召回通路满足个性化需求。
  • 策略召回:基于用户不同场景的实际需求设计对应策略,包括最新最热内容的召回、更符合种草需求的高价值攻略召回、定向搜索作者内容或特定类型如菜谱的召回等。

其中语义和个性化召回有很大部分通过隐式实现,语义召回更侧重搜索词自身信息的刻画,而个性化召回还融入了用户偏好、上下文等很多信息。

2.3 排序环节

排序包括粗排、精排、多目标融合排序、异构混排等多个环节,随着逐层筛选,打分量级依次减小,可以使用结构更复杂、规模更大的模型。

介于召回和精排之间的粗排环节,需要兼顾准确性和全面性、权衡打分能力和时延性能,发挥承上启下的作用。为此引入用户在全域的行为样本,达到系统层面的纠偏作用;我们通过表征蒸馏、分数蒸馏和顺序蒸馏等方法,提升模型表达能力;在常见Query-Doc双塔结构基础上,引入交叉塔(如交叉点击率、时长等),提高特征交互能力。

精排环节着重介绍在输入表征层、多目标建模层和输出层的相关工作。

首先是模型输入表征层,为了准确刻画Query、用户、Doc、上下文等多种维度、各种粒度、各种来源的输入信息,我们从以下几个方面进行表征。

  • Query语义表征:搜索场景下Query是用户需求的直接表达,借鉴向量检索的工作,对Query进行了不同粒度的刻画,通过多粒度语义网络进行搜索词表征。
  • 用户序列表征:引入用户全站行为序列,捕捉用户长短期个性化偏好。搜索场景需要兼顾个性化和相关性,但用户历史行为和当前搜索词不一定存在关联,为此在主流建模方案DIN基础上,引入零向量注意力机制来权衡个性化和相关性。具体来说,引入了Query语义表征,对长尾低频Item做过滤,帮助模型决策哪些历史行为和当次搜索词相关,且在历史行为和搜索词无关时不引入额外的噪声。
  • 多模态表征:图像、摘要等创意维度信息,对于用户决策至关重要,也是内容高效分发的基石。为此引入高维的多模态预训练向量,并结合场景进行端到端降维,既引入了丰富的多模态语义信息,又能够兼顾线上时延,对于刻画用户的多模偏好、提升新内容高效分发至关重要。
  • 特征重要度建模:通过动态权重的建模范式,捕捉样本粒度的动态表征,可以有效增强模型的表达能力。通过在EPNet、MaskNet等模型结构基础上,结合场景特点设计域感知的多门控网络、并联结构,实现了特征重要度的动态建模。

接下来是多目标建模层,由于点击、时长、交互等各个目标行为量级不同,导致优化过程中很容易出现跷跷板问题,为此在模型结构、优化方式等方面进行相关探索。

  • 模型结构:我们采用MMoE和PPNet融合的方案,为了防止Gate极化现象,对门控网络结构上进行dropout、设计skip connection等;在各个任务上会引入个性化因子,通过个性化网络PPNet建模,MMoE和PPNet的输出会拼接后传到预估输出层。
  • 优化方式:底层稀疏Embedding很容易受到各个多目标梯度反传的影响,造成梯度冲突,从而引起指标跷跷板问题。为此针对重要的表征增加参数量或新增任务特定表征,并对重要表征控制梯度反传,时长或交互目标不更新底层部分Embedding或更新时设置较小学习率。

最后是模型输出层,为促进新内容、长尾内容分发,并保证模型输出的预估分的稳定性和准确性,我们从探索结构和学习目标上进行了对应优化。

  • 探索结构:搜索场景消费内容个数比推荐少,马太效应问题也更加严重,对行为积累不够充足的新内容或长尾内容,预估不够准确。为此设计全链路冷启和探索通道,并基于不确定性预估范式,在模型中引入基于对抗梯度的探索网络,基于CTR预估的不确定性和对抗梯度在输入侧做扰动和探索。
  • 学习目标:之前搜索场景采用的学习目标是Listwise的Lambdaloss,在排序能力上优于Pointwise,但预估准确性上不足,会造成后续链路无法使用预估分。业界有不少研究关于Listwise损失如何做预估校准,例如KDD 2023中阿里巴巴校准工作JRC、CIKM2023中Google校准工作等。参考相关工作并结合场景特点,在原有的LambdaLoss基础上增加用于校准的Logloss,在梯度更新上控制校准Loss不影响底层的Embedding更新,只更新多目标建模层和输出塔的参数,提高预估分数的稳定性和准确性,方便后续融合、混排等环节使用。

2.4 满意度优化

除了优化内容消费指标如点击、交互、时长等,搜索场景还很重视满意度优化。用户对搜索结果是否满意,可以从结果是否相关、是否足够新鲜、是否是对应地域、内容质量高低等显式维度进行刻画。

相关性是搜索满意度中最基本、最重要的维度。大众点评的很多内容有关联商户,可以比较方便地获取很多明确的结构化信息,比如商户类目、区域等,可用于辅助判断相关性。但也可能由于内容误关联商户带来噪音,为此需要综合从图片、文本、商户信息进行关键信息抽取,作为相关性模型的输入。

除了相关性,搜索结果的时效性也很影响用户体感。比如迪士尼疯狂动物城园区开始对外开放,属于突发性热点,通过敏锐捕获到突发热点,在搜索“迪士尼”时优先呈现对应的结果,可以带给用户惊喜。另一类查询词如“平安夜”属于周期性时效性热点,每年到这个时间段都会有这样的热点。为了更好地对时效性进行建模,从多个来源挖掘建立了热点事件库,接入商家自己提报的新鲜事,建立独立召回通道进行承接,并结合线上点击反馈进行误识别纠正。

以上满意度的评测通常较为依赖人工标注,近期开始探索自动化标注,对比分析如下:

  • 在成本和效率上,人工标注需要准确理解搜索诉求,并对结果进行精确评判,从相关性、地域性、时效性、内容质量等维度进行刻画,成本非常高,通过自动化标注可以极大降低成本。
  • 在标注准确率上,虽然还没有完全达到人工标注的水平,但自动化标注也达到了可用标准。
  • 在标注维度上,自动化标注可以比较方便地对原有标注维度进行扩充,成本变化可控,比如在Prompt中提供用户的历史行为和偏好,就可以综合判断个性化需求是否得到了满足。
  • 在标注稳定性上,人工标注质量可能会受标注人员主观判断甚至心情影响,但自动化标注不会有这样的问题。

在具体实现上,我们通过分步推理来实现自动化标注,首先分析用户当前意图,再结合当次搜索Query、搜索意图、搜索结果等信息,从几个维度对搜索结果进行分析,最终综合判定当前搜索结果对需求的满足程度。

2.5 多目标融合

在得到内容点击、交互、时长、满意度等多维度的预估分数后,多目标融合层负责融合各个维度分数并排序。

  • 精准预估:多目标融合的前提是保证各个因子的打分稳定性和精准性,这也是前文提到做排序和校准联合建模的原因。
  • 融合搜参:通过AutoML方式进行自动搜参,寻找帕累托最优解,针对细分流量进行单独搜参,更加精准地刻画不同场景下对于各个目标之间的不同需求。
  • 分发调控:将生态或调控导向的因子引入融合公式,进行分发调控,比如对于新内容的扶持、更老内容的分发治理、近距离和特殊供给扶持等。

2.6 异构混排

前面各环节动作集中在内容搜索自身链路上,而最终内容是作为搜索结果的一部分和商户、团单等不同类型结果混排,追求整体搜索收益的最大化,为此需要进行多元异构混排。业界常见的混排建模方式包括端到端建模、价值融合公式、序列生成和评估等。

此外,本地生活领域流量分布有独有特点,在用户快决策和慢决策的场景下,对内容的需求存在差异,午餐和晚餐流量高峰期对内容的点击偏低,下午茶和夜宵等时段内容消费意愿更强。结合内容和商户峰谷差异,依托工程能力如流量价值预估、模型算力和服务稳定性监控等,进行算力动态适配,从而保证整体搜索结果更能满足用户需求。

3 总结与展望

综上所述,大众点评内容搜索通过优化用户体验持续提升渗透率,进入快速增长阶段。在商户体系之外构建了基于内容的搜索分发能力,同时针对站内需求和供给特点进行了专项建设。

在后续工作中,希望建立体验问题的自动发现机制,帮助产运促进供给生产,并推动大模型在各个环节扎实落地、提升全链路的时效与性能,让内容得到高效准确及时的分发,进而在本地生活信息领域形成体验优势,助力建设本地吃喝玩乐社区。

4 招聘信息

大众点评内容智能团队持续招聘中,如果你对大模型应用、搜索算法、内容理解等方面工作有经验有热情,欢迎联系 [email protected],期待你的加入!

5 参考文献

  • [1] Li S, Lv F, Jin T, et al. Embedding-based product retrieval in taobao search[C]. Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery & Data Mining. 2021: 3181-3189.
  • [2] Ai Q, Hill D N, Vishwanathan S V N, et al. A zero attention model for personalized product search[C]. Proceedings of the 28th ACM International Conference on Information and Knowledge Management. 2019: 379-388.
  • [3] Chang J, Zhang C, Hui Y, et al. Pepnet: Parameter and embedding personalized network for infusing with personalized prior information[C]. Proceedings of the 29th ACM SIGKDD Conference on Knowledge Discovery and Data Mining. 2023: 3795-3804.
  • [4] Wang Z, She Q, Zhang J. MaskNet: Introducing feature-wise multiplication to CTR ranking models by instance-guided mask[J]. arXiv:2102.07619, 2021.
  • [5] Chang J, Zhang C, Hui Y, et al. Pepnet: Parameter and embedding personalized network for infusing with personalized prior information[C]. Proceedings of the 29th ACM SIGKDD Conference on Knowledge Discovery and Data Mining. 2023: 3795-3804.
  • [6] Burges C J C. From RankNet to LambdaRank to LambdaMART: An Overview; 2010[R]. MSR-TR-2010-82. Available from: https://www.microsoft.com/en-us/research/publication/from-ranknet-to-lambdarank-to-lambdamart-an-overview, 2010.
  • [7] Sheng X R, Gao J, Cheng Y, et al. Joint optimization of ranking and calibration with contextualized hybrid model[C]. Proceedings of the 29th ACM SIGKDD Conference on Knowledge Discovery and Data Mining. 2023: 4813-4822.
  • [8] Bai A, Jagerman R, Qin Z, et al. Regression Compatible Listwise Objectives for Calibrated Ranking with Binary Relevance[C]. Proceedings of the 32nd ACM International Conference on Information and Knowledge Management. 2023: 4502-4508.

如何利用「深度上下文兴趣网络」提升点击率?

点击率(CTR)预测是在线广告、推荐系统等领域的一个基础任务,主要目标是预测用户点击某个Item的概率。用户行为序列中蕴含着丰富的用户兴趣信息,这对于CTR预测至关重要。然而,大部分用户行为序列模型只从用户的点击行为中建模用户的正向兴趣,而忽视了上下文信息,即点击Item周围的其他Item,导致效果受限。

我们认为上下文信息在用户行为序列建模中非常重要,因此提出了一种名为深度上下文兴趣网络(DCIN)的新模型,可以对点击及点击周围的展示上下文进行统一建模,以学习用户的上下文感知兴趣。DCIN由三个关键模块组成:1)位次感知的上下文聚合模块(PCAM),通过注意力机制对展示Item进行聚合;2)反馈-上下文融合模块(FCFM),通过非线性特征交互,融合点击和展示上下文的表征;3)兴趣匹配模块(IMM),激活与目标Item相关的兴趣。

此外,我们还对线上性能进行了针对性优化,使得DCIN模型可以在大规模的工业广告系统上部署。我们提出的DCIN方法在离线和线上实验中都取得了显著的效果提升。目前已经在我们美团线上广告系统落地并全量,带来了1.5%的CTR提升和1.5%的RPM提升。

1. 背景

点击率(CTR)预测任务的目标是预测用户对某个Item的点击概率,这对于在线广告和推荐系统等领域至关重要[5, 16]。这里我们主要关注CTR预测中的用户行为序列建模问题。用户行为序列建模的目标是挖掘用户行为序列中蕴含的丰富的用户兴趣,更准确地理解用户的兴趣和偏好,从而提供更个性化的推荐服务。许多工作[7, 11, 13, 18, 21, 22]从用户的点击行为中捕捉用户的兴趣,大大提高了CTR模型的效果。

然而,一些研究[13, 15]发现用户的点击行为并不能完整地刻画用户兴趣,导致仅从用户点击行为中得到的用户表征有偏。为了解决这个问题,DFN[17]、DUMN[1]等一些开创性的工作引入了用户的未点击行为来捕捉用户的负面偏好(如不喜欢),取得了不错的效果。不过这些方法虽然引入了未点击行为,但它们将用户的点击和未点击行为分开建模,忽视了点击和未点击Item之间的交互。通常,智能手机的屏幕可以同时展示许多Item。用户的点击行为不仅由目标Item与用户兴趣之间的匹配程度决定,而且还受到展示上下文的影响[2, 12, 20]

如下图1所示,当用户想买一件T恤时,如果周围的Item是智能手机、鞋子或吹风机,他可能会点击绿色T恤,因为这些Item对他来说很无聊。但是,当周围的展示Item都是T恤时,他可能会点击蓝色的那一个,因为蓝色T恤比绿色T恤更符合他的兴趣。基于上述分析,我们认为展示上下文在用户兴趣建模中也是至关重要的。

图1 展示上下文示例,用户的点击行为可能会受到其他展示Item的影响

为了从用户的点击行为和相应的展示上下文中提取出具有上下文感知的用户兴趣表征,我们提出了深度上下文兴趣网络(DCIN)。具体来说,我们首先设计了一个位次感知的上下文聚合模块(PCAM),该模块通过注意力机制对展示Item进行聚合。同时,我们考虑到位次偏差[9, 10],并将位次信息集成到PCAM中。

其次,我们通过反馈-上下文融合模块(FCFM),利用非线性特征交互将点击和相应的展示上下文的表征融合在一起,以捕捉用户的上下文相关兴趣。最后,我们使用兴趣匹配模块(IMM)来匹配与目标Item相关的行为。此外,我们还设计了相应的线上落地方案,使得DCIN模型可以在大规模的工业系统上部署。具体来说,我们的贡献如下:

  • 我们强调了引入上下文信息进行用户兴趣建模的重要性。上下文信息可以帮助我们更准确、全面地捕捉用户的兴趣;
  • 我们创新性地设计了序列模型DCIN,它有效地集成了展示上下文和位次信息,以获取用户的上下文感知兴趣;
  • 我们进行了广泛的线下和线上实验,结果都证明了DCIN的优越性。目前DCIN已经在我们的在线广告系统中全量,并带来了1.5%的点击率(CTR)提升和1.5%的每千次展示收入(RPM)的提升。

2. 深度上下文兴趣网络

2.1 CTR模型介绍

2.2 深度上下文兴趣网络

DCIN的架构如下图2所示,主要包含三个模块。具体来说,我们首先设计了位次感知的上下文聚合模块(PCAM),通过注意力机制来聚合展示上下文。然后,我们通过反馈-上下文融合模块(FCFM),利用非线性特征交互融合点击和相应的展示上下文,以获取上下文感知的兴趣表征。最后,我们使用兴趣匹配模块(IMM),自适应地学习与目标Item相关的用户兴趣。

图2 DCIN整体框架

2.2.1 深度上下文兴趣网络

如图1所示,智能手机一屏通常会展示很多Item。用户的点击行为不仅由Item与他们的兴趣之间的匹配程度决定,也受到展示上下文的影响[2, 20]。然而,仅从他们的点击行为中建模用户的兴趣会忽略上下文信息,导致提取的兴趣表征有偏。为了捕获用户的上下文感知兴趣,我们设计了PCAM,它通过注意力机制为每次点击聚合展示上下文。

此外,用户通常倾向于点击屏幕上的位次靠前的Item(称为位次偏差[9, 10]),而不考虑相关性。因此,Item的位次同样影响用户的点击行为。我们还将位次信息集成到PCAM中,以更好地理解用户的实际兴趣。因此,PCAM可以被公式化如下:

2.2.2 反馈-上下文融合模块

以前的用户序列模型[7, 11, 13, 18, 21, 22]直接将用户的点击Item视为用户的兴趣,忽略了上下文信息。为了捕捉用户的上下文感知兴趣,我们提出了FCFM来通过非线性特征交互融合点击和相应展示上下文的表征。具体来说,FCFM是通过一个2层的MLP(多层感知器)来实现的:

2.2.3 兴趣匹配模块

2.3 线上服务优化

对于工业广告系统来说,服务延迟的限制非常严格。由于我们引入了展示Item来捕获用户的上下文感知兴趣,序列长度被扩展了数十倍,而在线模型的服务延迟通常与序列长度成正比,因此直接在工业在线系统中使用DCIN会带来服务延迟的重大负担。为了解决这个问题,我们针对性地进行了一些在线优化。

3. 实验

3.1 实验设置

3.1.1 数据集

将展示上下文和位次信息集成到序列模型中是一种全新的探索,目前缺乏相关的公开数据集。因此,我们从在线广告系统中构建了一个31天的工业数据集,其中包含数十亿的样本。按照惯例,我们将前30天的数据划分为训练集,最后一天的数据划分为测试集,并保留用户最近的50次点击行为,每次点击的周围20个展示Item被用来建模展示上下文。

3.1.2 基线模型

我们选取六种序列模型与DCIN进行比较。所有模型都使用相同的特征进行公平比较:

  • Wide&Deep[4] 由一个Wide部分和一个Deep部分组成,用于学习原始和高阶特征交互;
  • DeepFM[8] 用FM层替换了Wide&Deep中的Wide部分;
  • DIN[22] 引入了一种注意力机制,用于捕获用户对不同目标Item的多样化兴趣;
  • DIEN[21] 提出了一个基于门控循环单元(GRU)的兴趣演化层,用于模拟用户的动态兴趣;
  • DFN[17] 试图从点击行为中学习正向偏好,从未点击行为中学习负向偏好;
  • RACP[6] 引入了页面反馈建模,是已发布的用户行为建模的SOTA方案。

3.1.3 评估指标

我们在CTR预测任务中使用了广泛采用的评估指标AUC,我们进一步引入RelaImpr[19] 来衡量相对于基础模型的改进:

3.2 实验结果

我们重复所有实验5次,并报告他们的平均结果。在实验中,每个特征的嵌入维度为16。FCFM中MLP的隐藏大小和输出层分别为64/16,和1024/512/128。我们使用学习率为1e-4的Adam,Batch Size大小为3000。

3.2.1 离线效果

实验结果如下表所示,从中我们可以发现,我们提出的DCIN在AUC上显著优于所有方法,并在基础模型上实现了21.24%的RelaImpr。如2.3节所介绍,DCIN可以处理的最长用户行为序列比RACP长28倍。为了公平比较,DCIN(Short)使用与RACP相同的序列长度,而DCIN使用我们在线广告系统中实现的更长序列。

具体来说,首先DIN和DIEN比Wide&Deep和DeepFM表现得更好,因为它们捕获了用户对不同目标Item的多样化和时变性兴趣。其次,DFN略微优于DIN和DIEN,因为它试图从未点击行为中捕获不喜欢的信号。第三,RACP比DFN表现得更好,因为它模拟了用户的上下文化页面兴趣。第四,我们提出的DCIN(Short)优于RACP,这出于两方面原因。一方面,RACP只模拟页面兴趣,忽略了同一页面上的不同点击也可能表明不同的兴趣,降低了模型捕获用户细粒度兴趣的能力。另一方面,RACP忽略了Item位次对用户点击行为的影响。最后,DCIN优于DCIN(Short),因为它引入了更长的序列。

模型AUCRelaImpr
Wide&Deep0.635880.00%
DeepFM0.636020.10%
DIN0.6501210.48%
DIEN0.6510211.14%
DFN0.6522012.01%
RACP0.6587216.81%
DCIN(Short)0.6618619.12%
DCIN*0.6647521.24%
DCIN(short)-w/o postition0.6585016.64%
DCIN(short)-w/o FCFM0.6595017.38%

3.2.2 消融实验

我们还进行了消融测试,以验证DCIN中不同组件的有效性和必要性。首先,我们在PCAM中去除位次信息,并进行DCIN(short)-w/o postition的实验。如表1所示,DCIN(short)-w/o postition的表现比DCIN(Short)差,因为Item的位次对用户的点击行为也有重要影响。

3.2.3 线上A/B测试

我们进行了严格的在线A/B测试,在线上对DCIN进行了两周的评估。与DIN(线上基线)相比,DCIN实现了CTR+1.5%、RPM+1.5%的提升。目前,DCIN已经在线部署并全量,显著提升了广告收入。

3.2.4 Case研究

为了展示DCIN在上下文感知兴趣表示方面的有效性,我们随机选择10个点击Item,并分别为每个点击选择100个不同的展示上下文。然后我们提取相应的上下文感知兴趣$I_i$,并通过t-SNE [14]可视化它们的分布。如图3所示,点击Item之间的明显分离表明了学习中点击行为的主导地位。同一点击的不同上下文的明显多样性证明了DCIN捕获细粒度上下文感知兴趣表示的能力。

图3 10个点击Item在100个不同展示上下文下提取得到的上下文感知兴趣的可视化。每种颜色代表一个点击Item

为了验证上下文建模的有效性,我们可视化了目标Item和在不同展示上下文下的同一点击Item之间的IMM的注意力权重。如图4所示,DIN(绿色)的权重是相同的,因为DIN只将点击行为作为输入,所以它无法区分不同的显示上下文。而DCIN可以根据不同的上下文学习到不同的权重,右图展示的Item之间的竞争更激烈,其上下文反映的用户兴趣更精确,因此DCIN学习到了更高的权重。

图4 不同展示上下文下的同一点击Item与目标Item之间的注意力权重。由于缺少上下文信息,DIN产生相同的注意力权重,而我们提出的DCIN可以差异化点击权重

4. 结论

我们强调了展示上下文和位次信息对兴趣建模的必要性,并创新性地设计了序列模型DCIN。无论是在离线还是在线评估中,DCIN都取得了显著的效果提升。目前,DCIN已经在美团的在线广告系统中部署并全量,取得了很好的业务结果。

5. 参考文献

  • [1] Zhi Bian, Shaojun Zhou, Hao Fu, Qihong Yang, Zhenqi Sun, Junjie Tang, Guiquan Liu, Kaikui Liu, and Xiaolong Li. 2021. Denoising User-aware Memory Network for Recommendation. In Fifteenth ACM Conference on Recommender Systems. 400–410.
  • [2] Jesús Bobadilla, Raúl Lara-Cabrera, Ángel González-Prieto, and Fernando Ortega. 2020. Deepfair: deep learning for improving fairness in recommender systems. arXiv preprint arXiv:2006.05255 (2020).
  • [3] Qiwei Chen, Huan Zhao, Wei Li, Pipei Huang, and Wenwu Ou. 2019. Behavior sequence transformer for e-commerce recommendation in alibaba. In Proceedings of the 1st International Workshop on Deep Learning Practice for High-Dimensional Sparse Data. 1–4.
  • [4] Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, Glen Anderson, Greg Corrado, Wei Chai, Mustafa Ispir, et al. 2016. Wide & deep learning for recommender systems. In Proceedings of the 1st workshop on deep learning for recommender systems. 7–10.
  • [5] Paul Covington, Jay Adams, and Emre Sargin. 2016. Deep neural networks for youtube recommendations. In Proceedings of the 10th ACM conference on recommender systems. 191–198.
  • [6] Zhifang Fan, Dan Ou, Yulong Gu, Bairan Fu, Xiang Li, Wentian Bao, Xin-Yu Dai, Xiaoyi Zeng, Tao Zhuang, and Qingwen Liu. 2022. Modeling Users’ Contextualized Page-wise Feedback for Click-Through Rate Prediction in E-commerce Search. (2022).
  • [7] Yufei Feng, Fuyu Lv,Weichen Shen, MenghanWang, Fei Sun, Yu Zhu, and Keping Yang. 2019. Deep session interest network for click-through rate prediction. arXiv preprint arXiv:1905.06482 (2019).
  • [8] Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, and Xiuqiang He. 2017. DeepFM: a factorization-machine based neural network for CTR prediction. arXiv preprint arXiv:1703.04247 (2017).
  • [9] Huifeng Guo, Jinkai Yu, Qing Liu, Ruiming Tang, and Yuzhou Zhang. 2019. PAL: a position-bias aware learning framework for CTR prediction in live recommender systems. In Proceedings of the 13th ACM Conference on Recommender Systems. 452–456.
  • [10] Jianqiang Huang, Ke Hu, Qingtao Tang, Mingjian Chen, Yi Qi, Jia Cheng, and Jun Lei. 2021. Deep Position-wise Interaction Network for CTR Prediction. In Proceedings of the 44th International ACM SIGIR Conference on Research and Development in Information Retrieval. 1885–1889.
  • [11] Jing Li, Pengjie Ren, Zhumin Chen, Zhaochun Ren, Tao Lian, and Jun Ma. 2017. Neural attentive session-based recommendation. In Proceedings of the 2017 ACM on Conference on Information and Knowledge Management. 1419–1428.
  • [12] Xiang Li, Shuwei Chen, Jian Dong, Jin Zhang, Yongkang Wang, Xingxing Wang, and Dong Wang. 2023. Decision-Making Context Interaction Network for Click- Through Rate Prediction. Proceedings of the AAAI Conference on Artificial Intelligence 37, 4 (Jun. 2023), 5195–5202.
  • [13] Qi Pi, Weijie Bian, Guorui Zhou, Xiaoqiang Zhu, and Kun Gai. 2019. Practice on long sequential user behavior modeling for click-through rate prediction. In Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2671–2679.
  • [14] Laurens Van der Maaten and Geoffrey Hinton. 2008. Visualizing data using t-SNE. Journal of machine learning research 9, 11 (2008).
  • [15] MenghanWang, Mingming Gong, Xiaolin Zheng, and Kun Zhang. 2018. Modeling dynamic missingness of implicit feedback for recommendation. Advances in neural information processing systems 31 (2018).
  • [16] Zhibo Xiao, Luwei Yang, Wen Jiang, Yi Wei, Yi Hu, and Hao Wang. 2020. Deep multi-interest network for click-through rate prediction. In Proceedings of the 29th ACM International Conference on Information & Knowledge Management. 2265–2268.
  • [17] Ruobing Xie, Cheng Ling, Yalong Wang, Rui Wang, Feng Xia, and Leyu Lin. 2021. Deep feedback network for recommendation. In Proceedings of the Twenty-Ninth International Conference on International Joint Conferences on Artificial Intelligence. 2519–2525.
  • [18] Weinan Xu, Hengxu He, Minshi Tan, Yunming Li, Jun Lang, and Dongbai Guo. 2020. Deep interest with hierarchical attention network for click-through rate prediction. In Proceedings of the 43rd International ACM SIGIR Conference on Research and Development in Information Retrieval. 1905–1908.
  • [19] Ling Yan, Wu-Jun Li, Gui-Rong Xue, and Dingyi Han. 2014. Coupled group lasso for web-scale ctr prediction in display advertising. In International Conference on Machine Learning. PMLR, 802–810.
  • [20] Yu Zheng, Chen Gao, Xiang Li, Xiangnan He, Yong Li, and Depeng Jin. 2021. Disentangling user interest and conformity for recommendation with causal embedding. In Proceedings of the Web Conference 2021. 2980–2991.
  • [21] Guorui Zhou, Na Mou, Ying Fan, Qi Pi, Weijie Bian, Chang Zhou, Xiaoqiang Zhu, and Kun Gai. 2019. Deep interest evolution network for click-through rate prediction. In Proceedings of the AAAI conference on artificial intelligence, Vol. 33. 5941–5948.
  • [22] Guorui Zhou, Xiaoqiang Zhu, Chenru Song, Ying Fan, Han Zhu, Xiao Ma, Yanghui Yan, Junqi Jin, Han Li, and Kun Gai. 2018. Deep interest network for click-through rate prediction. In Proceedings of the 24th ACM SIGKDD international conference on knowledge discovery & data mining. 1059–1068.

如何提供一个可信的AB测试解决方案

虽然AB测试(AB实验)的统计基础已经有一个世纪的历史了,但大规模地构建一个正确可靠的A/B测试平台仍然是一个巨大的挑战:不仅要在实验设计环节应对溢出效应和小样本的双重挑战,平衡好实验偏差与方差以确定合适的实验单元、分组方法和分析方法,给出合理的实验设计,而且要在分析环节应对方差计算、P值计算、多重比较、混淆因素、假阴性(实际策略有效果,但是检测显示无效果)等多种统计陷阱。因此,要获得高质量的结果需要对实验和统计有专家级的理解,这无疑增加了实验门槛,难以达成任何人进行实验都可得出可信结论的目标。

本文将从实验方法和平台建设的两个视角,分别介绍如何正确地使用统计方法避免统计陷阱,以及输出什么样的平台能力,从而确保任何人使用该平台时都可得出可信结论。同时,我们也积累了如何进行更好的实验,以及如何利用实验来做出更好的决策,希望能给从事相关工作的同学有所帮助,也真诚地希望欢迎大家给出反馈或者建议,不断优化我们的工作。

2 走进AB测试

哪个线上选项会更好?我们经常需要做出这样的选择。当我们想要在两个策略之间做出决定时,理想的方案是面向同一拨用户,在两个平行时空,平行时空1体验原策略A,平行时空2体验新策略B,然后根据观测到的事实进行比较,以决定哪个策略胜出。然而在现实世界中,不存在两个平行时空,针对同一用户,我们只能观察到其接受策略A或策略B的一种效果,即反事实结果是观测不到的。

因此,在现实世界中,我们通常采用实验的方法做出决策。它将用户分配到不同的组,同一组内的用户在实验期间使用相同的策略,不同组的用户使用不同的策略。同时,日志系统根据实验系统为用户打标记,用于记录用户的行为,然后根据带有标记的日志计算度量差异,并进行统计分析以排除由于噪声导致的任何差异。实验者通过这些指标去理解和分析不同的策略对用户起了什么样的作用,是否符合实验预先假设。

图1 理想和现实中的策略评估

2.1 AB测试概述

实证中由于不可能同时观测到同一群体在不同策略下的两种潜在结果,无法决定哪个策略胜出,需要构建一个反事实(Counterfactual)用来代表接受策略B的群体在接受A策略时的潜在结果。

具体来讲,构建一个与实验组群体特征均值无差异的对照组,用其观测结果代表实验组群体在施加A策略时的潜在结果,此时两种结果的均值差便是策略效应大小。由于是基于样本的观测数据得出的结论,需要通过显著性分析(Significance Test),以证明结论具有统计意义,这便是策略评估的完整路径。

根据能否在实验前控制策略的分配,我们将实验分为AB实验和观察性研究(Observational Studies),在AB实验分支下,根据能否控制策略的随机分配,又将AB实验分为随机对照实验(Randomized Experiments)和准实验(Quasi Experiments)。不同的实验类型使用不同的分组方法,在一定程度上影响着实验后分析数据的表现形式,实验后选择与实验类型匹配的分析方法尤为重要,直接制约着我们能否统计意义上的科学结论。具体分类如下:

图2 履约业务下的三种实验类型

对于大部分的实验场景,我们可以在实验前控制对不同的实验对象分配不同的策略,然而在有些场景下,如:①测试线上演唱会活动对短视频平台的影响,考虑到用户公平,需要给全部用户施加演唱会活动策略;②在测试不同的营销邮件策略对用户影响的场景中,我们无法控制哪些用户会最终接受策略。我们要么不能控制策略分配,要么不能控制策略在对应的人群生效,只能采用观察性研究,即在自然状态下对研究对象的特征进行观察、记录,并对结果进行描述和分析。

在我们可以控制对实验对象施加策略的场景,如①测试不同的产品UI对用户的影响,进而决定使用哪种UI;②快速验证首页商品列表图素材对转化率的影响。这些典型的C端实验场景,不仅有海量用户且用户在实验组、对照组间的行为不会相互影响,可以通过随机分组的方式找到同质且独立的实验组和对照组,这类实验称之为随机对照实验,是业界衡量策略效应的黄金标准。

然而在美团履约业务场景中,如调度场景,要测试不同的调度策略对区域内用户体验的影响,策略施加单位是区域,由于区域数量少,同时区域之间各项指标(商家、运力、消费者)差异较大,采用随机分组难以得出同质的实验组、对照组,而且由于区域之间可以共享运力,施加不同策略的实验组、对照组区域之间相互影响,不满足实验单位独立的条件。在这种场景下,我们不能对实验对象进行随机分配,只能有选择的进行实验组和对照组的分配,这种虽然能够控制策略分配但不能控制策略随机分配的实验,我们称之为准实验,常用的准实验方法如双重差分。

随机对照实验,因为其能够保证实验组、对照组两组的特征均值相同,不会因为分组差异干扰对真实效应的衡量,是业界衡量策略效应的黄金标准。在不满足随机对照实验约束的业务场景下衡量策略效应,我们采用准实验的方法,通过改进分组方法消除实验组、对照组可观测特征的差异或使其保持恒定差异,分析环节采用适配准实验场景的分析方法。

如果由于场景约束,只能基于实验后得到的数据来进行实验的话,就只能采用适用于观察性研究的方法。准实验和观察性研究虽然不是衡量策略效应的金标准,但是如果使用得当,也可以得出相对科学可信的分析结论。在学界,三种不同实验类型的可信度等级如下:

图3 用于评估AB测试质量的可信度等级

2.2 AB测试的关键问题

不管何种类型的AB实验,都符合分流->实验->数据分析->决策的基本流程,以及需要满足AB实验的3个基本要素。分流是实验平台的顶层设计,它规范和约束了不同实验者如何在平台上独立运行各自实验而不相互影响,运行实验,看似简单,但是成功运行不同类型实验的前提是实验场景要满足其理论假设。

AB实验主要是通过观察抽样的样本来推断总体的行为,属于预测型结论,数据分析涉及大量的统计学理论,稍有不慎,容易掉入统计陷阱。上述流程,任一环节出错,都可能导致错误的结论,因此,AB实验统计一个数字容易,得到可靠可信的统计结论并不容易。

图4 构建可信AB测试的关键要素

2.2.1 AB测试的分流框架

在履约技术平台,我们通过实验衡量真实的用户反应,以确定新产品功能的效果,如果无法同时运行多个并行实验,将会大大减慢迭代速度。扩大同时运行实验的数量对于实现更快的迭代是必不可少的。为了增加可以同时运行的实验数量,提高并行性,并允许同时运行多个互斥实验,业界出现了两种分流框架,一种是像谷歌、微软、脸书这种单边业务形态的公司,采用层、域嵌套的分流框架;另一种是像Uber、DoorDash这种多边业务形态的公司,采用基于约束的分流框架。具体如下图所示:

图5 业界流行的两种分流框架

基于层、域嵌套的重叠分流框架:该分流框架的特点是事先将流量随机打散做桶号标识并提前规划流量的用途,如上图所示,提前将全国流量划分为10等份并用1到10桶号来标识流量,1-6号桶的流量用于短期策略验证,7-10号桶用于长期性策略验证。为了支持同时运行多个互斥实验,提升迭代效率,分别在1-6号桶和7-10号桶中,进一步区分了正交桶和互斥桶,落在正交桶中的流量可以同时进入多个实验,在每进入一个实验前,重新打散一次流量,避免上一实验的残留效应做下一实验造成影响,实现了多个互斥实验的并行运行,落在互斥桶的流量,每次只能进入一个实验,用于运行不满足随机打散条件的实验。基于桶号划分的用于特定用途的一组流量集合,我们称为域;同一流量进入的不同类型的实验,我们称为层。

该分流框架的优点是不仅可以实现流量复用,扩大实验并行度,而且较容易避免具有潜在交互作用的实验可能给用户带来的糟糕体验。引入层的概念,将系统参数划分为多个层,约束让组合在一起可能产生较差用户体验的实验必须位于同一层,同一用户可进入不同层多个实验以实验流量复用,并防止其进入同一层多个实验,避免糟糕的用户体验。

不足之处在于:首先,这种分流框架的一大前提是提前将流量打散,这种在大流量的单边场景下尚可,在小流量的多边场景下,难以行得通。多边场景下,考虑到溢出效应,无法直接采用单边实体进行分流,而是采用聚类的方式将有相互作用的多边聚合成一个大的实体,基于大的实体进行分流,考虑到有限的实体数量,这种提前打散的方式难以获得均匀的流量;其次,域提前规定了流量用途,这种提前隔离的方式,降低了流量利用率,无法满足小流量场下实验功效要求,如即使在互斥域中没有实验,也无法采用该流量进行其它的正交实验;第三,这种提前预规划流量用途的分流框架灵活性不足,如果后期发现域的设置不合理,要改变域的配置将付出较大的代价。

基于冲突检测的分流框架:该分流框架的特点是由实验者制定约束,平台根据实验者制定的约束,确保无法避免潜在交互影响的实验没有同时曝光给用户。如微软、Uber等公司,实验平台都集成了检测交互作用的自动化系统,以避免实验间潜在交互影响。以Uber为例,将策略看作是一组独立参数的集合,并提前声明对应策略涉及的专用参数和与其它策略共享的参数,配置实验时检测是否有任何影响相同参数的两个实验重叠,只要它们没有重叠,便允许实验创建或更新操作。

该分流框架的优点是灵活且能最大限度的复用流量,相较于重叠流量框架,不受提前划分的域的约束只能在特定域中进行实验,即使对应的域中此时并无其它实验。只要满足进行并行实验的条件,便可以任意圈定流量进行实验;不足之处在于:实验平台需要构建自动检测交互作用的能力。

2.2.2 AB测试满足的基本要素

在运行AB实验时,要满足三个基本要素:①施加不同策略的实验组、对照组可比较,即实验组、对照组的特征均值在实验前相同或在实验前具有固定差异,便于实验后计算哪些差异是由于策略不同导致的;②策略之间没有干扰,实验群体相互独立,即当我们比较策略A和策略B时,接受策略A的用户行为不会受接受策略B的用户行为影响;③实验群体的数量要足够,以满足功效要求,避免实验结果假阴性,即实际策略有效果但是由于样本量不足没有检测出来。

不满足要素一,实验后难以确定实验组对照组的差异是由策略导致的还是由于分组导致的,难以准确衡量策略的真实效应;不满足条件二,可能会高估策略效应。举个例子,在履约配送范围实验中,橘色是实验组,商户A范围的扩大,会使用户的需求从商户B转移到商户A,如果评估的是商户集合的单量,会造成实验组单量相对对照组多,实验环节,得出扩大配送范围,会提高整体单量,但是当策略在全国应用后,发现单量并没有明显增加,因为实验期间观察的增加仅仅是单量转移,实验组单量转移到了对照组。不满足条件三,难以确定策略无效果是真正的无效果还是由于样本量不足,没有检测到策略效果。

图6 溢出效应导致的估计偏差举例

2.2.3 不可忽视的统计陷阱

AB实验主要是通过观察抽样的样本来推断总体的行为,属于预测型结论,涉及大量的统计学理论,稍有不慎,容易掉入统计陷阱,难以得出可靠的统计结论。

实验组和对照组之间的差异是真实的还是噪音通过显著性检验来辅助判断,要得出结论涉及方差、检验方式和P值计算,这些环节充斥着统计陷阱,稍有不慎便会导致我们通过假设检验得到错误的结论。样本的抽样方式、分布特点以及样本量大小决定了我们的检验方式和采用的具体P值计算方法,实验单元、分析单元和实验组、对照组差值类型,决定了方差计算,方差作为P值计算的一个输入,直接影响着P值结果。上述环节,忽略任一因素,会导致P值计算错误,使我们通过假设检验得到错误的结论。

图7 分析环节影响实验结论的因素

容易忽视的方差计算陷阱:如果不能正确的估计方差,那么P值和置信区间都将是错的,这些错误会导致我们通过假设检验得到错误的结论。高估的方差会导致假阴性,而低估的方差会导致假阳性。下面是几个估计方差时的常见错误。

样本在实验组或对照组的分配机制影响着其方差的计算,避免用随机抽样(样本满足独立同分布)下的样本方差计算方法计算非随机抽样下的样本方差。该陷阱主要出现在用随机对照实验下的方差计算方法计算准实验下的方差,导致方差计算错误。计算$Y_t-Y_c$的方差,按照方差性质,非随机抽样下,若$Y_t$和$Y_c$不独立:

$D(Y_t-Y_c)=D(Y_t)+D(Y_c)-2Cov(Y_t,Y_c)$

在随机抽样下,$Y_t$和$Y_c$独立:

$D(Y_t-Y_c)=D(Y_t)+D(Y_c)$

两者不相等。例如,在按天交替轮转的轮转实验中,一旦确定了实验开始第一天在实验组还是对照组,后续其它天在实验组和对照组相继确定。此时,实验组、对照组两组样本不独立,如果按照独立的方法计算方差,将错误估计方差。实际上,样本的分配机制影响着其方差计算,在AB测试中,我们将流量划分为实验组和对照组并在实验组施加策略,然后计算实验组相对对照组的某个度量指标的绝对提升值或者相对提升率,并检验该差异是否存在统计上的显著性,进而判断实验策略是否真实有效。

从上述公式可以看出,方差计算与分配机制有关,如果忽略分配机制将导致错误的方差计算。

评估相对提升或实验单元与分析单元不一致时,错误的方差计算方式容易低估实际方差,导致假阳性。在计算指标的相对提升率,如下公式所示:

容易忽视的检验方式导致的P值计算陷阱:统计学对于多大样本量即可认为中心极限定理成立并没有完全的定论,并非所有大样本场景下的样本分布都满足正态性假设,避免有偏样本采用默认正态分布下的检验方法。Weich t假设检验是参数检验常用的一种检验方法,其本质上假定实验组、对照组样本均值等的渐近正态性成立,该理论实际上是建立在大样本情形下的中心极限定理基础上。统计学对于多大样本量即可认为中心极限定理成立并没有完全的定论,这实际上也取决于原始分布本身偏离正态分布的程度。

从经验来看,若样本仅稍微偏离正态总体,大于30的样本量或许就足够了。然而对于有偏样本,Ron Kohavi等(2014)  指出当样本偏度大于等于1时,一个经验准则便是只有计算样本均值的观测样本量大于$355 s^2$时才可认为中心极限定律成立。实际抽取了一个样本量为13832的活动实验,其实验组、对照组差值的抽样分布呈现右偏,不符合正态分布,如下图所示:

图8 数据分布的偏态举例

如果所有场景下默认采用正态分布情形下的检验方式计算P值,容易导致错误的P值计算。

2.3 基于一组核心抽象的平台建设难以适配所有业务场景

整个AB实验的过程涉及大量统计学知识,正确运用书本理论知识的前提是实际业务场景满足理论假设,实际情况是很多场景不满足理论假设。在这种情况下,获得高质量的结果需要对实验和统计有专家级的理解,以及大量的工作包括:实验设计、配置、指标加工、自定义分析等流水线工作,任一环节出错,将会导致大量的工作浪费。

通过核心抽象为实验者输出不同方法能力的平台建设思路,难以避免方法使用不当导致的实验置信问题,在此过程中任一设计的微小偏差,会导致无法比较的实验组、对照组,从而影响实验结果。例如,事例一方差估计错误:在实验分析时,经常犯的一个错误,不管分组方式是不是随机分组,在实际分析时,仍然按照样本满足独立同分布的条件计算方差,造成我们对估计值的准确性过度自信,低估了方差,容易犯假阳性的错误。

一个极端的例子,随机抽取100个学生用于估计该需要的平均成绩,如果被抽查的100人都是同一个学生,他们的成绩只反映了一个学生的成绩,对于估计所有学生平均成绩的信息含量等同于一个学生提供的信息。

如果我们把它们当成独立的,所得的样本平均值的标准误差显然是不对的,其结果是造成我们对估计值的准确性过度自信,即估计值的标准误差估计过小。

事例二业务场景不满足理论约束:双重差分是我们准实验中常用的分析模型,它的计算过程很简单,即实验组干预前后的均值的差减去对照组干预前后均值的差,根据业务场景,可以选择传统DID模型或固定效应的DID模型,但具体哪种模型合适,需要进一步看,在当下的业务场景下,哪种模型满足平行趋势假设,即在没有干预的情况下,实验组和对照组指标的均值差异在不同时间内保持一致,在都满足平行趋势假设下,哪种模型更优?如果不进行严格的检验,将会导致有偏估计。如下是我们具体场景下的案例:

图9 准实验场景下选择双重差分模型需要考虑的因素

虽然根据大致的场景特点,可以判断出采用双重差分模型,但是到底采用双重差分的哪个模型,还需要基于实际数据,做进一步验证和选择。根据上图所示,在当前的业务场景下,并不满足传统DID模型的平行趋势假设,如果贸然使用,会造成估计偏差,时间效应的双重差分模型和个体+时间效应的双重差分模型,虽然都满足平行趋势假设,但从实际置信区间看,后者因为考虑了策略对不同个体的差异,波动较小,估计结果更加接近实际值,所以应采用后者。

3 在履约我们如何进行AB测试

3.1 多边业务模式下面临的AB测试难题

溢出效应和小样本是当前业务场景下实验面临的最大挑战,其次策略施加的公平性约束了实验分组也是我们不得不面对的挑战。每个因素的单独制约,对得出置信实验结论将是不小挑战,而履约场景下,这些因素综合的叠加在一起,加剧了挑战。

我们的即时配送物流系统在多边市场中扮演着交易中间人的角色,它通过平台匹配用户、骑手、商家三方的需求,平台通过产品策略优化这一匹配过程,每一次匹配都会对同一时刻及后续一段时间内其它的匹配产生影响,具有较强的溢出效应。受溢出效应影响,实验单元的实验结果不仅取决于个体本身,还会受其他实验单元的影响。网络效应的存在违反了实验单元独立的原则,导致有偏的实验结果。

如履约业务下的商家配送范围实验,实验Treatment(配送范围划分)直接决定了用户能否在某家商家下单,且同一时空下不同商家共享相同的用户,某一策略的施加会导致原本只能在商家B下单的用户可以在商家A下单,导致原本在对照组中的单转移到了实验组,虽然从实验效果上看,策略提升了单量规模,策略推全后,效果并未到达实验的先验预期甚至无效果。因为这种提升可能仅仅是单量转移,并非策略真正带来了提升。

履约LBS的业务形态决定了其大部分策略都是地域(主要是配送区域)展开的,受限于配送区域数量及本身的地域差异,难以获得足够的样本检测出策略的小提升。如调度实验,受限于自身业务形态和空间维度限制,调度算法的最小作用单元为区域或区域组,实验必须考虑区域或者更粗粒度的分流,然而大部分城市区域和区域组很少,并且城市各地域间的差异往往比较显著,这在数据上体现为区域间指标波动剧烈。

该场景下严峻的小样本与地域间差异显著的问题导致统计功效低,从而很难有效地检测出策略小的提升效果。其也会导致随机分流下与响应变量相关的协变量在实验组、对照组的分布差距较大,放大业务上实验组对照组不同质问题的同时给实验结果带来质疑。

更致命的是,该场景下的混合调度模式,不同运力类型的重叠区域可以共享运力互派单,区域可以召回其附近的其它区域运力并派单的特点带来的溢出效应,会导致实验效果估计不够精确甚至带来显著的估计偏差。类似调度实验同时要克服小样本和溢出效应的双重约束,是不小的挑战。

图10 履约业务模式下面临的AB测试难题

3.2 AB测试的组织和流程

随着履约业务的发展,我们越来越依赖于良好的策略驱动业务规模快速发展,以及效率、体验和成本的持续优化。A/B测试提供了最科学的方法来评估策略变化的影响,并绘制出清晰的因果关系。通过A/B测试量化影响,最终辅助团队做出决策。我们将人员、流程和平台更紧密地结合在一起——这是成功实验生态系统的基本要素。

人员方面,我们将算法(实验用户)、算法工程、数据科学(下称数科)有机组合成了一个虚拟团队,数科同学在策略迭代之初,就参与到算法年度目标的讨论中,辅助算法一起制定量化策略好坏的综合评估指标,并基于场景特点选择合适的实验方法,完成对应场景下的实验设计,算法工程同学,负责将新方法集成到实验平台,作为公共能力为用户提供服务。

有了组织、平台后,构建高效、基于AB实验的数据驱动工作流是通过AB实验帮助我们达成产品目标获得成功的关键,我们将整个流程分为三个阶段:构建想法,通过AB实验验证想法、沉淀知识库形成实验记忆。

构建想法是实验的输入阶段,构建想法的质量直接决定了实验的效果,如果这个阶段构建的想法不够好,那么AB实验阶段只能起到验证错误的作用,降低犯错误的概率,无法带来增长。

验证想法就是实践AB实验的过程,可以分为实验假设、实验设计、实验运行、实验分析和实验决策五个关节,实验假设环节,即形成实验目标,构建综合评估指标,实验设计,基于场景约束,选择合适的实验方法。

最后,通过Launch Review发起实验决策;将成功和失败的案例沉淀下来,形成实验记忆,不仅可以帮助我们发现策略的通用性,而且有助于帮助我们从失败中寻找机会。

图11 履约AB测试流程

3.3 AB测试平台简介

3.3.1 平台概述

AB实验得以在工程中广泛应用和推广,与AB实验的并行性(多个实验可并行开展)和先验性(通过小流量预先获得效果评估)密不可分,分流框架直接决定了实验的并行度,与场景匹配的实验解决方案直接影响着实验先验结论的可信度。

为提高实验并行度并让我们同时运行多个互斥的实验,我们构建了基于约束的分流量框架,以规范和约束不同实验如何共享和使用流量。为确保平台提供可靠的实验结果,平台针对实验设计直接输出解决方案而非能力,实验分析完全自动化,即基于实验设计和数据特点自适应选择与之匹配的方法。以达成不管是实验或统计领域的专家进行实验,还是无统计和实验知识的普通用户进行实验,任何人都能够相信实验的结果。

为提高实验并行度,业界有层、域嵌套的重叠分流框架和基于约束的分流框架,前者以谷歌为代表,后者以Uber、微软为代表。层、域嵌套的重叠分流框架要求提前将流量均匀打散并规划好用途,这不仅需要大流量以确保能够被均匀打散,而且对业务未来演进需要有精准预判确保合理划分流量用途。小流量无法实现均匀打散,流量用途划分不合理,不仅会导致分配流量大的域实验数量少而浪费流量,分配流量小的域实验数量多导致流量不够用而排队;而且重新划分流量用途会导致线上实验失效、新策略无法正确推全、无法进行长期实验。

在履约技术平台,分流单位经常是区域、区域组甚至城市,样本量有限,不满足均匀打散的样本量要求,其次,履约业务持续演进变动,难以基于业务预判提前规划好流量用途,基于以上两点,履约采用了基于约束的分流框架。

在实验领域使用统计方法统计一个数字容易,但是确保统计方法合理适配得出可靠的实验结论并不容易,特别是在履约这种连接用户、骑手、商家三边的平台型经济业务模式下,不同的实验需要在降低网络效应和提高实验功效两个目标之间权衡,制定与场景匹配的实验方法并得出置信实验结论。

做到这一点,需要实验者对实验和统计有专家级的理解。为降低实验门槛,确保实验置信,平台建设提出了,针对实验设计直接输出解决方案而非能力。针对实验分析,实现完全自动化,避免实验者将大量精力放在方案的论证上和人为因素导致的实验置信问题。

3.3.2 基于约束的分流框架,以适配履约业务场景

分流框架像法律法规规范着规范着大家的日常行为,使大家在社会大家庭中有序生活一样,它规范和约束着不同的实验在不相互影响的前提下如何共享和使用流量,它是实验平台的顶层设计。基于约束的分流框架让实验者指定约束,平台冲突检测根据实验者指定的约束,进一步判断是否允许实验。在展开之前,先引入三个概念:算法Key、场景和实验模版。

算法Key代表一组可独立测试的功能,在技术层面可以表示为一组独立参数集合,场景代表对应算法Key(对于联合实验而言,是多个算法Key;非联合实验,是一个算法Key)下具有相同实验模版的实验集合,实验模版为一组相同实验类型、实验单位、分组方法、评估方法的配置。

考虑到:①同一算法Key,不同实验是针对同一功能不同版本的测试,实验间要互斥;②不同算法Key之间,只要其对应的功能之间没有潜在的交互作用,其对应的实验间天然正交可以放心的复用流量,如存在潜在交互作用,只要确保流量能被随机打散,便可消除策略间的潜在相互作用对实验结论的影响。

因此,针对并行实验,初步的约束如下:①同一算法Key下的任意两个实验不能复用流量,冲突;②不同算法Key下存在潜在交互作用的两个实验,只要有一个实验类型是随机对照实验,皆可复用流量。约束②不仅避免了全因子流量框架不同策略实验间潜在相互影响的风险,而且避免了重叠流量框架因不同域流量隔离导致的流量复用率低的问题,特别是在准实验、观察性研究比随机对照实验多的情形下,由于准实验、观察性研究分处不同的域,无法实现随机对照实验和准实验、观察性研究之间的流量复用。

考虑到同一算法Key下不同实验因目标流量或迭代验证的功能不同,同一个算法Key下的不同实验与另一算法Key下的不同实验间是否冲突取决于其对应的测试功能或实验方法,我们引入场景来描述不同算法Key的功能描述和其对应的实验方法,并根据业务经验构造不同场景间的业务影响矩阵。基于不同场景的业务影响矩阵、场景实验方法和并行实验约束,生成场景实验冲突矩阵,基于此矩阵完成不同算法Key实验间的冲突检测。

图12 履约实验平台分流框架

不同场景下的联合实验,与其对应算法Key下所有场景实验冲突,与其它算法Key场景实验,根据约束2进一步判定;为避免冲突实验间的流量重叠,提供了基于表达式定义流量范围的能力,通过检测表达式流量覆盖范围避免冲突实验间的流量重叠。基于约束的分流框架,不预先规划流量用途,也没有层、域复杂概念,实验时按需选择流量,只要通过冲突检测,就可以上线实验,不仅降低了用户使用门槛,而且提高了平台灵活性,以适应履约业务场景。

3.3.3 打包输出实验设计,降低实验门槛,确保实验质量

受履约溢出效应、小样本和公平性因素制约,实验设计是降低溢出效应、提高实验功效、关注实验公平等多种目标进行方差和偏差平衡的过程

实验者虽然可以根据对应场景所允许的分组方式(是否允许分组以及在允许分组的前提下是否允许随机分组),初步判断可以考虑应采用如下“普通随机对照实验”、“随机轮转实验”、“准实验”、“观察性研究”中的哪一种实验方式,但是具体应该采用哪种实验方式以及对应实验方式下应该采用什么分流单元,是综合考虑溢出效应、实验功效、公平性等因素多方平衡的结果。

例如:在运单实验中,实验组、对照组运单可以来源于同一区域,由于同一区域的运单可以共享骑手,运单间不独立,导致实验组、对照组存在溢出效应。轮转实验是解决该问题的一个可选项,前提是我们需要在如下两个相互冲突的目标之间做平衡。

  • 我们希望可以划分更多的实验单元来增加样本量,这就需要我们将实验单元划的足够小以得出更多的实验单元来保障我们有更多的样本量来满足实验灵敏度要求。
  • 我们希望实验单元划的足够大确保将相互影响的个体包含在一个独立单元中,以消除溢出效应对实验结果的影响。

图13 轮转实验-在样本量和溢出效应之间平衡

在有限的样本下,如果只是进行简单的随机分组,不仅会导致实验组对照组的一些指标在实验前存在偏差,而且会由于样本量不足导致无法检测出策略的微小提升,我们到底是通过控制影响指标差异的协变量和改进分组方式来达成偏差和方差的平衡,还是实验前允许偏差存在,通过实验后纠偏的方法进行补充,这些都需要在实验设计时基于算力,以及基于分组方式和分析方法组合方案得出的数据表现综合判断,来制定合理的实验方案。

为数科同学提供一系列实验方案的设计工具,辅助其完成实验设计中关键的方差和偏差平衡,输出与场景匹配的解决方案。由于用户、商家、骑手通过履约平台形成的复杂交互关系,在履约进行AB实验,需要去权衡溢出效应和实验功效,给出合理的实验设计,这不仅需要从事该工作的人对实验和统计有专家级的理解以及足够的时间投入,而且需要平台提供实验设计的能力,可按需选择实验类型、实验单位、分组方式、分析方法、评估指标,完成实验设计并验证该设计的可行性。

在履约技术部,由数科同学承担实验设计的职责,由其为对应场景制定与之匹配的实验方案,释放算法同学精力,让其有更多的时间思考如何进行策略迭代。为满足履约各种场景实验诉求,平台提供了如下几种类型实验模版:

图14 实验平台为数科同学推荐的实验设计模版

为了便于数科同学基于要检测的指标、对应指标的预计提升量、可用样本等约束进一步确定对应实验模版下的实验单位、具体的分组方法和分析方法,制定出与场景匹配的实验方案,平台为其提供了实验设计工具包,包括:分组工具包、降方差工具包、显著性分析工具包,实验设计报告工具包,包括:MDE分析、同质性检验、样本量预估等工具包。

图15 实验设计工具包

平台为实验者直接输出与其场景匹配的实验设计方案,实验者无需担心实验方法使用不当导致的置信问题。在平台的场景管理模块,配置着该场景下具体的实验方案:具体的实验类型、实验单位、分组方式、评估指标(包括:目标指标、护栏指标、驱动指标)、降方差方法,实验者进行实验配置时,根据平台为其提供样本量预估和“MDE”分析工具,完成流量圈选和实验周期确定,之后平台输出实验设计报告,输出分组结果、“MDE”分析和同质性检验报告,检验通过后,实验者可进一步配置实验组、对照组对应的策略参数,完成最终的实验配置,进而发布实验。

图16 平台基于实验设计方案和实验者的实验配置,为具体实验确定实验方案

3.3.4 构建适用于不同实验方法的分析引擎,标准化实验分析

可靠的数据和科学的分析方法是得出可信分析的关键。实验分析涉及大量的统计学理论,稍有不慎,容易掉入统计陷阱,考虑到大多数实验者缺乏统计知识且自助分析带来的时间消耗,我们构建了统一的分析引擎,标准化实验分析过程,为不同的实验设计提供与之匹配的分析方法,通过验证相关指标的统计显著性和估计策略效应,帮助我们根据分析结果做出数据驱动的决策。分析流程大致包括如下过程:

  1. 通过数据诊断,确保分析数据的可靠性;
  2. 基于分组方式、分析方法,进行实验效应估计,得出实验效应估计;
  3. 基于分组方式、数据类型、实验单元与分析单元的关系、分析方法,选择合适的方差计算方式进行降方差以提高实验灵敏度,避免假阴性;
  4. 基于分组方式、数据分布特点,选择合适的检验方式计算方差计算和P值,验证相关指标的统计显著性给出统计结论;
  5. 基于诊断和分析,输出实验报告。

图17 履约实验平台统计引擎

分析环节的数据诊断,旨在提醒实验者注意可能违反实验假设的情况。很多人认为实验一定按照设计运行,实际上这一假设失败的概率远高于人们的预期。失败实验的分析结论通常是有严重偏颇的,甚至一些结论是完全错误的。在输出显著性分析报告之前,通过护栏指标检验,确保业务不会因策略的迭代受到伤害,通过分组同质性检验、“SRM”检验查看实验执行是否符合预期,确保实验本身的可信度,抽样分布检验,为后续选择合适的显著性检验方法提供依据。

分析环节的实验分析,自动选择与数据和实验设计匹配的分析方法,避免统计陷阱。根据分组方式,提供了差值法和双重差分两种效应估计方法,方差计算和P值计算是统计陷阱集中发生的两个环节,分别提供了判别方差和P值计算方式的判别引擎。

首先,方差计算根据是否随机抽样,将其分为独立样本方差计算和非独立样本方差计算,独立样本方差计算,根据指标是增量提升还是相对提升和分流单位与分析单位是否一致综合因素,提供了直接计算和Delta方法计算,避免方差计算陷阱,非独立样本,通过模拟数据的实际分布,给出方差的准确计算。

其次,在样本量小于30的超小样本下,采用非参的Fisher检验以满足功效要求,在样本量大约1万的超大样本下,接受检验统计量的渐近正态性成立并采用Weich t假设检验;在样本量大于30小于1万下,进一步样本实际分布情况,如果统计量渐近正态性成立,则采用Weich t检验,如果不成立,采用Bootstrap估分布进行统计推断。

3.3.5 平台建设不仅要根植于业务场景,而且要做到严格的质量控制,确保结果可信

履约实验平台建设拒绝功能的简单堆砌,而是设计了可灵活扩展的实验Pipeline工程架构,然后将更多的精力放在业务场景的实验设计和分析方案上,严格控制质量,确保实验结果可信。在此过程中,数科同学扮演了双重角色,作为平台建设的一员,他们永远比工程建设快半步,深入业务,定义新问题并找到答案,协同工程同学一起完成新能力建设。

同时,数科同学又作为一批特殊的用户,承担者平台质量把控和产品易用性职责,特别是质量把控,在平台对外发布新实验方法前,都需要通过他们的AA模拟,通过模拟几百次AA实验,查看关注指标的P值是否在0到1之间均匀分布,通过验证后如果符合新能力发布条件,进行新能力发布,否则,继续分析找出问题所在。下表是在随机轮转实验中,引入入Fisher和Neyman检验时的模拟验证。

4 总结与展望

在履约算法和业务同学每年分别运行数以万计的实验,测试内容涵盖履约业务的各方面,我们已经积累了如何进行更好的实验以及如何利用实验来做出更好的决策的知识。本文从实验通识的视角,介绍了履约在建设可信实验的实践,希望能对实验者有所帮助。由于履约的规模、影响力和多边业务模式的特色,履约的问题空间带来了独特挑战。溢出效应、小样本、策略公平性等综合因素制约着我们运行可信实验,我们在解决上述问题时,也沉淀了一系列实践,后续也会陆续推出相关实践文章。

基于不同的因素,如指标类型、样本量、样本分布特点等,可以应用不同的方法如线性模型、Delta方法、Bootstrap方法来计算P值和标准误差,并且在以城市、区域、站点为实验单位的实验中,可以自动选择不同的方法来调整标准误差,避免了由于数据聚类而导致的误报。这种灵活分析能力对策略的快速迭代非常重要,并且深受数据工程师的欢迎,这样他们就可以把精力和时间集中在实验的其他关键方面。

基于此,我们构建了统一的分析引擎,它标准化了实验核心框架,如普通随机对照实验、随机轮转实验、协变量自适应实验、准实验和观察性研究,以及一些其它的在产业界和学术界前沿的实验评估技术:如样本量预估、降方差、MED分析、数据纠偏、轮转实验的携带效应估计等,以减少大家花在分析上的时间。未来,我们进一步开放该能力,以服务于更多的用户。

5 本文作者

王鹏、永斌、中锋等,均来自美团到家研发平台-履约平台技术部。

招聘信息

履约平台技术部-数据科学工程师

我们期望候选人可以建立统计模型、应用机器学习技术、分析配送业务数据,并使用这些建模技术构建相关指标来协助关键的业务决策。

  1. 与算法或业务协作负责各类实验,确保实验的科学性与高效率;负责复杂实验的设计和评估,通过实验分析给业务决策提供推荐方案;负责科学实验评估平台的规划和演进。
  2. 和业务紧密协同,深入理解业务和产品,将业务和产品的问题转化为数据和技术的问题,并且设计合理的解决方案,如主动通过数据探索和挖掘,帮助业务自动识别虚假申诉并驱动其完善管控规则;通过体系化的因果推断解释日常业务核心指标的波动变化,及时发现问题等。
  3. 把握技术趋势加强行业对标调研适用于配送各业务的因果推断、统计推断,异常检测以及其它数据科学的方法,并把这些方法应用到实际业务问题。
  4. 指导团队成员和数据分析师,帮助他们快速成长,为团队培养数据分析人才。

欢迎加入我们,简历请投递至:[email protected]

MySQL自治平台建设的内核原理及实践(下)

本文整理自主题分享《美团数据库自治服务平台建设》,系超大规模数据库集群保稳系列的第四篇文章。本文作者在演讲后根据同学们的反馈,补充了很多技术细节,跟演讲(视频)相比,内容更加丰富。文章分成上、下两篇,上篇将介绍数据库的异常发现跟诊断方面的内容,下篇将介绍内核可观测性建设、全量SQL、异常处理以及索引优化建议与SQL治理方面的内容。希望能够对大家有所帮助或启发。
❌
❌