如何从实验中获得更多?——AB实验的异质性分析实践

简介: 本文阐述了异质性分析的基本原理和方法、具体实践流程、落地等情况,总结实践经验,也期待更多交流和探讨。

一、引言

大家好,我是技术中心-数据科学部的夏栉,我们团队核心职责之一是负责app的实验设计、评估与分析工作。实验的重要性不言而喻,在实际业务中被广泛的开展和应用。通过AB实验,帮助我们低成本理解和验收策略的效果,是辅助业务策略和算法升级迭代的强有力工具。当实验结果的数据回收之后,数据科学同学一方面针对本次实验的数据情况,完成实验评估、进行策略影响链路和实验分析,给予明确的实验结论,并及时提供决策建议和风险提醒;另一方面,对于需要长期推进的策略或业务形态来说,为了高效且正向的迭代实验,充分利用已有实验数据进行优化空间的洞察和探索是必不可少的,从而辅助完成策略的改进或精细化。而异质性分析就是这其中重要的手段,推动实现从实验到优化的闭环迭代过程。


在过去的一年中,我主要负责物流成本补贴方向的数据科学工作。感谢过程中团队给予的机会和帮助,以及业务和算法同学的支持,得以实现补贴场景的异质性分析实践和落地。本文将阐述异质性分析的基本原理和方法、具体实践流程、落地等情况,总结实践经验,也期待更多交流和探讨。


二、为什么做异质性分析


2.1 从实验到优化

实际业务过程中,我们常遇到许多业务判断,如某个范围内配置补贴后,履约情况明显得到改善,接起率的改善是由补贴工具带来的还是自然的好转等问题。


这些问题实质上都是想要知道,如何从数据的相关性判定为逻辑上的因果关系。开展随机实验(AB Test)通过随机化过程避免混杂因子影响使得我们获得理想的干预效果的手段,避免将因果效应错误归因于不相关的变量。从因果角度去理解AB实验能够更好的实现认知升级、科学的设计和开展实验。


那么,通过异质性分析手段实现实验的优化,实际上是在整体效应的基础上,去进一步评估局部效应,更深入地挖掘在一次实验中可能影响我们策略对业务结果作用表现的原因和混淆因子,把握因果之间以及这些因子之间的相互作用关系,帮助看清整体策略表现,并洞察优化空间。

image.png


2.2 异质性的必要性

image.png

我们发现,在一次AB实验中,通过对照组和实验组的直接对比,可以获得平均因果效应,但是(如下图)可能在不同的群体上,我们发现策略的表现是有所差异的。比如,在A人群上策略对关注指标有所提升,在B人群上却是负向效果,当我们只观测平均因果效应时,这些信息便会被掩盖。也就是说,当一个策略输出正向的平均因果效应,这其中可能存在部分样本无因果效应或者为负向因果效应;如果一个策略整体为负向因果效应,那么其中也有可能有小部分群体是正向的。因此我们需要在一些细分维度上去看实验的表现,以实现策略的精细化。

image.png

对于一次成本策略的实验,平均因果效应能够细拆到天气、距离等等维度上,我们可以发现不同场景下策略表现的差异性。比如对于xx补贴来说,针对天气是否恶劣的情况在使用补贴工具时,可针对性的进行引导。而除了这些已知的、单一的维度外,仍然有许多未知维度或者交叉维度策略上可能表现出异质性。那么异质性分析核心就是给出这些局部场景下的CATE(Conditional Average Treatment Effect,见3.1.2),挖掘出异质性表现场景。


实际上,AB实验在实际应用中,我们经常发现策略的影响因素是复杂的,涉及到多个维度因素,当试图更进一步分析时,会自然而然地进行维度下钻,分别计算每个维度的策略效果。经历过的同学应该都有感悟,这一过程经常会繁杂和混乱,消耗大量的时间和精力。


下面的表格对传统维度下钻方式和uplift模型异质性分析进行比较:

 image.png

