A/B测试实践全总结

news/2024/11/30 0:47:55/

一:基本概念


网站设计中,我们经常会面临多个设计方案的选择,比如某个按钮是用红色还是用蓝色,是放左边还是放右边。传统的解决方法通常是集体讨论表决,或者由某位专家或领导来拍板。虽然传统解决办法多数情况下也是有效的,但A/B 测试(A/B Testing)可能是解决这类问题的一个更好的方法。

所谓 A/B 测试,简单来说,就是为同一个目标制定两个方案(比如两个页面),让一部分用户使用 A 方案,另一部分用户使用 B 方案,记录下用户的使用情况,看哪个方案更符合设计目标。当然,在实际操作过程之中还有许多需要注意的细节。

A/B 测试最核心的思想,即:

  1. 多个方案并行测试;

  1. 每个方案只有一个变量不同;

  1. 以某种规则优胜劣汰。

需要特别留意的是第 2 点,它暗示了 A/B 测试的应用范围,——必须是单变量。

另外,虽然 A/B 测试名字中只包含 A、B ,但并不是说它只能用于比较两个方案的好坏,事实上,你完全可以设计多个方案进行测试,比如ABC测试,“A/B 测试”这个名字只是一个习惯的叫法。

回到网站设计,一般来说,每个设计方案应该大体上是相同的,只是某一个地方有所不同,比如某处排版、文案、图片、颜色等。然后对不同的用户展示不同的方案。

要注意,不同的用户在他的一次浏览过程中,看到的应该一直是同一个方案。比如他一开始看到的是 A 方案,则在此次会话中应该一直向他展示 A 方案,而不能一会儿让他看 A 方案,一会儿让他看 B 方案。

同时,还需要注意控制访问各个版本的人数,大多数情况下我们会希望将访问者平均分配到各个不同的版本上。要做到这些很简单,根据 cookie (比如 cookie 会话ID的最后一位数字)决定展示哪个版本就是一个不错的方法。

要实现 A/B 测试,我们需要做以下几个工作:

1、开发两个(或多个)不同的版本并部署;

2、收集数据;

3、分析数据,得出结果。

二:实践方法


从左到右,3条较粗的竖线代表了 A/B 测试中的3个关键角色:客户端(Client)、服务器(Server)、数据层(Data)。从上到下代表了3种访问形式:

  1. 无 A/B 测试的普通访问流程(Non AB test)

  1. 基于后端分流的 A/B 测试访问流程(Back-end AB test)

  1. 基于前端分流的 A/B 测试访问流程(Front-end AB test)。

A/B 测试需要将多个不同的版本展现给不同的用户,即需要一个“分流”的环节。从上图中我们可以看到,分流可以在客户端做,也可以在服务器端做。

传统的 A/B 测试一般是在服务端分流的,即基于后端的 A/B 测试(Back-end AB test),当用户的请求到达服务器时,服务器根据一定的规则,给不同的用户返回不同的版本,同时记录数据的工作也在服务端完成。

基于后端的 A/B 测试技术实现上稍微简单一些,不过缺点是收集到的数据通常是比较宏观的PV(Page View)信息。虽然可以进行比较复杂的宏观行为分析,但要想知道用户在某个版本的页面上的具体行为往往就无能为力了。

基于前端的 A/B 测试则可以比较精确地记录下用户在页面上的每一个行为。它的特点是,利用前端 JavaScript 方法,在客户端进行分流,同时,可以用 JavaScript 记录下用户的鼠标行为(甚至键盘行为,如果需要的话),直接发送到服务器记录。

下面,我将重点介绍一下我们在基于前端的 A/B 测试上的一些实践。

首先遇到的问题是如何分流的问题。对于大部分需求来说,我们希望各个版本的访问人数平均分配。可以根据某一个 Cookie ID 来划分用户,比如“123.180.140.*.1267882109577.3”,可以根据这个 Cookie ID 的最后一位(在本例中是“3”)来划分人群,比如单数的显示 A 版本,偶数的显示 B 版本。

