写点什么

美团配送 A/B 评估体系建设与实践

  • 2020-06-01
  • 本文字数:6739 字

    阅读完需:约 22 分钟

美团配送A/B评估体系建设与实践

2019 年 5 月 6 日,美团正式推出新品牌“美团配送”,发布了美团配送新愿景:“每天完成一亿次值得信赖的配送服务,成为不可或缺的生活基础设施。”现在,美团配送已经服务于全国 400 多万商家和 4 亿多用户,覆盖 2800 余座市县,日活跃骑手超过 70 万人,成为全球领先的分钟级配送网络。

本文从评估体系建设的原因开始入手,重点阐述了美团配送技术团队在 A/B 评估体系构建过程中的一些思考和具体的实践,包括如何建立完备的指标体系、如何建立科学权威的评估方式等等。希望能够给大家一些启发和帮助。


即时配送的三要素是“效率”、“成本”、“体验”,通过精细化的策略迭代来提升效率,降低成本,提高体验,不断地扩大规模优势,从而实现正向循环。但是,策略的改变,不是由我们随便“拍脑袋”得出,而是一种建立在数据基础上的思维方式,数据反馈会告诉我们做的好不好,哪里有问题,以及衡量可以带来多少确定性的增长。


而 A/B 实验就是精细化迭代的一个“利器”,通过为同一个迭代目标制定两个或多个版本的方案,在同一时间维度,让组成成分相同(或相似)的 A/B 群组分别采用这些版本,然后收集各群组的体验数据和业务数据,最后分析、评估出最好的版本,帮助我们作出正确的决策,使迭代朝着更好的方向去演进。基于此,构建一个适用于配送业务的 A/B 平台就应运而生了。

1. A/B 平台简介


如上图所示,A/B 实验可以看作一个“无尽”的学习环,我们通过提出假设、定义成功指标、检验假设(A/B 实验)、分析学习、发布、建立另一个假设,这就形成一个完整的闭环,通过多轮实验迭代,使策略趋于更优。基于上述对 A/B 实验划分的 5 个步骤,我们将 A/B 实验的完整生命周期分为三个阶段:


  • 实验前,提出该实验假设,定义实验成功的指标,确定分流策略;

  • 实验中,即验证假设的阶段,根据配置阶段的分流策略进行分流和埋点上报;

  • 实验后,进行实验分析与学习,并基于实验报告决定是否发布。



按照功能划分,我们将 A/B 平台分为三个模块,实验配置管理模块、分流以及埋点上报模块和在线分析模块,分别对应于 A/B 实验生命周期的实验前、实验中和实验后三个阶段。


在实验配置模块,用户可以基于实验前提出的假设、定义的成功指标快速创建实验,并基于特定的分流策略完成分流配置;分流以及埋点上报模块,提供 JAR 包接入的形式,异步获取实验配置进行本地分流计算和埋点上报;在线分析模块,依据用户在实验配置管理模块选取的用于说明实验效果的指标、分流埋点上报模块记录的日志,自动地产生各实验的实验报告,供实验观察者使用,然后根据实验效果帮助他们作出正确的决策。具体流程如下图所示:


2. 为什么要强调评估体系建设

2.1 分流业务场景需要

业界的 A/B 平台建设基本以《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》这篇论文为蓝本进行展开, 引入分层模型以及在分流算法中加入层编号因子来解决“流量饥饿”和“正交”问题,并且通过引入域的概念,支持域和层之间的相互嵌套,使分层实验模型更加灵活,进而满足多种场景下的 A/B 诉求。如下图所示,将流量通过 Hash 取模的方式即可实现流量的均匀划分。



这种是面向 C 端用户进行流量选择的传统 A/B 实验,采用上述的分流方式基于这样的假设:参与实验的流量因子是相互独立的、随机的,服从独立同分布。但是,配送业务场景下的 A/B 实验,涉及到用户、骑手、商家三端,请求不独立,策略之间相互影响并且受线下因素影响较大。


传统 A/B 实验的分流方式,无法保证分出的两个群组实验组和对照组的流量都是无差别的,无法避免因流量分配不平衡而导致的 A/B 群组差异过大问题,很容易造成对实验结果的误判。为满足不同业务场景的诉求,我们的 A/B 平台建设采取了多种分流策略,如下图所示:



