一年40万次实验,字节跳动a/b测试平台是怎么炼出来的?

软件测试君 软件测试君     2023-01-14     348

关键词:


2012 年,刚刚建立的字节跳动便开启了 A/B 测试之旅,随着今日头条、抖音、西瓜视频等全线业务的使用,将 A/B 测试应用在产品命名、交互设计、推荐算法、用户增长、广告优化和市场活动等各方面决策上。据今年 4 月字节跳动旗下火山引擎技术开放日上透露的数据显示,字节跳动每天同时进行的 A/B 测试达到上万场,单日新增实验数量超过 1500 个,覆盖 400 多项业务。随着公司发展,这些数字还在不断扩大,仅最近一年就已经做了 40 万次 A/B 测试。

那么在字节跳动里,支撑这些测试的技术平台是怎么炼出来的?我们采访了字节跳动 A/B 实验平台技术负责人王珂,通过他的回复我们可以得到一个初步的了解。王珂将在 2021 年 10 月 21-23 日 QCon 上海站分享主题为《字节跳动 A/B 测试平台演进历史及实践》的演讲,更多内容可以通过观看演讲进行了解。

InfoQ: 有说法是目前这种形式的 A/B 测试最早出现于 1990 年代,您认为其核心原理这么多年是否有改变?

王珂: 核心原理基本没有发生什么改变,仍然是依赖随机采样获取两个样本集合,施加不同的策略,采集结果比较和分析。如果要说变化,更多的是应对实际的 A/B 测试场景,在测试方式、指标设计和显著性分析方法等细节上有了更多的探索和演进。

InfoQ: 能否以一个简单的例子,说明 A/B 测试如何工作?

王珂: 简单来说,一个 A/B 测试生命周期大致分三个部分:A/B 测试设计(包括测试内容、预期收益、测试时长、测试流量、观测指标等的确认)、A/B 测试执行(利用 A/B 测试平台的能力完成分流、配置分发、数据回收等)、A/B 测试结果分析(产出指标数据,显著性分析,多维下探等,最后形成分析报告)。

InfoQ:A/B 测试适合哪些场景?能运行 A/B 测试需要哪些必备条件?字节跳动的 A/B 测试平台主要适用于什么场景?

王珂: 通常而言,可以将样本随机划分为互不相关的两组,同时施加不同策略,并可以提供量化指标衡量策略效果的,都可以进行 A/B 测试。比较典型的如政策调整,无法随机将民众划分为两部分,一部分执行新政策一部分执行旧政策,这种就不适合进行传统意义的 A/B 测试,而通常会尝试在一个城市试点新政策,通过 DID 或者 SCM 等分析方法检验效果。

字节跳动的 A/B 测试平台立足于服务和支撑字节跳动内各大业务线的 A/B 测试需求,当前主要适用于算法迭代、产品演化、智慧运营等场景,未来也会随公司的脚步覆盖更多的场景。

InfoQ: 字节跳动的 A/B 测试平台有哪几个主要部分组成,整个平台大概经历了什么样的迭代过程?

王珂: 经过多年的迭代,字节跳动 A/B 测试平台由最初服务于推荐算法迭代,到现在包含 A/B 测试、配置发布、自动调参和探索实验室四大部分,覆盖了 A/B 测试的整个生命周期。

InfoQ: 数据采集部分,一般平台使用的是埋点或日志数据,那么字节跳动的平台是通过什么方法实现的?

王珂: 我们的平台也是基本基于埋点和日志数据来生产测试数据的。在字节跳动,埋点和日志数据汇集都有系统化的解决方案,使得我们的 A/B 测试平台可以比较容易的给出 A/B 测试结果。

InfoQ: 是否有一些测试比较复杂?字节跳动如何降低复杂性,让业务人员易于理解和使用?

王珂: 会遇到一些比较复杂的场景,平台也会尝试优化产品以降低使用门槛。一个比较典型的案例是算法侧的超参选择。在机器学习模型中经常会遇到一些超参,需要算法工程师凭借经验和 A/B 测试结果来调整这些超参的取值。传统做法下,算法工程师需要花几个月的时间,通过不停的 A/B 测试对比调整遴选合适的超参取值。为降低该场景的使用复杂性,字节跳动的 A/B 测试平台通过一些统计学方法,自动化的循环执行 A/B 测试,分析测试结果,预测最优解取值,协助算法工程师寻找到合适的超参,使得调参耗时由几个月缩减到几个礼拜。这也就是我们的自动调参系统。

InfoQ: 人们在做 A/B 测试时会犯哪些常犯的错误 / 陷阱?