综合来看,维度下钻的主要问题一是在于难以选择维度组合,一方面无法将维度影响(维度组合或混淆因子)考虑全面、二是交叉维度高时操作困难;二是维度组合下的划分结果实验显著性不可信。而利用Uplift方法,得到稳定和置信的模型前提下,这些问题将迎刃而解,在第三部分展开介绍。


2.3 物流实验异质性分析的特点


聚焦到物流领域,物流实验的研究对象大多是运单,不同于常见的用户实验作用链路和数据埋点相对清晰和全面,在进行异质性分析时存在一定的困难。


首先是对于物流场景方面,影响链路复杂度高,刻画难度大;如一个运单在运行的过程中,存在各个策略的相互影响,每一环对于最终观测的Outcome都可能产生极大的影响。因此对于上下游环节的把握,需要较多的业务认知。另一方面,对于运单分流实验来说,由于运单是即时产生的,可获得的特征和观测都是一次性的,不存在历史表现等特征,且运单间实际上存在溢出效应,因此除了运单本身特征外,更多需要环境、供需、过程特征的输入。具体实践而言,一方面需要对影响环节进行梳理,对分析范围进行相应适当的限制,确定适当的分析场景;限定太多可能会缺乏落地价值和应用能力,限定太少可能会造成未观测到的混淆因素过多,难以得到置信的模型。另一方面,需要尽可能对过程中的混淆因子进行特征的抽象。


目标方面,就物流成本这一子场景来说,是通过不同的补贴或定价或活动等等策略,实现各方面的提升。于是,关于物流成本方向异质性分析的具体目标可以概括为:


  • 看清本策略:策略的整体效果评价;
  • 优化本策略:策略异质性场景挖掘;
  • 获得准确的CATE,辅助实验评估,有助于找到相应的场景,以进行后续策略迭代;
  • 挖掘未关注的特征因子,为算法模型的迭代提供新特征输入
  • 联动其他策略:其他价值洞见输出,实现成本与X的联动/置换。


三、如何开展异质性分析


3.1 基础知识准备

3.1.1 Uplift简介

Uplift模型与传统的预测模型最大的区别就是预测目标,从直接对y建模变为了对增量部分的建模。实际上,每个样本只可能对应有一种Treatment,不存在平行时空找到不同Treatment下的结果,因此uplift模型实质上是对反事实的预测,也由于这个原因,不存在预测结果的Ground truth,因此对Uplift模型的模型评估也不同于传统的预测模型。

image.png

我们熟知的营销四象限是Uplift模型最经典的应用,针对一个策略的作用结果可以将人群分为四类:高敏感人群,即给策略干预才会转化;自然转化人群,即给不给策略都会转化;无动于衷人群,即给不给策略都不会转化;反作用人群,即本来会转化、但是上了策略后反而不转化的人群。通过Uplift增益模型,我们可以找到AB实验中高敏感人群、反作用人群的样本所属的维度、维值,得到实现正向效果、负向效果分别在哪些场景。

3.1.2 因果效应

image.png

3.1.3 无偏估计ATE的三大假设

  • 稳定单元干预值假设(Stable Unit Treatment Value Assumption, SUTVA),又称:一致性假设(Consistency);

任何单元的潜在结果,不会因为分配给其他单位的处理而变化。并且对于每个单位,每个处理水平的不同形式或版本不会导致不同的潜在结果,两层含义:

a.单元之间具有独立性,不会产生相互作用;

b.一种处理只会导致一种结果;


  • 可忽略性假设(Ignobility)又称:条件独立性假设(Conditional Independence Assumption, CIA);


给定背景变量X,处理(或干预)变量和结果变量之间的关系是独立的,两层含义:


a.如果两个单元有相同的背景变量,那么他们施加相同的干预时,他们的潜在结果应该是一样的;b.具备相同变量的两个单元,他们的分配到干预的概率也应该相同;


  • 正值假设(Positivity)

确保对于任意背景变量X的unit集合,T=1和T=0的结果均存在;也就是在所有可能的取值范围内,处理(treatment)的概率是正值,即处理在观察样本中至少发生了一次。从而避免由于对给定的X,仅包含T=0的结果数据,使得T=1的结果无法估测。理论上每一个样本都必须要有接受treatment的可能性,实际操作中可以通过检查样本的分布情况来评估Positivity假定是否成立,当不满足正值假定的条件下,需要通过建模或者重加权的手段对反事实结果进行预估。


