本篇为《可信实验白皮书》系列的最后一篇内容,主要分享了 AB 实验分析方法库在美团的实践。同时,我们也为大家准备了一份系列全集的 PDF 文档,希望能够帮助到更多从事 AB 实验工作的同学们。
获取方式:关注美团技术团队微信公众号,在对话框回复「可信实验白皮书」即可获取下载链接。
为了帮助任何用户轻松摆脱 A/B 测试中的各种挑战,让没有复杂实验背景和专家知识的人也能零门槛自主进行可信、高效的实验。同时实现实验方法库与实验平台各基础设施(例如流量配置、数据生产)的解耦,以方便各专业团队能在各自领域内发挥专长,提高平台功能与方法的迭代效率。美团履约技术团队孵化了 AB 实验分析方法库——实验分析引擎 BETA(Banma Experimentation and Testing Analysis)。该库涵盖数十种先进的实验技术,支持实验设计、评估、诊断等环节所需的多样化核心功能以及标准化流程。并在工程层面统一解决了实验过程中大量统计理论导致的实验分析复杂化问题、过多统计陷阱引起的实验不可信难题,使实验者能够无门槛地以科学、高效的方式开展实验,并轻松获得可信的实验报告。
目前,该实验分析引擎作为核心方法库,已经面向美团内部开放,方便实验者和数据科学家的按需取用以及灵活探索需求。同时可避免重复开发相同解决方案的工作浪费,促进跨团队的知识共享和能力提升,推动整体实验能力的提升。关于履约平台实验分析引擎的更多思考,可参阅美团技术博客《新一代实验分析引擎:驱动履约平台的数据决策》。
8.1 产品特性
在履约技术团队,运行着大量实验,我们希望赋能所有团队以速度、严谨和信心进行改进。为此,秉承着可信、开放、敏捷、易用的原则,打造了新一代实验引擎。该实验分析引擎通过良好的封装以及设计,包括但不限于以下特性。
- 丰富的实验方法:涵盖白皮书中提到的所有实验方法,包括随机对照实验、随机轮转实验、准实验、观察性研究 4 大类别,其中提供了 11+种实验方法、7+种分组方法、10+种假设检验方法等等。不仅覆盖单边、多边实验场景多样实验用例,还提供了业界领先的小样本解决方案,如协变量自适应分组来解决小样本同质性问题,轮转实验和双重差分实验来应对溢出效应问题,以及合成控制法等观察性研究技术等。
- 方便易用:标准化实验分析请求参数,分析引擎会依据实验方法、指标类型、样本分布等上下文自动选择最为合适的检验方法,确保分析过程的鲁棒性。同时整个实现流程标准化,可自动执行数据预处理、策略效应估计、方差计算、P 值计算(假设检验),最终得出分析结论。如果进行的是实验设计,系统会根据实验方法选择与之相匹配的实验分组方法。
- 性能高效:分析方法执行期间会充分利用向量化运算、并行化技术来提升分析效率,其中随机对照实验支持分布式计算,亿级别数据可在分钟级完成分析。
- 多重比较修正:检验结果自动进行多重比较修正,解决了对于多实验组、多指标检验引起的第一类错误增大问题,确保实验结果科学性。
- 功效提升:例如随机对照实验场景下支持通过 CUPED 来进行方差缩减以提升检验灵敏度,支持选择一元同系数 CUPED、二元同系数 CUPED、新 CUPED 等多种方差缩减方法。
- 统合分析:突破单次实验样本量限制,支持对相同目的、相互独立的多个实验进行综合分析,以提升检验的统计功效。有助于在小流量场景下检测策略效果,且无需单个实验有大量样本就能获得可信结果。支持的统合分析技术包括样本加权、逆方差加权等。
- 功效测算:提供最小样本量预估、MDE 等计算方法,方便用户在实验前判断实验样本量是否充足,以避免实验白做。同时在实验后帮助用户分析策略不显著原因,判断是由于样本量不足,还是策略无效或未达预期导致,从而支持科学的实验决策。
8.2 系统设计
如图 8-1 所示,分析引擎提供标准化的分析流程以及多样化方法,采用模块化和分层设计原则来提升实验方法的迭代、拓展效率,以及实现像积木一样灵活应用,服务不同角色的用户。具体每层作用如下:
- 应用层:上层实验平台入口,包括到家履约团队孵化的图灵实验平台,通过接口接入分析引擎的第三方实验平台。此外还可通过 Python SDK 线下便捷使用实验分析引擎进行实验分析。
- 接口层:面向应用层提供的标准化的实验设计与实验评估接口。通过抽象出通用的实验分析参数,如数据集、分析指标、指标元数据、实验分组信息、扩展参数等信息,进而标准化了整个实验分析流程。这种方式提升了系统扩展性,方便我们快速集成新的实验方法,降低运维成本。
- 路由层:实验分析模板是通过原子分析方法库编排出的对应实验方法的确定的分析流程。路由层会根据实验方法、执行引擎信息,路由至不同的实验分析模板。特别的对于面向海量数据场景下的普通随机对照实验,我们通过抽象出一些关键聚合算子(如协方差、方差、均值等)的计算逻辑,适配了一套基于 PySpark 的分布式执行引擎。利用到 Spark 对于批量聚合算子的处理优化技术,做到了分钟级完成亿级以上的海量数据评估。
数据准备层:实验分析流程之前引擎层统一进行数据处理流程来准备实验数据集,包括:数据加载、数据预处理、指标二次计算等。这里的数据处理流程同时支持了单机与分布式两种方式。
- 数据加载:单机分析方式支持 S3(美团内部存储服务)文件、HTTP 文件作为数据源,通过 pandas.DataFrame 方式表征数据集。分布式分析方式支持 HDFS 文件、Hive 取数 SQL 两种方式定义数据源,通过 pyspark.DataFrame 来表征数据集。实验数据集定义方式支持多源合并策略,包括按列合并、按行合并。
- 数据预处理:引擎侧对异常数据进行统一的预处理,以获取有效、准确的实验数据,整个流程包括:① 空值填充,对于指标空值进行补零填充;② 数据格式转换,指标类型统一转换为 Float32 类型;③ 异常值剔除,支持实验单元为空值时的自动剔除,支持配置 3σ 、IQR 等统计方法对天级异常数据的剔除,并将剔除信息展示在最终的实验报告中。④ 补齐缺失计算指标,基于指标计算公式以及对应原子指标,补齐缺失的计算指标。
- 指标二次计算:满足个性化指标计算诉求,通过将更细粒度的数据按照预定义的指标聚合算子,上卷至实验单元粒度的数据。如:xx 指标 90%分位点-10%分位点。
分析方法层:实验分析引擎所集成的核心方法库,这一层通常由数据科学家负责,涵盖实验分组方法、假设检验方法、功效提升技术、最小样本量预估、MDE 计算等核心方法。每种实验方法的实验分组方法、显著性检验方法均编排至对应的分析模板中。其中显著性检验方法必须经过 AA 模拟验证才能上线,以确保实验方法的科学性。
- 实验分组:一般情况下,一个分组方法确定了一个实验方法。整体来看实验分组方法主要分为两类,① 随机实验分组,支持对于单次分组不同质时的系统重分组(最多 5 次),以尽可能获取一个满足实验条件的分组。这类实验方法包括:随机对照实验、随机轮转实验。② 最优实验分组,通过随机多次产生多个分组,选取 Diff 最小的一个分组作为最终分组。这类实验方法包括:随机配对实验、DID 双重差分实验。
- 显著性检验:通过实验方法、数据特点选择合适的假设检验方法,产出显著性检验结果。这里检验方法主要包括四大类:非参检验、参数检验、配对检验、模型检验。对于随机对照实验,默认会通过 CUPED 方法来提升检验灵敏度。完成显著性检验后也会通过统一的 P 值多重比较修正,以解决指标多重比较之后带来的假阳率升高问题。
8.3 系统接入
作为核心分析方法库,当前分析引擎已面向美团内部全体成员开放,并提供多种接入途径,方便实验者自行根据自身场景选择最佳实验接入方式。
8.4 线下分析实战
案例:履约 xx 算法计划开展一次随机对照实验以对比验证策略效果,实验流量选取若干城市,实验单元为 AOI,实验指标:订单量、完单用户数,人均完成单量,其中人均完成订单量指标为比率型指标,计算公式 = [订单量]/[完单用户数]
预期分三个实验分组,分组流量配比分别为 2:3:5。额外要求采用 CUPED 方法以提升检验灵敏度,通过 murmurhash 哈希函数来生成随机分组表达式。
方案:由于实验或指标暂时并未接入实验平台,为了快速开展实验,需采用线下分析的方式来进行实验设计,以寻找满足实验要求的分组划分方式。通过如下四个步骤即可在线下完成一个完整的随机对照实验设计(实验后的评估流程类似),具体流程如下:
步骤 01 :引入分析包
通过 pip 命令安装线下分析 SDK,引入核心分析客户端 AbAnalyzeClient 及相关类。
步骤 02:定义分析参数
- 通过定义数据集、实验分组、分析指标等信息来构造分析请求,请求参数对应于数据结构 [AnalyzeRequest]。
- 可以通过扩展参数 extArgs 来控制指定具体的分析行为,本案例中通过设置方差估计方法为 delta、CUPED 方法为二元同系数回归调整来指定随机对照实验的分析行为。
步骤 03:发起分析请求
- 通过函数式调用发起分析请求,这里会自动执行远程调用操作,直至返回分析响应结果,响应结果对应数据结构 [AnalyzeResponse]
- 如果某次分组不同质,后端系统会自动进行重试以获取一个目标指标满足同质性的分组结果。
步骤 04:实验设计报告
- 通过 show_report 函数以表格方式展示同质性检验结果信息,该报告支持复制。
- 业务可自行根据 MDE、P 值来判断该次分组是否达到实验开展的前提条件,如果达到满足实验条件,即可使用最终分组表达式来开展实验。
总结与展望
本白皮书基于美团履约与外卖策略的实验实践,系统梳理了随机对照实验、随机轮转实验、准实验、观察性研究四大类方法以及高阶实验工具,涵盖数十种实验技术,构建了完整的实验科学方法体系。为提高实操性,同步提供了配套分析引擎工具的使用指南,可助力用户快速上手。展望未来,我们将持续追踪实验方法的前沿进展,分享其在履约等场景的落地经验与最佳实践。同时逐步开放可信实验分流与计算架构等实验知识,推动实验能力的规模化赋能。通过共建科学、高效的实验体系与文化生态,致力于为组织的创新突破与可持续增长提供坚实支撑。
致谢
首先衷心感谢美团履约与外卖数据科学团队,特别是主要作者以及同事们对本白皮书的辛勤付出。同时感谢履约与外卖算法、数据、业务和产品等团队的鼎力支持,正是多部门背后的协同实践探索,以及对实验科学的信赖与支持,才使得我们不断深化对实验方法的理解与应用。最后诚挚感谢每一位读者的关注与阅读,希望本文对您有所启发,也欢迎和期待与您分享交流,共同成长。
如发现文章有错误、对内容有疑问,都可以关注美团技术团队微信公众号(meituantech),在后台给我们留言。
分享一线技术实践,沉淀成长学习经验