AB实验总结
互联网有线上系统,可做严格的AB实验。传统行业很多是不能做AB实验的。
匹配侧是采用严格的AB实验来进行模型迭代,而精细化定价是不能通过AB实验来评估模型好坏,经历过合成控制法、双重差分法,目前采用双重差分法来进行效果评估。
本次只讨论AB实验,其他的非AB实验方法不做详细描述,大家可初步参考之前吴百威整理的文档。登录 上海哈啰普惠科技有限公司 · 上海哈啰普惠科技有限公司 《双边市场下的实验设计》。总体来说,实验研究的方法梳理见下图:
AB实验基础
A/B实验的目的在于通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的结论,并确信该结论可推广到全部流量。
A/B实验的基本思想其实非常简单——通过控制变量法,随机抽取一些样本进行实验组和对照组的对比实验,回收实验数据,通过统计学相关知识判断两组的优劣。而目前互联网行业的A/B实验设计基本上都是参考Google公司的经典论文:《Overlapping Experiment Infrastructure:More, Better, Faster Experimentation》。通过“层”,“域”的设计,从宝贵的线上流量中选择一部分,验证产品的某个新特性,回收数据,以此选择产品迭代方向。大胆假设,小心求证,用科学的方式让产品的每一次迭代都走在正确的道路上。
传统AB实验
将正交的参数放在不同的层中,这样就可以达到同层流量互斥,分层流量复用的目标
正交性校验:
A,B是第1层中任意两个桶,用户占比例分别为N(A),N(B),X是第2层中任意一个桶,如果满足以下条件:N(AnX)=N(A)*N(X)、N(BnX)=N(B)*N(X),则说明第1层和第2层是正交的。同样,这个也是可以从数学上进行证明的
最小样本量计算:
设置指标时要根据业务情况决定,设置为对业务有意义的提升下限。比如1个实验业务认为至少提升5个点才有意义,提升2个点没有意义,那就设置为提升5个点需要的最小样本量是多少,2个点的差异不管有没有被检验出来都不重要。
规律:提升幅度越高,需要的最小样本数量越少
顺风车业务体量,基本可以忽略这个问题
自动计算工具:Sample Size Calculator
实验的有效天数:定价实验特别要考虑
需要考虑两个因素:
(1)试验进行多少天能达到流量的最小样本量
(2)同时还要考虑到用户的行为周期和适应期
- 用户的行为周期
部分行业用行为存在周期性,例如电商用户购买行为,周末与工作日有显著差异。故实验有效天数应覆盖一个完整的用户行为周期。
- 用户学习效应
我们的一些改动会引起老用户的好奇或不满,这时候,我们可以拉长实验周期,或者仅用新用户进行实验。
还有其他置信区间、验证指标的显著的检验方法,不详细写了。
伽利略平台已经具有的能力,顺风车所有实验都是使用数分配置的指标进行,指标统一。
网络溢出效应的AB实验
用户之间存在相互影响,这个就是我们提到的社交活动,比如说分享红包,我可以在活动发起端把用户分成实验组跟对照组,实验组参与这个活动的时候,用户把活动分享出去,就会把这个活动覆盖到原来队长组的那一波人里,就会影响效果。我们可以通过社交网络关系的刻画,找到相对孤岛的一群人,就这一群人相对内部闭环,然后把这一波人切下来去做对照组,跟其他的用户进行效果对比。他们因为关联性会比较小,所以产生的联系会比较少,但是这里面用户本身可能天然存在一定的差异。
基于地理隔离
由于用户之间的相互影响,可能产生网络效应,导致AB测试用户分隔达不到预期,所以我们要尽量从地理上去区隔用户进行实验。
从地理上区隔用户,这种情况适合滴滴这种能够从地理上区隔的产品,比如北京是实验组,上海是对照组,只要两个城市样本量相近即可。
基于簇的随机化网络实验
它的思想是把网络传播路径用一个社交关系图来刻画,并通过算法把关系图划分成不相交的簇,对簇做随机化实验,从而降低网络效应带来的偏差。
双边交易市场的AB实验
双边市场是一个连接两个群体的平台,在经济学中,我们称之为供给方和需求方。由于需求方和供给方的行为存在彼此影响(即双边网络效应),导致在 AB 测试中,实验组和对照组很难满足独立性的假设,因此如何设计实验是一个比较大的挑战。
双边网络中,供给方彼此存在竞争,需求方内部存在竞争,同时需求方的变化会引起供给方的变化,影响相互交织形成复杂的竞争环境。
电商平台AB实验
没啥新意,不存在抢夺效应,简单的用户随机分流即可
广告平台AB实验
主要是参考腾讯的这个分享,目前分析下来广告平台的隔离思路在出行行业没法使用
广告场景下双边市场的实验设计
隔离广告和流量,新方法只在实验广告组和实验流量组生效
广告和流量同时隔离
广告和流量同时隔离,但是多出空白组
广告分身实验
出行平台AB实验
时间片分流
常见时间片分流
一般是城市id+时间片,滴滴的方式。
传统AB随机分流的分流对象是用户唯一ID(司机唯一ID),而时间片分流的分流对象是一段段的时间片。这种分流算法的应用在某些业务场景并不关注单个用户的选择,更关注在一个时间片内所有用户的选择。假定时间片大小为1s,那么在这1s内所有的用户都会进入同一个组。同时将城市id加入随机因子中,就可以观察不同城市在一个时间片内用户分流情况的对比,计算业务评估指标。
- 比如选定城市上海,A:实验组,B:对照组,实验周期14天=14T,每个周期T=1天,每个时间片假定是2小时,具体AB实验分组如下:可以看到AB2组在实验期间的流量占比=1:1
- 缺点:
1: 实验周期太长,上海这座城市实验期间可能还会上线别的实验,没法保证时间片分流的正交
2: 实验组和对照组上来就是50对50分的大盘流量占比,如果实验组效果不好,没法及时感知到。
时间片轮播分流
这是参考货拉拉的方式
https://analytics.zhihuiya.com/patent-view/image?limit=20&q=%E8%B4%A7%E6%8B%89%E6%8B%89%20AND%20%E6%97%B6%E9%97%B4%E7%89%87&_type=query&redirectUrl=%2Fsearch%2Finput%2Fsimple&patentId=223c95f1-38a6-42ed-97f2-7d13c75ad0a1&sort=asc&rows=20&page=1&source_type=search_result
时间片轮播,首先需要划分一个周期,比如一天(24*3600s),再指定时间片大小3600s,同时设置不同组占用的时间片的个数,那么分流SDK就会按照该所设置不同分组占用时间片的个数进行分流,保证一个时间片内所有订单进入相同组,并且在一个周期内,不同组占用时间片的比例符合预先的设定。
为了方便统计效果,最好实验周期是以天为单位,上面的做法太散了
- 针对大盘流量,A:实验组,B:对照组,实验阶段一周期2天=1T,每个周期T=4小时,需12个周期。每个时间片假定是1小时,AB2组在实验期间的流量占比=1:3
多实验并行和长期实验效果评估
多实验并行
题目1:国庆期间,产品进行了一系列组合拳,拼三单功能开启,快筛增加了国庆期间订单过滤,营销活动等,请问:产品运营一系列动作对大盘的贡献是多少?
简单解法1: 采用累乘的方式近似计算
base发完率 | 迭代实验1大盘提升3% | 迭代实验2大盘提升2% | 迭代实验3大盘提升1% | 总共3次实验 |
50% | 50%*(1+3%)=51.5% | 51.5%*(1+2%)=52.53% | 52.53%*(1+1%)=53% | 50%-》53% |
有没有更好的办法?
- 有时候,实验A和实验B,有着相互放大的作用,这时候就会 1+1 > 2
- 还有时候,实验A和实验B,本质上是做相同的事,这时候就会 1+1 < 2
多数的实验都是短期的,长期的实验该如何设计?对于长期业务,可能需要非常多的实验同时进行,不但需要对比每个小迭代的贡献,还需要对比整个模块对大盘的贡献量、部门整体对大盘的贡献量,这样就需要运用到了实验的「层域架构」。注:这个架构最早是由Google的《Overlapping Experiment Infrastructure》论文提出。
就需要一个贯穿所有活动的对照组,在AB实验系统中通俗称作「贯穿层/域」。
注:「贯穿层」在Google的论文中称为「non-overlapping domain」
根据层域架构设计顺风车大盘分流图
有个这个分流图后,我们来回答题目1:
1: 计算国庆活动1的贡献:国庆活动1的实验组 VS 国庆活动1的对照组
2: 计算国庆活动2的贡献:国庆活动2的实验组 VS 国庆活动2的对照组
3: 计算国庆活动整体贡献:业务实验域-贯穿层-国庆活动填充组 VS 大盘贯穿域-线上推全版本填充组
长期实验效果评估
题目2:这个季度算法侧推荐算法模型5次,发完率每次分别提升5%,4%,3%,2%,1%,请问:总共对业务有提升多少?
根据分流图后,我们来回答题目2:
计算上个季度整体贡献:业务实验域-贯穿层-推荐算法填充组 VS 大盘贯穿域-上个季度版本填充组
历史文档:
AB实验知识大全(流程、原理、方案设计、实验分析...)
数据分析岗 | AB实验之实验分流(三)
全网关于AA & AB Test最全最清楚的介绍
AB实验技术前沿:双边市场、用户泄漏、因果推断等话题的深入探讨
货拉拉A/B实验分流算法实践
万字干货!营销场景下的AB实验原理
广告场景下双边市场的实验设计
搭建企业级 AB/Testing 平台实践 - AIQ
如何设计一个 A/B test --来自腾讯数据分析师的分享_如何写ab test 模版_浮豹的博客-CSDN博客
产品简介
AB实验
统计学(4)|AB测试—实验流程
浅谈AB Test实验设计(二)——同时多实验并行和长期实验
电商领域A/B实验平台建设方法
数据化运营实战:滴滴的AB实验探索
相关文章:
AB实验总结
互联网有线上系统,可做严格的AB实验。传统行业很多是不能做AB实验的。 匹配侧是采用严格的AB实验来进行模型迭代,而精细化定价是不能通过AB实验来评估模型好坏,经历过合成控制法、双重差分法,目前采用双重差分法来进行效果评估。…...
sklearn包中对于分类问题,如何计算accuracy和roc_auc_score?
1. 基础条件 import numpy as np from sklearn import metricsy_true np.array([1, 7, 4, 6, 3]) y_prediction np.array([3, 7, 4, 6, 3])2. accuracy_score计算 acc metrics.accuracy_score(y_true, y_prediction)这个没问题 3. roc_auc_score计算 The binary and mul…...
python温度转换程序
1.使用pycharm运行温度转换程序,尝试将温度单位设在前面 2.参照温度转换程序,自己写一个关于货币转换、长度转换、重量转换或者面积转换的程序 循环函数 def convertemperature():temperature ""while (temperature ! "q"):temperature in…...
Vue2中10种组件通信方式和实践技巧
目录 1,props / $emit1.1,一个需求方法1方法2 1.2,v-model 和 .syncv-model.sync 2,$children / $parent3,ref4,$attrs / $listeners$attrs$listenersinheritAttrs1.1 的问题的第3种解决方法 5,…...
Flutter flutter.minSdkVersion的实际文件位置
Flutter 项目的Android相关版本号配置: flutter.minSdkVersion 的版本号配置文件实际路径: …/flutter_sdk/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy Flutter版本号如下: bzbMacBook-Pro ccsmec % flutter --version …...
python生成PDF报告
前言 最近接到了一个需求-将项目下的样本信息汇总并以PDF的形式展示出来,第一次接到这种PDF的操作的功能,还是有点慌的,还好找到了reportlab这个包,可以定制化向PDF写内容! 让我们由简入深进行讲解 一、reportlab是…...
在visual studio里安装Python并创建python工程
在2009年,云计算开始发力,Python、R、Go这些天然处理批量计算的语言也迅猛发展。微软在2010年,把Python当成一个语言包插件,集成到了visual studio 2010里。在"云优先,移动优先"的战略下,于2015年…...
AIGC(生成式AI)试用 6 -- 从简单到复杂
从简单到复杂,这样的一个用例该如何设计? 之前浅尝试用,每次尝试也都是由浅至深、由简单到复杂。 一点点的“喂”给生成式AI主题,以测试和验证生成式AI的反馈。 AIGC(生成式AI)试用 1 -- 基本文本_Role…...
竞赛 基于深度学习的人脸识别系统
前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…...
uniapp:APP开发,后台保活
前言: 在ios中,软件切换至后台、手机息屏,过了十来秒软件就会被系统挂起,APP内的任务就不能继续执行;在android中,默认情况下,软件在后台运行的时候,触发某些特定条件的情况下&…...
vue2 项目中嵌入视频
案例: 代码: <template><div class"schematicDiagramIndex"><el-container><el-aside width"20rem"> <!-- <h4 style"font-size: 18px">视频演示</h4>--><div styl…...
第二章 进程与线程 十二、进程同步与进程互斥
目录 一、进程同步 1、定义 二、进程互斥 1、定义 2、四个部分 3、原则 一、进程同步 1、定义 进程同步是指在多个进程之间协调执行顺序的一种机制,使得进程按照一定的顺序执行,以避免出现不一致的情况。常见的实现方式有信号量、管程、屏障等。…...
Linux内核链表(list)移植到任意平台
一、前言 linux内核链表在include/linux/list.h文件中,内核中实现的链表比较简洁,实用性很强,因此想把它单独移植出来使用。 内核中的代码只能使用gnuc编译器编译,stdc编译器编译是会报错的,主要是因为typeof这个宏是…...
【操作系统】聊聊什么是CPU上下文切换
对于linux来说,本身就是一个多任务运行的操作系统,运行远大于CPU核心数的程序,从用户视角来看是并发执行,而在CPU视角看其实是将不同的CPU时间片进行分割,每个程序执行一下,就切换到别的程序执行。那么这个…...
CMake教程-第 2 步 添加一个库
CMake教程-第 2 步 添加一个库 1 CMake教程介绍2 学习步骤Step 1: A Basic Starting PointStep 2: Adding a LibraryStep 3: Adding Usage Requirements for a LibraryStep 4: Adding Generator ExpressionsStep 5: Installing and TestingStep 6: Adding Support for a Testin…...
DS 顺序表--类实现(C++数据结构题)
实现顺序表的用 C 语言和类实现顺序表 属性包括:数组、实际长度、最大长度(设定为 1000 ) 操作包括:创建、插入、删除、查找 类定义参考 #include<iostream> using namespace std; #define ok 0 #define error -1 // 顺…...
0.UML
1.图 1.1类图含义 第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意前面的符号, ,表示public,-,表示private,#,表示protected。 1.2接口图 与类图的区别主要是顶端有<< interface >…...
PostgreSQL设置主键为自增
1、创建自增序列 CREATE SEQUENCE table_name_id_seq START 1; 2、设置字段默认值 字段默认值中设置 nextval(table_name_id_seq) 3、常用查询 -- 查询所有序列 select * from information_schema.sequences where sequence_schema public; -- 查询自增序列的当前值 select cu…...
input修改checkbox复选框默认选中样式
问题描述: <input type"checkbox" /> input修改checkbox默认选中样式,直接设置选中后的样式不生效,需要先给复选框设置-webkit-appearance: none(取消默认样式), 再设置样式才会生效。 …...
高云FPGA系列教程(10):letter-shell移植
文章目录 letter-shell简介letter-shell源码获取letter-shell移植函数和变量应用示例 本文是高云FPGA系列教程的第10篇文章。 shell,中文是外壳的意思,就是操作系统的外壳。通过shell命令可以操作和控制操作系统,比如Linux中的Shell命令就包括…...
【C语言学习笔记---指针进阶02】
C语言程序设计笔记---017 C语言进阶之回调函数1、函数指针数组2、回调函数3、 回调函数的应用 --- qsort库函数4、模拟qsort函数5、结语 C语言进阶之回调函数 前言: 通过C语言进阶前篇的指针进阶01的知识,继续学习。这篇引用一个简易计算器的程序进行深…...
低功耗蓝牙物联网:未来连接的无限可能
物联网是连接各种设备和传感器的网络,其目的是实现信息的交换和共享,提高效率并优化生活。在这个领域,低功耗蓝牙(BLE)正在发挥着越来越重要的作用。 低功耗蓝牙是一种无线通信技术,它的主要特点是低功耗和…...
安装社区版本OB
获取一键安装包 https://www.oceanbase.com/softwarecenter 离线安装 [admintest001 ~]$ tar -xzf oceanbase-all-in-one-*.tar.gz [admintest001 ~]$ cd oceanbase-all-in-one/bin/ [admintest001 bin]$ ./install.sh [admintest001 bin]$ source ~/.oceanbase-all-in-one/…...
JSON 串和 Java 对象的相互转换
JSON 串和 Java 对象的相互转换 以 json 格式的数据进行前后端交互 前端发送请求时,如果是复杂的数据就会以 json 提交给后端; 而后端如果需要响应一些复杂的数据时,也需要以 json 格式将数据响应回给浏览器 为达到以上目的就需要重点学习…...
爬虫 — App 爬虫(一)
目录 一、介绍二、APP 爬虫常见反爬三、APP 抓包常用工具四、模拟器五、安装 APP1、下载 APP2、安装 APP 六、fiddler1、工作原理2、安装3、基本介绍 七、环境配置1、fiddler 的配置2、夜神模拟器的配置 八、案例 一、介绍 爬虫分类——数据来源 1、PC 端爬虫(网页…...
如何使用正则表达式实现Java日志信息的抓取与收集
首先,什么是Java日志信息?简单来说,Java应用程序在运行过程中会输出一些信息,这些信息可以用来追踪程序运行状态、调试错误等。而Java日志信息就是这些输出信息的集合。 那么为什么要抓取和收集Java日志信息呢?一方面…...
C/C++算法入门 | 简单模拟
不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始,不如现在行动! 文章目录 🌴前言🌴一、害死人不偿命的(3n1)猜想1.题目(PAT B1001)2.思路3.代码实现 &am…...
stm32学习-芯片系列/选型/开发方式
【03】STM32HAL库开发-初识STM32 | STM概念、芯片分类、命名规则、选型 | STM32原理图设计、看数据手册、最小系统的组成 、STM32IO分配_小浪宝宝的博客-CSDN博客 STM32:ST是意法半导体,M是MCU/MPU,32是32位。 ST累计推出了:…...
mnist数据集
训练模型 import tensorflow as tfimport keras from keras.models import Sequential from keras.layers import Dense,Dropout, Flatten,Conv2D, MaxPooling2D # from keras.optimizers import SGD from tensorflow.keras.optimizers import Adam,Nadam, SGDfrom PIL import…...
Java之IO概述以及
1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键…...
网站建设专业知识/百度指数查询官网入口
《计算机的四个基本功能》由会员分享,可在线阅读,更多相关《计算机的四个基本功能(2页珍藏版)》请在人人文库网上搜索。1、1. 计算机的四个基本功能(Functions)是什么?答:1)、Data processing2)、Data storage3)、Data movement4)…...
网站建设销售主管岗位职责/正版seo搜索引擎
冻哭了!今(28日)早中央气象台升级发布寒潮橙色预警!这也是最高级别的寒潮预警!28日08时山东省气象台发布寒潮黄色和海上大风黄色预警信号山东省气象台于12月28日11时00分继续发布大雾橙色预警信号↓↓↓目前,济南、聊城、淄博、潍…...
湖南做网站找谁/门户网站推广方案
领导终于把我们的老的显示器换成液晶了, 感谢党,感谢人民,感谢孙总。 呵呵,今年下半年业务有点起色, 老总要改善我们的环境了。 公司是在进步,个人的能力也 有 进步 。 但是 不 明显,没有 大踏步…...
博彩网站做维护/免费推广引流怎么做
北京户口越来越难搞了,逐步看下非北京户口带来的限制~ 关于养老保险,非北京户口在北京缴纳养老保险,退休后在哪里领取养老金的问题: (1)最后参保地是北京,且在北京缴纳养老保险超过15年&#x…...
网站开发还是做数据库开发/接单平台app
介绍通常情况下,在主机和VNX存储系统物理连接正常后,新安装的主机都要到存储系统上完成注册。注册过程中会将主机IP地址、主机名称和操作系统信息发送到存储系统,以方便存储系统对主机的日后管理。目前有三种常见主机注册方法:手动…...
做移动网站优化首页软/外贸网站免费推广
官网说明:https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E8%AD%A6%E5%91%8A在linux下搭建nginx测试网页的时候,正常打开可以访问,当刷新后页面出现404 not found的问题说明:vue-router 默认 hash 模式 —— 使…...