什么是 A/B 实验,为什么要开 A/B 实验?

news2024/11/17 5:49:08

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群

1、什么是 A/B 实验

A/B 实验也被称为 A/B 测试,实验的基本思路是在线上流量中取出一小部分(较低风险),完全随机地分给原策略 A 和新策略 B(排除干扰),再结合一定的统计方法,得到对于两种策略相对效果的准确估计(量化结果)。

这一套基于小样本的实验方法同时满足了低风险抗干扰量化结果的要求,因此不论在互联网产品研发还是科学研究中,都被广泛使用。

  • A/B 实验的应用一

Instead of saying "I have an idea," what if you said "I have a new hypothesis , let's go test it, see if it's valid, ask how quickly can we validate it." And if it's not valid, move on to the next one. —— Satya Nadella CEO, Microsoft

微软 CEO Satya Nadella 在business insider采访中,关于假设检验的这一段回答简练地描述了微软基于实验-分析-决策的数据驱动文化。

事实上,微软也是世界上最早采用 A/B 实验评估每一个重大 feature 的科技公司之一,从 bing 的搜索排序到 MSN 的交互设计,数据驱动的决策无处不在,每年为微软规避大量风险并创造可观回报。

下图,从 bing 这一侧面展示了微软实验平台同时运行的实验数量十年以来的井喷式发展。

  • A/B 实验的应用二

另外值得一提的是,这一套基于假设检验的实验方法并非科技公司首创,其影响远比我们想象得深远,可靠性也已经得到了长足的验证。

比如,在医学界,每一种新型药物研发都会伴随着一系列动物实验和临床测试,这些实验的效果都会以类似但更为严格的假设检验方法进行评估,最终被认定安全有效的药品才会进入市场,造福患者。

下图所示就节选自某种放射性疗法在乳腺癌治疗中的有效性报告,红框中的 95%CI(95%置信区间)和 p(p-value)就是假设检验中常用的统计术语。

2.为什么要开 A/B 实验

如今,大多数互联网产品野蛮生长的时代已经过去,人口红利到顶,产品策略需要从快糙猛的跑马圈地方式转向深耕细作精细化运营方式,要精细化运营,就需要采用数据来驱动。

数据驱动的必要性

何为数据驱动?试想以下几种场景:

  • 小 A 凭着丰富的经验直接修改了产品的线上策略,一周后发现效果不升反降,遂下线。

  • 小 B 和小 C 同时上线了两个产品功能,一周后产品数据有下降,都认为是对方的问题,谁也不肯接锅。

  • 小 D 上线了一个新策略,随后进入十一黄金周,用户交互有所下降,小 D 觉得一定是假期埋没了自己的辛苦贡献,但也辩不明白,无处申冤。

  • 小 E 辛苦工作一整年,开发了 365 个不同的功能上线,年终写总结时却写不出到底在哪些方面究竟贡献了多少。

想必不论是研发还是产品运营的同学,都不希望自己辛苦工作过后落入上述的几种尴尬的境地中,因此数据驱动业务增长就显得很有必要。

那么数据变化和产品动作之间到底存在什么样的因果关系呢?

假设,某互联网公司承载了上亿规模的 DAU,每天有数以百计的新特性等待上线,一方面业务人员无法承担其中任何一个错误特性直接影响上亿用户体验的严重后果,另一方面业务人员又希望能够分离并量化每个特性的影响。

因此,我们需要设计并坚持使用一套数据驱动的方法,使得业务人员可以以较小的风险对新 feature 进行评估,积极试错积累经验;并且我们设计的该方法有能力排除其他因素(比如同时开发的其他 feature 以及时间因素等)的干扰;最后,除了‘好’或者‘不好’,我们希望这个方法最好也能够给出 定量的结果。

如何做到数据驱动?

为了解决上述问题,普遍使用的方法论是小流量随机实验,也就是我们常说的 A/B 实验。

在推崇“数据驱动增长”的字节,A/B 实验是一种信仰。在经过多年的内部业务的打磨,目前已通过火山引擎正式把 A/B 实验平台对外服务,取名为 DataTester。它基于先进的底层算法,提供科学分流能力,提供智能的统计引擎,实验结果可靠有效,助力业务决策。深度耦合推荐、广告、搜索、UI、产品功能等多种业务场景需求,为业务增长、转化、产品迭代、策略优化、运营提效等各个环节提供科学的决策依据,让业务真正做到数据驱动。