针对策略之间的相互影响、请求不独立场景下的 A/B 实验,我们采取限流准入的分流方式,针对不同的实验,选取不同的分流因子。在实验前,我们通过 AA 分组,找出无差别的实验组和对照组,作为我们实验分流配置的依据,这种分流方式要求我们要有一套完整刻画流量因子的指标体系,只要刻画流量因子的指标间无统计显著性,我们就认为分出的实验组和对照组无差别。

2.2 业务决策的重要依据

在实验后的效果评估环节,通常允许实验者用自定义的指标来衡量不同策略带来的影响。但这样做会带来如下两个问题:


  • 首先,由实验者来负责实验效果的评估,很难做到客观。同时也无法避免实验者仅仅选择支持自己假设的指标,来证明自己的实验结论;

  • 其次,所有的策略迭代都是为业务服务,如果实验者用自定义的、与业务认知不一致的指标,来说明实验效果、推动业务灰度,这种方式往往难以被采纳。


因此,权威的评估体系对于对齐大家认知,并帮助我们在策略迭代方面作出正确的决策,尤为重要。

3. A/B 评估体系构建

A/B 评估体系的构建,要解决 A/B 平台两个核心问题:第一,要有一套用于刻画流量因子(区域、骑手、商家)的权威的、完备的指标体系,帮助实验者完成实验前的 AA 分组和实验后的效果评估;第二,要建立一套科学的评估方法,帮助实验者作出正确的决策。

3.1 权威完备的指标体系

指标的权威性体现在:刻画分流因子,用于实验前 AA 分组和证明实验假设的指标,必须经过治理且业务认知一致,这样才能对齐认知,使得实验结果更具说服力;指标的完备性体现在:评估体系中的指标,不仅要有经过第三方独立生产治理且各业务方认知一致的治理指标,而且还要有实验者为了更全面的分析,描述实验过程,自定义的探索指标。


整体架构


治理指标强调的是指标的权威性和生产的规范性,而探索性指标强调的是指标的多样性和生产的灵活性。在评估体系中要实现这两类指标的统一,既要包含用于说明实验效果的治理指标,又要包含帮助实验者更好迭代实验所需的探索指标。


为实现上述的统一,指标层面要有分级运营的策略:治理指标按照业务认知一致性和算法内部认知一致性分别定级为 P0、P1,这一类指标在生产前必须要有严格的注册、评审,生产环节需要交给独立的第三方团队(数据团队)生产,保证指标的权威性,产出后打通指标与字段的映射关系,对用户屏蔽底层实现逻辑;对于探索性指标,定级为 P2,强调的是生产的灵活性和快速实现,因此,它的生产就不宜带有指标注册和评审等环节。


为保证其快速实现,希望基于物理表和简单的算子配置就可以实现效果分析时即席查询使用。基于如上的问题拆解,我们进行了如下的架构设计:



数据集成


为了支持监控和分析,在数据集成环节,我们集成了实验配置数据、业务数据和染色数据,以便实验者在效果评估环节不仅可以查看流量指标(PV、UV 和转化率),也可以深入探索策略变动对业务带来的影响。


对于那些在实验配置环节不能确定流量是否真正参加实验的场景(例如:选择了特定区域进行实验,该区域产生的单只有满足特定条件时才能触发实验),我们不能直接通过限制确定的区域来查看业务指标。因为此时查看的指标并不是真正参与实验的流量所对应的指标。因此在数据集成环节,我们同时将实验前的实验配置数据和实验中的染色数据(针对每个参与实验的流量,每次操作所产生的数据,都会打上实验场景、实验组以及具体的分组标记,我们该数据为染色数据)同步到数仓。


在数据基建环节,将业务数据模型和染色数据模型通过流量实体作为关联条件进行关联,构建实验粒度模型。


数据基建


在数据基建层,我们基于指标分级运营的思路,由数据团队和算法团队分别构建实体粒度(区域、骑手、GeoHash)和实验粒度的实体宽表模型,以满足 P0/P1 指标和 P2 指标的诉求;为实现指标的规范化建设和灵活建设的统一,在物理模型和对外提供应用的指标池之间,我们提供了元数据管理工具和模型配置工具,从而实现离线数据快速接入评估体系的指标池。