王珂: 比较常见的是“连续观测”。举个夸张点的例子就是,一个 A/B 测试启动起来,使用者每天都会过来看一下是不是指标有显著正向;直到突然有一天,指标正向了,使用者开心的关掉 A/B 测试,撰写上线报告。这种连续观测,一旦显著立即决策的做法会令使用者拿到错误结论的风险大幅度上升,是不可取的。因此在字节跳动,A/B 测试使用方式的宣讲是我们需要例行去做的很重要的一个事情。

InfoQ:A/B 测试,可能因为不同的受众行为不同,对一家公司有效的东西不一定对另一家公司有效。那么字节跳动的 A/B 测试平台如何具备普适性?

王珂: 一方面,字节跳动的 A/B 测试始终以平台的方式将 A/B 测试做合理抽象,向不同的业务场景提供测试能力,考虑到公司较为复杂的产品矩阵,A/B 测试平台从诞生至今的一路迭代中始终站在 A/B 测试最基本的抽象上,以保证其普适性。

另一方面,像指标体系等与业务场景关联密切的资产,我们既要考虑它可能不具备普适性,而需要做到因业务而异;也要考虑到相似的业务线可能会重复建设相似的指标体系。因此,能够“将经验复制一份”也是我们平台需要频繁考虑的东西。

InfoQ:A/B 测试平均耗费时长是多少?如何减少“延时”,以比较快的速度得到结果,这方面您们有哪些可供大家参考的经验?

王珂: 不同场景,不同目的下,A/B 测试需要进行的时间也会有比较大的差异。例如搜索算法的小流量测试是为了快速探索算法迭代的可行性,几天或几个小时便能给出有价值的结果;而产品界面的变更,为了规避所谓的新奇效应,避免有些用户出于好奇心而带来的短期指标上扬,测试可能会开启几个礼拜甚至几个月。比较典型的 A/B 测试通常会持续 1-3 个礼拜。

通常而言一个 A/B 测试需要耗费多久,和 A/B 测试内容、测试设计有关。相比而言,减少一个 A/B 测试消耗的时间不如提升 A/B 测试的并发性,让系统同时容纳更多的 A/B 测试,对产品的整体迭代效率提升更加有益。

InfoQ: 字节跳动 A/B 测试平台有哪些未来规划?

王珂: 有三个比较重要的方向是我们的 A/B 测试平台在当前比较关注,在未来会加大力度投入的。

一个是对 A/B 测试分析能力的更大力度支持。开 A/B 测试在字节跳动相对是比较容易的,但是 A/B 测试分析和更多有价值信息的挖掘却没有那么容易。曾经有一个测试,指标上看并没有显著的提升,然而在一个特殊的维度上我们发现了显著的效果,进一步分析推理之后我们对策略进行了调整,最后还是拿到了比较大的收益。由此可见分析能力对于测试平台而言的重要性。

另一个是场景化支撑的能力。字节跳动的产品矩阵复杂度越来越高,不同的业务领域对 A/B 测试有着不同的诉求,相较于能力堆砌功能强大的巨无霸,一个清新简洁切合业务属性的系统对于业务迭代效率的提升更加有益,这也是我们架构演进的必经之路。

最后一个也是最重要的一个,是方法论的探索和储备,拓宽 A/B 测试的边界,应对今天和明天我们在业务上会遇到的新问题,例如在社交领域如何更好的解决网络效应等。

下面是测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

跟着字节ab工具datatester,5步开启一个实验

...动业务内部,在字节跳动,“万事皆A/B,一切可度量”的实验理念广为流传,小到一条站外推送的消息,大到整个技术底层架构的优化修改,都会做A/B测试,甚至今日头条、抖音、西瓜视频等诸多产品的取名,也都和A/B测试有关... 查看详情

火山引擎datatester:5个优化思路,构建高性能a/b实验平台

...字节跳动业务的多年打磨,在字节内部已累计完成150万次A/B实验,在外部也应用到了多个行业领 查看详情

火山引擎datatester:5个优化思路,构建高性能a/b实验平台

...字节跳动业务的多年打磨,在字节内部已累计完成150万次A/B实验,在外部也应用到了多个行业领 查看详情

从应用看火山引擎ab测试(datatester)的最佳实践

...A/B测试,在一个企业中可持续的应用实践甚至是形成一些实验文化而得到的心得体会。如下:A/B测试的业务适用性火山引擎A/B的内部应用不同行业的最佳实践可持续应用的实验文化A/B测试的业务适用性首先来介绍一下A/B测试适用... 查看详情

火山引擎datatester3大功能升级:聚焦敏捷智能与易用,帮助企业降本增效

...。DataTester脱胎于字节跳动长期沉淀,历经字节内部超150万次实验打磨,目前已能深度赋能业务,为企业的增长、转化、产品迭代,策略优化,运营提效等各环节提供科学的决策依据。作为A/B测试与智能优化平台,DataTester此次升... 查看详情