DataTester 经过抖音、今日头条等字节业务多年验证,截至 2022 年 8 月,已在字节跳动内部累计完成 150 万次 A/B 实验。此外也已经服务了美的、得到、凯叔讲故事等在内多家标杆客户,将成熟的“数据驱动增长”经验赋能给各行业。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】minHash最小哈希原理及其应用

目录1 前言2 哈希函数的定义3 miniHash函数4 miniHash的例子5 miniHash数学原理6 miniHash的应用7 参考文献1 前言 在数据结构中学过哈希概念以及哈希在内存中的应用,在实际的应用问题中哈希技术也应用十分广泛如在推荐系统以及图神经网络技术中,所以在此…

Java多线程之死锁问题,wait和notify

文章目录一. synchronnized 的特性1. 互斥性2. 可重入性二. 死锁问题1. 什么是死锁2. 死锁的四个必要条件3. 常见的死锁场景及解决3.1 不可重入造成的死锁3.2 循环等待的场景哲学家就餐问题(多个线程多把锁)两个线程两把锁三. Object类中提供线程等待的方法1. 常用方法2. wait和…

剑指offer----C语言版----第八天

目录 1. 矩阵中的路径 1.1 题目描述 1.2 基础知识 1.3 思路分析 1.4 小试牛刀 1. 矩阵中的路径 原题链接: 剑指 Offer 12. 矩阵中的路径 - 力扣(LeetCode)https://leetcode.cn/problems/ju-zhen-zhong-de-lu-jing-lcof/submissions/ 1.1 题…

c++11 标准模板(STL)(std::deque)(七)

定义于头文件 <deque> std::deque 修改器 清除内容 std::deque<T,Allocator>::clear void clear(); (C11 前) void clear() noexcept; (C11 起)从容器擦除所有元素。此调用后 size() 返回零。 非法化任何指代所含元素的引用、指针或迭代器。任何尾后迭代器亦被…

静态主机清单

自定义环境 1.操作环境 需要保准三台主机能够互相通信。设置同一种网络模式&#xff08;nat&#xff09;。 2.配置IP地址 server---192.168.90.134 node1---192.168.90.135 node2---192.168.90.133 3.修改主机名 hostnamectl set-hostname server.exmaple.com hostnamec…

【安全硬件】Chap.3 如何插入一个硬件木马到芯片的组合逻辑电路的漏洞里?不影响正常电路的功能的情况下进行硬件的逻辑加密

【安全硬件】Chap.3 如何插入一个硬件木马到芯片的组合逻辑电路的漏洞里&#xff1f;如何进行硬件的逻辑加密在不影响正常电路的功能的情况下1. 组合逻辑电路的漏洞组合逻辑电路中的硬件木马—举例Fault injection attacks士兵巡逻预案系统解决方法——硬件的逻辑加密&#xff…

坦克大战2.0,3.0,4.0版本