3.2 分析流程

3.2.1 场景确定


实验选择


影响链路短,样本量大,注意空白组的流量足够。


确定Treatment


在成本实验中,Treatment一般为补贴、扣减等策略工具。是否施加策略 (0-1 变量,划分到空白组or实验组)作为Treatment(如果实验组中不是实际生效单,Treatment也是1);如果实验内模型存在挑单逻辑,实验组和空白组统一挑单逻辑下的生效单/拟生效单,实验组中生效单为1,空白组拟生效单为0。


确定Outcome


最好能够以实验的核心关注指标作为Outcome,但是由于核心关注指标有一些是比较后置的业务指标,影响链路比较复杂,所以可以通过一些影响范围或作用环节的限定来确定Outcome。但是最终定下的Outcome一定需要能够直接影响到业务核心关注指标。


3.2.2 特征构建


接下来需要进行特征构建。对于因果推断来说,核心解决的挑战就是混淆因子,混淆因子的影响主要有两类:


一是Confounders影响Outcome,使得Outcome具有欺骗性 (Spurious Effect) 不能正确反映Treatment的作用;


二是Confounders影响Treatment Assignment:导致选择偏差 (Selection Bias),即观察到的数据分布与关心的数据分布不一致。


以发放补贴提升接起为例,我们通过观测数据会发现发了补贴的运单整体的接起率反而比没有发放的运单接起率要低,难道发放补贴对于接起率并没有正向的提升吗?实际上,我们在发放补贴时会针对难单进行补贴,而难单的接起率本身要低于大盘的接起率。这里的“运单难度”就是影响“发补贴”与“接起”之间因果关系的混淆因子。运单难度大因此运单相应接起率低,就是Spurious Effect;发放补贴的单都是难单,就是Selection Bias。


这里需要挖掘的也是这两类特征,一是会影响Outcome表现的特征、另一类是影响treatment对Outcome效应的混淆特征。特征需要保证相关性、可解释性和数据的可用性。

image.png

3.2.3 常见模型

常见的Rubin Causal Model框架实现因果效应估计的模型方法:

image.png

3.2.4 模型评估与解释


模型评估


由于没有真实存在的ground truth,评估的方向是预测ITE的排序是否与真实的Uplift排序一致。所以通过对数据样本做分组(或累积),将所有样本按照模型给出的uplift得分降序排列,按照等比分为K组(bins),后续的效果评估则通过对比相应组内Treatment组和Control组的得分差异实现。由此衍生出AUUC、Qini系数等评价指标。当auuc或qini系数越大时,说明模型预测干预效果的能力越强,即模型能够更有效地区分哪些个体对干预反应更积极。


(1)Uplift Curve & AUUC (左图)


  • 将数据集分组不断细分,精确到每个样本维度时,每次计算截止前t个样本的增量,得到Uplift Curve;
  • 曲线中,越高拱的模型效果越好,使用曲线下面积称为AUUC(Area Under Uplift Curve)作为数值衡量,与二分类评估中的AUC(Area Under ROC Curve)类似。也有些定义AUUC为Uplift曲线和Baseline的曲线下面积差;


(2)Qini Curve & Qini Coefficient (右图)


  • 当Treatment组和Control组样本不一致时,其表达的增量存在偏差,以Treatment组的样本量为准,对Control组做一个缩放,累积绘制的曲线称为Qini 曲线

image.png

模型解释


(1)Shap Value


  • SHAP 是由Shapley value启发而来的一种加性的可解释模型,属于模型事后解释的方法,它的核心思想是计算特征对模型输出的边际贡献,再从全局和局部两个层面对“黑盒模型”进行解释。SHAP构建一个加性的解释模型,所有的特征都视为“贡献者”。


  • SHAP认为,对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中各个特征所分配到的数值。通过计算一个特征加入到模型时的边际贡献,然后考虑到该特征在所有的特征序列的情况下不同的边际贡献再取均值。