由数据团队建设的实体宽表模型,对应着治理指标(P0/P1 指标),必须在生产后通过元数据管理工具完成指标与物理字段的映射,将指标的加工口径封装在数据层,对用户屏蔽物理实现,确保治理指标的一致性。由算法团队独立建设的实体宽表模型,对应着挖掘指标(P2 指标),为确保其接入评估体系指标池的灵活性和方便性,我们在数据基建环节,通过标签的形式对指标口径做部分封装,在模型配置环节完成指标逻辑的最终加工。



元数据管理


元数据管理层,是实现指标权威性的关键。治理指标在本层实现注册、评审,达到业务认知一致性和算法内部认知一致性的目的。同时,本层还完成了治理指标与数据基建层物理模型之间的绑定,为后续的模型配置建立基础。


模型配置


模型配置工具,是打通物理模型与评估指标池的桥梁,它通过输入组件、操作组件和应用组件,将离线数据接入到评估体系中,满足实验前 AA 分组和实验后 AB 评估的需求。首先,输入组件可以对应不同的数据源,既可以接入治理的离线指标,也可以接入特定库下的物理表。其次,操作组件提供了分组操作、算子操作、过滤操作和测试操作,通过分组操作,确定模型包含的维度;通过算子操作,将算子作用在指标或标签字段上,在取数环节实现指标的二次计算;通过过滤操作,实现数据的过滤;通过测试操作,保证模型配置质量。最后,应用组件可以将配置的模型注册到不同的应用上,针对 A/B 场景主要是 AA 分组和 AB 评估。具体接入流程如下图所示:


3.2 科学权威的评估方式

评估报告的可靠和权威性主要体现在两个方面:一是评估指标的可靠性和权威性;二是评估方式的科学性。在上一节中,我们重点讨论了如何构建可靠权威的指标体系。在这一节,我们重点讨论如何进行科学的评估。


在讨论科学评估之前,我们再重温一下 A/B 实验的定义:A/B 实验,简单来说,就是为同一个目标制定两个版本或多个版本的方案,在同一时间维度,分别让组成成分相同(相似)的 A/B 群组分别采用这些版本,收集各群组的体验数据和业务数据,最后分析、评估出最好版本,正式采用。其中 A 方案为现行的设计(称为控制组), B 方案是新的设计(称为实验组)。分析 A/B 实验的定义,要实现科学权威的评估,最重要的两点在于:


  • 第一,确保在实验前分出无差别的实验组和对照组,避免因流量分配不平衡导致的 AB 群组差异过大,最终造成对于实验结果的误判;

  • 第二,确保对实验结果作出准确的判断,能够准确的判断新策略相对于旧策略的优势是不是由自然波动引起的,它的这一优势能否在大规模的推广中反映出来。


无论是实验前确保实验组和对照组流量无显著性差异,还是实验后新策略较旧策略的指标变动是否具有统计上的显著性,无一例外,它们都蕴含着统计学的知识。接下来,我们重点论述一下 A/B 实验所依赖的统计学基础以及如何依据统计学理论做出科学评估。


假设检验


两个假设


A/B 实验是一种对比试验,我们圈定一定的流量进行实验,实验结束后,我们基于实验样本进行数据统计,进而验证实验前假设的正确性,我们得出这一有效结论的科学依据便是假设检验。假设检验是利用样本统计量估计总体参数的方法,在假设检验中,先对总体均值提出一个假设,然后用样本信息去检验这个假设是否成立。我们把提出的这个假设叫做原假设,与原假设对立的结论叫做备择假设,如果原假设不成立,就要拒绝原假设,进而接受备择假设。


两类错误


对于原假设提出的命题,我们需要作出判断,要么原假设成立,要么原假设不成立。因为基于样本对总体的推断,会面临着犯两种错误的可能:第一类错误,原假设为真,我们却拒绝了;第二类错误,原假设为伪,我们却接受了。显然,我们希望犯这两类错误的概率越小越好,但对于一定的样本量 n,不能同时做到犯这两类错误的概率很小。


在假设检验中,就有一个对两类错误进行控制的问题。一般来说,哪一类错误所带来的后果严重、危害越大,在假设检验中就应该把哪一类错误作为首要的控制目标。在假设检验中,我们都执行这样一个原则,首先控制犯第一类错误的概率。这也是为什么我们在实际应用中会把要推翻的假设作为原假设,这样得出的结论更具说服力(我们有足够充分的证据证明原来确定的结论是错误的),所以通常会看到,我们把要证明的结论作为备择假设。