正确展示对应的版本后,就要开始采集需要的数据了。当前版本有多少 PV (Page Views,访问量),如果需要记录这个数据的话,在正确版本加载完成之时就要发送一个打点信息。不过很多需求中,具体版本的 PV 的精确数值可能不是很重要,而且要收集这个信息需要多一次打点操作,所以一般情况下这个数据是可选的。

必须的数据是测试区域内用户的点击信息。当用户在测试区域点击了鼠标左键(无论这个点击是点击在链接、文字、图片还是空白处),我们就需要发送一条对应的打点信息到打点服务器。一般来说,这个打点信息至少需要包含以下数据:

  • 当前 A/B 测试以及版本标识

  • 点击事件的位置

  • 点击时间戳(客户端时间)

  • 当前点中的URL(如果点在非超链接区域,此项为空)

  • 用户标识(比如 Cookie ID)

  • 用户浏览器信息

三:应用例子


今年,EA公司发布新版《模拟城市》(SimCity)游戏时,在网站做了一个A/B测试,以便试验转化率在不同的布局下是否有变化。

下面是两个不同的版本:

B版本与A版本的差别在于新版本删除了Pre-Order的促销广告图片,页面更清爽一些。

结果数据显示,A版本的转化率为5.8%,B版本的转化率为10.2%,提高了43.4%。

这几乎是一个完美的A/B测试案例:有明确的测试目标,清晰的衡量标准(订单转化率),以及完美的结果数字。


http://www.ppmy.cn/news/30293.html

相关文章

RedHat7/CentOS7本地yum配置+NFS共享存储配置

RedHat7/CentOS7本地yum配置NFS共享存储配置 文章目录RedHat7/CentOS7本地yum配置NFS共享存储配置前言一、本地yum源配置二、NFS共享存储配置2.1配置105服务器2.2配置106服务器2.3配置开机自动挂载前言 Yum(全称为 Yellow dog Updater, Modified)是一个…

Shell脚本编程

Shell编程 视频地址https://www.bilibili.com/video/BV1hW41167NW/?p1&vd_source977d52a6b92ce8b6ae67c16fc61f0428 第一章 Shell概述 大数据程序员为什么要学习Shell呢? 需要看懂运维人员编写的Shell程序偶尔会编写一些简单的Shell程序来管理集群&#xf…

力扣-计算特殊奖金

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1873. 计算特殊奖金二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总…

工具篇(五)炫酷排版,尽在LaTeX:让你的文档飞升吧!

作者的话 作为一个文本排版工具,latex一直以来都备受科研工作者、学生和出版社的青睐。但是对于初学者来说,latex的学习曲线可能会有些陡峭。因此,我写这篇博客旨在为初学者提供一个简单易懂的latex教程,让大家能够快速入门并掌握…

【数据结构】链式二叉树

前言 在前面我们学习了一些二叉树的基本知识,了解了它的结构以及一些性质,我们还用数组来模拟二叉树建立了堆,并学习了堆排序,可是数组结构的二叉树有很大的局限性,平常我们用的最多树结构的还是链式二叉树&#xff0c…

搜索引擎的设计与实现

技术:Java、JSP等摘要:随着互联网的快速发展,网络上的数据也随着爆炸式地增长。如何最快速筛选出对我们有用的信息成了主要问题。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后&…

第六章 使用系统类提供国家语言支持 - 创建自定义语言环境

文章目录第六章 使用系统类提供国家语言支持 - 创建自定义语言环境创建自定义语言环境第六章 使用系统类提供国家语言支持 - 创建自定义语言环境 创建自定义语言环境 此示例将提供一个模板,用于使用自定义表创建自定义语言环境。自定义表将在 EBCDIC(美…

python 连接数据库

文章目录同步操作同步连Mysql同步连redis同步连mongodb异步操作异步连mysql异步连redis异步连mongodb同步操作 同步连Mysql python 连接mysql可以使用pymysql、mysqlclient等。 安装: # win pip install pymysql 连接mysql: # __author__ "laufing"…