(2)Shap摘要图(左图)


  • 摘要图结合了特征重要度和特征的影响,纵轴为所有样本SHAP值之和的特征排序,横轴为SHAP值。每个点代表一个样本,颜色表示特征值(红色对应高值,蓝色对应低值);宽的地方表示有大量的样本聚集,一个点代表一个样本。


(3)Shap依赖图(右图)

  • 代表两个变量交互效应。选择所需要分析的特征,每个点代表一个样本,横轴为特征值,纵轴为对应的shap值;颜色表示交互的特征(红色对应高值,蓝色对应低值)

image.png

四、物流成本相关实践


4.1 业务背景

压力补贴是为了解决在压力场景下的接起率问题。对于配置压力补贴的场景开展异质性分析,目标在于挖掘钱效表现异质性场景,帮助算法迭代,或对低钱效场景探索策略优化方向。压力补贴实验为补贴配置场景内的运单随机分流实验,针对这一场景的Treatment为空白组Treatment=0,算法模型组Treatment=1;Outcome为在指派阶段是否接起。


4.2 模型建立

  • 部分变量举例

变量类型

变量含义

决策指标

是否指派接起

分桶指标

是否为算法模型组(treatment = 1)

实验单元

订单id

非实验变量 - 出价

基配

压力补贴金额

非实验变量 - 时间线

补贴发生时间

剩余人力T

非实验变量 - 运单信息

是否节假日

是否正常天气

非实验变量 - 实时供需

范围内非空闲人力数量

范围内开工空闲人力数量

……

……

  • 用特征、Treatment共同预测Outcome,构建base-learner

模型效果:

image.png

  • 基于base-learner结果选取除Treatment外的Top N特征,以强化Treatment的影响;选用X-learner对uplift值进行建模。

模型效果:

image.png



4.3 模型解释和结论输出


通过因果模型可获得每个样本的ITE,即补贴带来的接起提升情况。通过ITE在不同特征下的聚合计算出CATE,可得到特征分层下的效应量;计算shap-value可得到每个特征对ITE的贡献情况。


步骤


Step1:总体shap图确认对uplift有比较强影响的特征集合:

image.png


Step2:单特征shap图,确认 image.png image.png 的影响关系,保证CATE结果可信。

Step3:判断对 image.png 的影响是否存在混杂因子 image.png

Step4:若有,则需下钻 image.png 计算 image.png 各维度下的CATE表现:

image.png

若无,则直接计算 image.png 各维度下的CATE表现

image.png

Step5:shap value 结合 CATE 结合 空白组 image.png 输出结论:

shap value正向,CATE大,策略有效的场景。shap value负向,CATE小,base低,策略优化空间。

shap value负向,CATE小,base高,降本or置换空间。



五、结语

通过异质性分析的手段,能够帮助我们在实验中进行更精细化的分析,通过业务洞见和特征输入的方式,从而辅助实现策略的优化迭代。在这一过程中需要不断沉淀常见的混淆因子、把握策略的影响链路,理解各类变量的复杂影响关系。我们当前的工作都是基于RCM框架进行的,依赖于三大假设,通过发现混淆因子进行反事实推断,基于Shap Value进行统计意义上的可解释/重要性;实际上在更进一步看清策略影响、归因推理时,SCM框架表达能力更强,更擅长描述复杂的问题,基于图模型进行因果推断,可实现因果效应估计也可用于结构发现。


总之,异质性分析不只是一个工具,更是一种思维方式,为我们提供了一个多维度的分析视角。通过异质性分析不仅强化了我们对策略的理解,引导我们进行更科学、更精准的进行决策,对于策略的迭代和优化提供一定的方向。


附录


因果推断与认知升级