1.坦克大战 0.3 在坦克大战游戏(0.2版)基础上添加如下功能:当玩家按一下j键,就发射一颗子弹. 编写Shot类 package com.yt.tankgame03;/*** 射击子弹*/ public class Shot implements Runnable{int x;//子弹的x坐标int y;//子弹的y坐标int direct;//子弹的方向int speed 2;//子…

Python 做了一个 ChatGPT 机器人,表妹玩了一下午

大家好&#xff0c;我是毕加锁。 毫无疑问&#xff0c;ChatGPT 已经是当下编程圈最火的话题之一&#xff0c;它不仅能够回答各类问题&#xff0c;甚至还能执行代码&#xff01; 或者是变成一只猫 因为它实在是太好玩&#xff0c;我使用Python将ChatGPT改造&#xff0c;可以实现…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的知识蒸馏模型/方法/源码

目录给我推荐20个比较流行的知识蒸馏模型给我推荐10个比较流行的知识蒸馏模型源码给我推荐20个比较流行的深度学习知识蒸馏方法给我推荐20个比较流行的深度学习知识蒸馏方法源码给我推荐20个比较流行的深度学习知识蒸馏实现源码给我推荐20个比较流行的知识蒸馏模型 好的&#…

VSCode配置并连接远程服务器 并设置免密登录

文章目录1 前言PyCharm与VSCode2 VSCode配置远程开发环境3 VSCode配置远程免密登录4 推荐插件参考1 前言 PyCharm与VSCode 最近由于许多深度学习的项目需要在服务器上跑&#xff0c;之前一直使用PyCharm进行开发&#xff0c;使用习惯之后觉得还行&#xff0c;配置稍微有点复杂…

(七)Docker上安装常用软件说明(tomcat,mysql)

目录 一、总体步骤 二、安装tomcat 三、安装mysql&#xff08;简易版&#xff09; 四、安装mysql&#xff08;实战版&#xff09; 一、总体步骤 1、搜索镜像 2、拉取镜像 3、查看镜像 4、启动镜像 5、停止容器 6、移除容器 二、安装tomcat 1、dockerhub官网搜索tom…

福利来了~Python内置函数最全总结,建议收藏

喜迎2023&#xff0c;希望所有人都幸福安康&#xff01;小编在这里给大家放烟花了&#xff0c;希望新的一年疫情嗝屁&#xff0c;霉运全跑&#xff01; 开始正文。 1 abs() 绝对值或复数的模 In [1]: abs(-6) Out[1]: 6 2 all() 接受一个迭代器&#xff0c;如果迭代器的所有…

前端bug每次都比后端多,我总结了5点原因

最近总有朋友跟我吐槽说&#xff0c;每次一汇报&#xff0c;就说前端bug多&#xff0c;前端能力有问题&#xff0c;几乎每次都是前端bug比后端多&#xff0c;还好几次导致项目延期。 我其实听的挺不是滋味的&#xff0c;前端bug比后端多&#xff0c;可能是这么几点原因吧 目录 …

Shiro历史漏洞复现 - Shiro-550

文章目录Shiro简介Shiro历史漏洞Shiro-550Shiro-721漏洞发现Shiro组件识别Shiro漏洞搜索Shiro漏洞检测工具Shiro rememberMe反序列化漏洞&#xff08;Shiro-550&#xff09;漏洞原理影响版本漏洞利用Shiro-721 (未完待续......&#xff09;Shiro简介 Apache Shiro是一种功能强…

LeetCode刷题复盘笔记—一文搞懂动态规划之115. 不同的子序列问题(动态规划系列第三十九篇)

今日主要总结一下动态规划的一道题目&#xff0c;115. 不同的子序列 题目&#xff1a;115. 不同的子序列 Leetcode题目地址 题目描述&#xff1a; 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指&#xff0c;通…

spring boot 日志

目录 什么是日志呢 ? 日志有什么作用呢? 什么是日志呢 ? 日志的作用是什么呢 ? 我们需要学会日志的什么 ? 自定义输出日志 日志持久化 为什么要将日志持久化呢? 如何进行日志的持久化 设置日志级别 日志级别有什么用呢 ? 日志都有哪些级别呢 ? 如何设置日志…

十二、Express接口编写 —— 跨域问题

在前面的HTTP模块内容内容当中讲到这个跨域的问题&#xff0c;跨域就涉及到浏览器的同源策略&#xff0c;跨域只出现在浏览器当中&#xff0c;在浏览器当中去执行脚本的时候会进行一个同源检测&#xff0c;只有是同源的脚本才会被浏览器执行&#xff0c;不同源就是跨域&#xf…

MySQL高级 SQL优化【order bygroup by优化】

目录 1&#xff1a;SQL优化 1.1&#xff1a;order by优化 A. 数据准备 B. 执行排序SQL C. 创建索引 D. 创建索引后&#xff0c;根据age, phone进行升序排序 E. 创建索引后&#xff0c;根据age, phone进行降序排序 F. 根据phone&#xff0c;age进行升序排序&#xff…

STM32MP157驱动开发——Linux 网络设备驱动

STM32MP157驱动开发——Linux 网络设备驱动一、简介STM32MP1 GMAC 接口简介YT8511C 详解二、驱动开发1.网络外设的设备树2.设备驱动三、测试网速测试参考文章&#xff1a;【正点原子】I.MX6U嵌入式Linux驱动开发——Linux 网络驱动 一、简介 网络驱动是 linux 驱动三巨头之一&…

[C语言]三种方法实现n的k次方(递归/调用math库函数/实现pow函数)[含递归图解说明]

目录 1.调用math库函数中的pow函数实现n的k次方 2.创造pow函数实现n的k次方 3.递归实现n的k次方&#xff08;含图解&#xff09; 1.调用math库函数中的pow函数实现n的k次方 pow函数的功能&#xff1a;计算n的k次幂 pow格式&#xff1a;pow(n,k) #include <stdio.h>#in…