火山引擎a/b测试平台设计思路与技术实现

...擎A/B测试产品——DataTester研发工程师。想要获得一个A/B实验系统,需要做些什么事情?火山引擎团队会把这些事情分成四个部分。A/B实验需要通过人群采样,分出对照组和实验组并且下发不同的配置,让用户体会... 查看详情

火山引擎datatester:a/b测试,让企业摆脱广告投放“乱烧钱”

...字节500余个业务线的A/B实验任务,累计已开展过150多万次实验。广告实验是DataTester的一大特色能力之一。DataTester基于自身在因果推断和统计科学方面的深刻积淀,结合字节内部用户增长以及广告算法建设的诸多实践࿰... 查看详情

一文快速了解火山引擎a/b测试平台

...统计引擎、智能的调优算法,提供了从制定优化目标,到实验设计、指标计算、统计分析,再到功能全量发布的贯穿整个产品迭代周期的一站式服务。覆盖产品功能迭代、推荐算法优化、技术性能优化、运营素材调优、广告投放... 查看详情

火山引擎a/b测试平台设计思路与技术实现

...擎A/B测试产品——DataTester研发工程师。想要获得一个A/B实验系统,需要做些什么事情?火山引擎团队会把这些事情分成四个部分。A/B实验需要通过人群采样,分出对照组和实验组并且下发不同的配置,让用户体会... 查看详情

火山引擎a/b测试平台设计思路与技术实现

...擎A/B测试产品——DataTester研发工程师。想要获得一个A/B实验系统,需要做些什么事情?火山引擎团队会把这些事情分成四个部分。A/B实验需要通过人群采样,分出对照组和实验组并且下发不同的配置,让用户体会... 查看详情

应用火山引擎datatester“避坑”,抖音实现用a/b实验快速试错

...但它对于产品所带来的影响是正向还是负向,需要通过A/B实验进行评估验证。DataTester就帮助团队快速试错,避免了不合适的功能上线后为产品带来的负向影响。如图所示,该团队在DataTester中设计了这样一个实验:图一是对照组... 查看详情

去了字节跳动,才知道年薪40w的测试有这么多?

...f1a;哪家互联网公司薪资最‘厉害’?下面的评论多为字节跳动,还炸出了很多年薪40W的测试工程师我只想问一句,现在的测试都这么有钱了吗?前几天还有朋友说,从腾讯跳槽去了字节,一开始我还不理... 查看详情

程序人生:去了字节跳动,才知道年薪40w的测试有这么多?(代码片段)

...f1a;哪家互联网公司薪资最‘厉害’?下面的评论多为字节跳动,还炸出了很多年薪40W的测试工程师我只想问一句,现在的测试都这么有钱了吗?前几天还有朋友说,从腾讯跳槽去了字节,一开始我还不理... 查看详情

火山引擎datatester上线全新mab智能调优实验

...回复【1】进入官方交流群近期DataTester上线了MAB智能调优实验功能,希望通过智能化、自动化的A/B实验形式,帮助业务团队实现收益最大化。在A/B实验平台的研发道路上,火山引擎DataTester走在业内前沿,在常规的A/B实验之外,一... 查看详情

presto在字节跳动的应用

...的;•当前数以万计的计算核心;•每天大约100万次查询;•覆盖BI、Ad-hoc等场景。从右边的图可以看出,Presto每天的查询量是往上增的趋势。上图是字节跳动的Presto集群架构,所有查询都是先经过网关,... 查看详情

仅一年工作经验成功跳槽字节跳动,腾讯并拿到字节的offer,全靠这份面经!

前言前几天由于工作的原因一直没怎么看私信,昨天在整理私信的时候看到了一个粉丝给我疯狂私信想要我帮忙整理一份大厂面经,说自己工作也有几年了想跳槽冲刺一下,但是不知道该怎么做好前期准备。我看到这个粉丝也是... 查看详情

火山引擎datatester推出可视化数据集成方案

...的交流、共享和融合均有隔阂。而今越来越多企业认可A/B实验所带来的价值,希望将实验纳入整个业务流程中时常会面临这样的场景——想接入A/B实验平台,但有大量埋点数据需要重复建设。如何减少基础数据的重复建设,快速... 查看详情

一道字节跳动面试题——判断字符串交错

 判断字符串交错给定三个字符串a,b,c,判断c是否可以通过字符串a,b的子串按顺序交错组成. 例如:a:"btdne"b:"yeac"c:"bytedance"返回:Truea:"bytece"b:"dan"c:"bytedance"返回:Truea:"bytec"b:"dan"c:"bytedance"返回:Falsea:"byte"b:"danced"c:"bytedance"返回:Fals... 查看详情