Judea Pearl 在《The Book of Why》一书中提出“因果关系之梯”,将认知能力从下到上分成了3个层级(关联->干涉->反事实),学习难度依次增加:


  • 关联,也是传统机器学习的主要思路,刻画的是人类的基本观察能力,回答数据间的关联性问题(相关性学习)。相关性学习的一大缺点是数据具有欺骗性,数据反映出来的相关性不等同于因果。相关性学习可以拿来做数据分析,但不适合做决策。
  • 干涉,即通过一定的动作来干预并获得期望的结果,回答的问题是“如果做了X,那Y会怎样”。从历史数据只能获取到条件概率P(Y|X=x),而无法直接得到干涉结果。这时候,随机实验(AB Test)正是帮助我们获得理想的干预效果的手段。
  • 反事实,刻画的是人类的“高阶”能力——想象力,回答的问题是“如果当初我不做A而做B,那结果会如何”。我们把观测到的实际数据称为“事实”,把我们想象的另外一面称为“反事实”。在真实世界中,事实和反事实是不会同时出现的,这时候就需要借助因果推断的技术进行反事实推断。


混淆因子的影响

在不断攀登因果之梯的过程中最大的目标就是找出事物之间真正的因果关系,这其中最大的挑战在于无处不在的混淆因子。对于开展因果推断的影响主要在两个方面:


  • Confounders影响Outcome:使得Outcome具有欺骗性 (Spurious Effect) 不能正确反映Treatment的作用;
  • Confounders影响Treatment Assignment:导致选择偏差 (Selection Bias),即观察到的数据分布和我们关心的数据分布不一样;比如补贴的例子中发放补贴的单都是难单。

这些confounder就是造成熟知的伪效应、辛普森悖论、选择偏差这些现象的根本原因。

image.png


因此,在实际的业务过程中,需要大家时刻注意混淆因子对因果关系的影响,在利用数据进行结论的判断时进行相应的规避。


参考链接:


[1]https://www.law.berkeley.edu/files/AIPW(1).pdf

[2]https://sci-hub.se/10.1214/17-aoas1101

[3]https://arxiv.org/abs/1504.01132

[4]https://www.pnas.org/doi/pdf/10.1073/pnas.1804597116

[5]https://arxiv.org/abs/1712.04912v4

[6]https://arxiv.org/abs/1605.03661

[7]https://arxiv.org/abs/1606.03976

[8]https://arxiv.org/pdf/1810.00656.pdf

[9]https://openreview.net/pdf?id=ByKWUeWA-









来源  |  阿里云开发者公众号
作者  |  
夏栉

相关文章
|
移动开发 前端开发 测试技术
关于前端AB实验,我是这么思考的
背景 大家好, 我是Fly哥, 这次分享的内容主要是关于ABtest ,我们是做用户增长的,说白了就是对应下面几个关键词。拉新、激活、留存,留存的话 又分为 次日留存、 3日留存,这些都是我们的指标, 但是产品设计一个需求的时候, 可能会有实验的性质,不确定哪一组实验,对于指标的反馈是正向的,或者是那一组实验的效果更加明显。 这时候产品就会去创建AB实验,然后拿线上的一部分流量,去做实验, 分析数据, 得出实验结论,然后看是否满足预期, 如果不满足 就暂停实验, 或者进行全量实验。 大家可以看下下面这张流程图: 图片 然后对于我们前端而言,我们关心的点只有两个 第一个就是接入ABtest,
关于前端AB实验,我是这么思考的
|
1月前
|
数据处理 语音技术
实验介绍
【10月更文挑战第9天】实验介绍。
31 2
|
6月前
|
负载均衡 网络协议 数据安全/隐私保护
|
存储 C++
C++程序设计实验3
C++程序设计实验3
112 0
|
C++
C++程序设计实验7
C++程序设计实验7
64 0
|
C++
C++程序设计实验6
C++程序设计实验6
92 0
|
Serverless Scala
Scala编程实验一
Scala编程实验一
207 0
|
小程序 程序员
ass3实验
1.自我情况 2.使用过程 3.心得体会
|
存储
实验三
这个实验三顺序表的实现历经了从前天下午开始在实验室研究标准答案到昨天上午开始写代码并且大概今天才调试成功也是一把鼻涕一把泪的 实验3、顺序表的基本操作 (6学时) (1)实验目的 通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。
1053 0