T 检验


常见的假设检验方法有 Z 检验、T 检验和卡方检验等,不同的方法有不同的适用条件和检验目标。Z 检验和 T 检验都是用来推断两个总体均值差异的显著性水平,具体选择哪种检验由样本量的大小、总体的方差是否已知决定。在样本量较小且总体的方差未知的情况下,这时只能使用样本方差代替总体方差,样本统计量服从 T 分布,应该采用 T 统计量进行检验。T 统计量具体构造公式如下图所示,其中 f 是 T 统计量的自由度,S1、S2 是样本标准差。



T 检验的流程是,在给定的弃真错误概率下(一般取 0.05),依据样本统计量 T 是否落在拒绝域来判断接受还是拒绝原假设。实际上在确定弃真错误概率以后,拒绝域的位置也就相应地确定了。


使用 T 统计量进行判断的好处是,进行决策的界限清晰,但缺陷是决策面临的风险是笼统的。例如 T=3 落入拒绝域,我们拒绝原假设,犯弃真错误的概率为 0.05;T=2 也落入拒绝域,我们拒绝原假设,犯弃真错误的概率也是 0.05。事实上,依据不同的统计量进行决策,面临的风险也是有差别的。为了精确地反映决策的风险度,我们仍然需要 P 值来帮助业务来做决策。



利用 P 值决策


P 值是当原假设为真时,所得到的样本观察结果或更极端的结果出现的概率。如果 P 值很小,说明这种情况发生的概率很小,但是在这次试验中却出现了,根据小概率原理,我们有理由拒绝原假设,P 值越小,我们拒绝原假设的理由越充分。P 值可以理解为犯弃真错误的概率,在确定的显著性水平下(一般取 0.05),P 值小于显著性水平,则拒绝原假设。


基于假设检验的科学评估


围绕着科学评估要解决的两个问题,实验前,针对圈定的流量使用假设检验加上动态规划算法,确保分出无差别的实验组和对照组;实验后,基于实验前选定的用于验证假设结论的指标,构造 T 统计量并计算其对应的 P 值,依据 P 值帮我们做决策。


AA 分组


首先看如何解决第一个问题:避免因流量分配不平衡,A/B 组本身差异过大造成对实验结果的误判。为解决该问题,我们引入了 AA 分组:基于实验者圈定的流量,通过 AA 分组将该流量分为无显著性差异的实验组和对照组。我们这样定义无显著性差异这一约束:首先,实验者选取的用于刻画实验流量的指标,在实验组和对照组之间无统计上的显著性(即上节所描述的基于均值的假设检验);其次,在所分出的实验组和对照组之间,这些指标的差值最小,即一个寻找最优解的过程。从实验者的实验流程看,在实验前,圈定进入该实验的流量,然后确定用于刻画实验流量的指标,最后调用 AA 分组,为其将流量分成合理的实验组和对照组。



A/B 效果评估


A/B 效果评估是实验者在实验后,依据评估报告进行决策的重要依据。因此,我们在实验后的效果评估环节,效果评估要达成三个目标即权威、灵活性和方便。


首先,权威性体现在用于作出实验结论所依赖的指标都是经过治理、各方达成一致的指标,并且确保数据一致性,最终通过假设检验给出科学的实验结论,帮助实验者作出正确的判断。其次,灵活性主要体现在采用列转行的形式,按需自动生成报表告别“烟囱式”的报表开发方式。第三,方便主要体现在不仅可以查看用于说明实验效果的指标,还可以选择查看接入到评估体系里的任意指标;不仅可以查看其实验前后对比以及趋势变化,还可以做到从实验粒度到流量实体粒度的下钻。效果如下图所示:



技术实现


不管是实验前的 AA 分组,还是实验后的效果评估,我们要解决的一个核心问题就是如何灵活地“取数”,为我们的 AA 分组和 AB 效果分析提供一个灵活稳定的取数服务。因此,我们整个架构的核心就是构建稳定、灵活的取数服务,具体架构如下图所示。离线建模和指标模型管理完成数据和元数据建设,建立权威完备的指标体系;中间的取数服务作为上层各应用服务和指标体系的“桥梁”,为上层各应用服务提供其所依赖的指标。


4. 总结与展望

目前,A/B 实验已成为许多互联网公司评估其新产品策略和方法的“金标准”,在美团配送业务场景下,它被广泛应用于调度策略、定价策略、运力优化、ETA 时间预估等业务场景,为我们的策略迭代制定数据驱动型决策。特别是针对配送场景下这种策略之间相互影响,请求不独立场景下的 A/B 实验,结合配送技术团队的具体实践,跟大家分享了我们目前的解决思路。


最后再补充一点,在 A/B 实验领域,实验的流量规模应该有足够的统计能力,才能确保指标的变化有统计意义的。为了更好地达到这个目标,未来我们将通过辅助工具建设,在实验前,依据实验者所关注的指标以及敏感度给出流量规模的建议,方便实验者在实验前快速地圈定其实验所需的流量。


作者介绍


王鹏,美团技术专家,2016 年加入美团。


启政,美团高级工程师,2018 年加入美团。


连恒,美团高级工程师,2016 年加入美团。


本文转载自公众号美团技术团队(ID:meituantech)。


原文链接


https://mp.weixin.qq.com/s/v3Fvp6Hed7ZGoE8FGlGMvQ


2020-06-01 14:051935

评论

发布
暂无评论
发现更多内容

概念有时候很坑

伯薇

抽象 思考力 沟通 概念

抄作业

escray

学习 CSD 认证实战营

谈谈控制感(2):怎么让我们更健康

史方远

个人成长 心理

视达荣登ChinaBang Awards 2020智慧零售榜Top10

极客编

一杯茶的时间,上手 Git 团队协作开发

图雀社区

git GitHub

如何推动与影响中型前端团队的成长

堂主

研发管理 大前端 团队建设

多个 SSH keys 的配置,方便 Git 对不同仓库的使用与管理

与光

git GitHub SSH

CDN云课堂 | EdgeRoutine技术专家教你把JS代码跑到CDN边缘

阿里云Edge Plus

Java CDN edge

Kafka系列第6篇:消息是如何在服务端存储与读取的,你真的知道吗?

z小赵

Java 大数据 kafka 实时计算

一文看懂开源工作流引擎 Flowable

八味阁

Java spring 开源 企业中台 工作流

用SpreadJS实现在线Excel的录入与展示,提升企业医保信息化服务水平

葡萄城技术团队

SpreadJS 医保信息化 在线excel

我站在愚蠢之巅

escray

学习 CSD 认证实战营

Java 编程基础

michaelliu

DD 测试linux性能

HU

想退休,可能没机会了

池建强

读书感悟

《Linux就该这么学》笔记(二)

编程随想曲

Linux

CDN百科 | 最近,你的APP崩了吗?

阿里云Edge Plus

CDN

可视化 Tekton 组件 Tekton Dashboard

郭旭东

Kubernetes cicd

读懂才会用 : 瞅瞅Redis的epoll模型

小眼睛聊技术

redis 缓存 学习 开源 架构 后端

KubeFATE:在Kubernetes上部署联邦学习平台

亨利笔记

人工智能 学习 FATE KUBEFATE

MySQL数据类型DECIMAL用法

Simon

MySQL

CDN百科 | 假如没有CDN,网络世界会变成什么样?

阿里云Edge Plus

并发编程如何才能不再头疼:iOS中的协程

超越杨超越

ios 协程 coobjc ucontext

用测试驱动开发学算法

escray

学习 CSD 认证实战营

TOTO 2020再次荣获iF、红点两项国际设计大奖

极客编

奔向 10W+ 的第一次 update

赵新龙

InfoQ B站 Quora

游戏夜读 | 如何优化缓冲加载?

game1night

由丰巢快递柜引发的思考

Neco.W

创业 思考 丰巢

GrowingIO 微服务 SaaS 与私有部署运行实践

GrowingIO技术专栏

大数据 微服务 SaaS

聊聊Serverless

kimmking

CDN云课堂 |可编程CDN – EdgeScript应用场景、语言速览和实操演示

阿里云Edge Plus

美团配送A/B评估体系建设与实践_架构_王鹏_InfoQ精选文章