ABTest系统调研和需求

在这里插入图片描述

一、AB测试的必要性

1.1 算法评估

线下可以使用离线的AUC,NDCG等指标进行算法模型的评估,算法上线后怎样进行算法间的评估,上线的算法是好是坏,好多少?坏多少?

要有效评估算法,必须借助AB测试工具。

1.2 方向指导

在算法上线后,往往伴随着特征的增减,怎样能够确定特征对于算法模型影响?

算法进行AB测试过程中通过线上指标,能够确定特征对于核心指标的影响情况。

1.3 提升效率

新算法上线后,如果没有AB,就根本不能知道这个算法的效果是怎样的。导致达到目标的时间周期变长,效率低下。

1.4 总结:AB测试系统必须要有
商业社会, 由于功能设计者个人思维的局限性以及全量用户的不可调研性, 导致了一个功能的预期效果可能与实际上线后的效果存在认知、实用上的差异.

为了达到局部ROI最大化的目标(通常这一目标在潜在意义上会使得产品核心目标得以提升), 就需要用户自己“用脚投票”, 通过实际数据反馈来选出ROI最大化的功能方案.

基于这一商业目的, 多数互联网公司会采取AB测试来寻找能够为圈定指标带来最大收益的功能方案.

二、AB简介

2.1 什么是AB?

在这里插入图片描述

AB 测试的本质是分离式组间试验,也叫对照试验,在科研领域中已被广泛应用(它是药物测试的最高标准)。自 2000 年谷歌工程师将这一方法应用在互联网产品以来,AB 测试越来越普及,已逐渐成为衡量互联网产品运营精细度的重要体现。

简单来说,AB 测试在产品优化中的应用方法是:在产品正式迭代发版之前,为同一个目标制定两个(或以上)可行方案,将用户流量分成几组,在保证每组流量在控制特征不同而其他特征相同的前提下,让用户分别看到不同的方案设计,根据几组用户的真实数据反馈,科学地帮助产品进行决策(比如你想优化某个位置的文案颜色,觉得蓝色比红色好,就可以保持这个位置一组流量的文案红色,一组蓝色,其他都相同,进行 AB 测试)。AB 测试原理如下面图 1。

AB 测试是一种科学的评估手段,具备概率统计学理论的支撑。

概率论中有一个中心极限定理,意思是独立同分布的随机变量的和服从正态分布。对于 AB 测试,我们比较的是两组样本的平均表现,AB 测试保证 AB 两组某个因素不一样(这个就是我们要验证的优化点),AB 两组其他很多未知影响因素一样(这些因素是独立同分布的随机变量),当 AB 两组样本足够多时,这些其他因素产生的效果是满足同一正态分布的,因此可以认为对要验证的变量的作用是相互抵消的,这样待验证因素(即我们的控制变量)的影响就可以比较了,因此我们就可以通过实验来验证优化是否有效。

2.2 AB测试的价值

最近几年增长黑客的理念在国内互联网盛行,有很多这方面的专业书出版,很多公司甚至设立了 CGO(首席增长官)的高管职位。增长黑客思维希望通过从产品中找到创造性的优化点,利用数据来驱动产品优化,提升用户体验及收益增长,最终达到四两拨千斤的效果。随着公司业务规模及用户的增长,利用数据来驱动业务发展越来越重要。增长黑客本质上就是一种数据驱动的思维,并且有一套完善的技术管理体系来科学地驱动业务发展,而这套体系中最重要的一种技术手段就是 AB 测试。

AB 测试可以很好的指导产品迭代,为产品迭代提供科学的数据支撑。 具体来说,AB 测试的价值主要体现在如下四个方面。

2.2.1 为评估产品优化效果提供科学的证据

前面说过,AB 测试是基于概率论与统计学原理之上构建的科学的测试技术,有很强的理论依据。

AB 测试也经历过多年实践的检验,被证明是有效的方法。前面提到过 AB 测试是药物测试的最高标准,在药品制造业得到了很好的使用和验证。同时,各大互联网公司都大量使用 AB 测试技术,为整个互联网的发展提供了很好的榜样和示范作用。

2.2.2 借助 AB 测试可以提升决策的说服力

因为 AB 测试是有统计学作为理论基础,并且又有工业上的实践经验作为支撑,利用 AB 测试得到的结论具备极大的说服力。因此,在用数据说话上,大家在意识形态上更容易达成一致,这样就可以让产品迭代更好更快的推行下去。

2.2.3 AB 测试可以帮助提升用户体验和用户增长

任何涉及到用户体验、用户增长相关的优化想法都可以通过 AB 测试来验证,通过验证得出有说服力的结论,从而推动产品朝着用户体验越来越优的方向发展。

2.3.4 AB 测试可以帮助提升公司变现能力

搜索、推荐、广告、会员等涉及到收益相关的产品及算法都可以通过 AB 测试来验证新的优化思路是否可以提升盈利性指标。其中盈利性指标可以根据公司业务和发展阶段来定义。

总之,一切涉及到用户体验、用户增长、商业变现的产品优化都可以借助 AB 测试技术,驱动业务做得更好,AB 测试是一种科学的决策方式。那我们在什么时候需要 AB 测试呢?

2.3 AB 测试的应用场景

2.3.1 算法类

各类算法是 AB 测试应用场景最多的地方,算法开发人员通过 AB 测试来验证一个新的算法或者小的算法优化是否可以提升算法的业务指标。包括推荐、搜索、精准广告、精细化运营等涉及到算法的产品和业务都是可以利用 AB 测试技术的。

2.3.2 运营类

任何一个互联网产品少不了运营,在互联网红利消失的当下,某个产品是否可以“占领”用户的心智,运营将起到越来越重要的作用,甚至有人说互联网时代将进入一个运营驱动的时代。各类运营手段,如用户运营(用户拉新、会员运营等)、内容运营(视频行业的节目编排等)、活动运营(抽奖等)等都可以借用 AB 测试技术来验证哪种运营策略是更加有效的。

2.3.3 UI 展示及交互类

UI 是任何一个互联网产品可直接被用户感知的部分,用户通过 UI 与互联网产品交互,用户对一个产品的感知也是首先通过 UI 建立的。简洁美观的 UI 界面,流畅的 UI 交互往往能够给用户留下好的第一印象。对于 UI 视觉及交互部分的优化,往往凭设计师的经验是不够的,需要利用技术手段来验证哪种 UI 展示风格、哪种交互方式是用户更喜欢的、能够带来最大收益的。

像颜色、字体、按钮形状、页面布局、操控方式的调整及优化都是可以通过 AB 测试来验证的。

三、产品概览

3.1 产品介绍

AB测试是对比两个或多个变体在同一地方好坏的方法,并且需要保证样本的同时和同质。

同时性:两个变体是同时投入使用的,而不是今天使用A变体,明天使用B变体,这样会有其他因素影响。比如,对于电商网站来说今天没有活动,而明天是双十一,在这个条件下我们不能判断变体B比变体A好。

同质性:两个变体对应的使用群体需要保证尽量一致。比如,想想一个极端场景:变体A里全是女性,变体B中全是男性,我们根本无法判断出来究竟是方案影响了最终效果还是性别。

四、主要功能

4.1 功能结构图

在这里插入图片描述

五、业务流程

AB测试框架的总体业务流

5.1 AB分组流程

分组模块的目的是根据各种业务规则,将流量(用户)分为 AB 两组(或者多组)。可以说分组模块是 AB 测试最核心的模块,好的 AB 分组方案可以让流量分配的更均匀随机。同时需要具备根据用户、地域、时间、版本、系统、渠道、事件等各种维度来对请求进行分组的能力,并且保证分组的均匀性和一致性。

为了方便计算,假设现在有12个人(Customer),我们给12个人进行编号,C1C12;有6个桶(Bucket)我们编号为B1B6。

每个用户在访问实验时,会先进入到分流算法中,由算法来决定分到哪个桶里面,都分完后最理想的是每个桶里正好有2个人。(实际上基于大数定律原理,数据量越大分配的会越平均)

那么现在,假设每个变体的流量是50%,变体A我们假定对应的是三个桶B1、B2、B3桶,变体B也是对应的是B4、B5、B6桶。

在这里插入图片描述

算法:保证分每个桶分到的越随机越平均越好

分流主体:mid(游戏用户id)
在这里插入图片描述

5.2 AB创建实验流程

创建AB实验,明确实验的AB策略,流量分配,生效时间等。

5.3 AB开始、停止实验流程

按照实验的时间配置,开始和停止实验流程。

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

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

相关文章

SpringCloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine

1. Hystrix Dashboard (断路器:hystrix 仪表盘) Hystrix一个很重要的功能是,可以通过HystrixCommand收集相关数据指标. Hystrix Dashboard可以很高效的现实每个断路器的健康状况。 1). 在Ribbon服务g和Feign服务的Maven工程的pom.xml中都加…

SpringCloud 入门教程(九): 路由网关zuul

在微服务架构中,需要几个关键的组件,服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个组件可以组建一个简单的微服务架构。客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服…

33岁的互联网人,看看我自己做了什么?

一、2021年之前 2020年8月中,从一家上市互联网公司离职,离职的原因和其中发生的一些事情也是一言难尽。感谢我当时的直属领导lfp和上层领导zjs,他们教会了我不少的东西,到现在都还有和他们联系,也很感谢我的同事&…

SpringCloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus

在本教程第三讲Spring Cloud 入门教程(三): 配置自动刷新中,通过POST方式向客户端发送/refresh请求, 可以让客户端获取到配置的最新变化。但试想一下, 在分布式系统中,如果存在很多个客户端都需要刷新改配置&#xff0…

SpringCloud Eureka参数配置项详解

Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下面对Eureka的配置项做具体介绍,供大家参考。 Eureka客户端配置 1、RegistryFetchIntervalSe…

OAuth 2.0 - Authorization Code授权方式详解

I:OAuth 2.0 开发前期准备 天上不会自然掉馅饼让你轻松地去访问到人家资源服务器里面的用户数据资源,所以你需要做的前期开发准备工作就是把AppKey, AppSecret取到手 新浪获取传送门,腾讯获取传送门 这里说一下,在申请AppKey和AppSecret的过程…

最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

一、spring cloud简介 鉴于《史上最简单的Spring Cloud教程》很受读者欢迎,再次我特意升级了一下版本,目前支持的版本为Spring Boot版本2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。 Finchley版本的官方文档如下: http://cloud.spri…

最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)

在上一篇文章,讲了服务的注册和发现。在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbonrestTemplate,另一种是feign。在这一篇文章…

链表选择排序算法功能实现演示

算法: 狭义的算法是与数据的存数方式密切相关 广义的算法是与数据的存储方式无关 泛型: 利用某种技术达到的效果就是:不同的存数方式&#xff0c;执行的操作是一样的 #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h&g…

链表插入功能实现演示

#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //数据域struct Node * pNext; //指针域}Node, *pNode;//函数声明 pNode create_list(); void traverse_list(pNode pHead); …

【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能

这篇博文给大家分享的是&#xff0c;如何使用VS自带的性能分析工具来分析我们编写的.NET程序&#xff0c;一边找出程序性能的瓶颈&#xff0c;改善代码的质量。在实际开发中&#xff0c;性能真的很重要&#xff0c;往往决定一个产品的生死~良好的用户体验的基础之一也是程序要有…

链表删除功能实现演示

插入算法和删除演示&#xff1a; #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //数据域struct Node * pNext; //指针域}Node, *pNode;//函数声明 pNode create_list(); void …

栈入门

线性结构的两种常见应用之一栈 定义&#xff1a;一种可以实现”先进后出”的存储结构&#xff0c;栈类似于箱子 分类&#xff1a;静态栈、动态栈 算法&#xff1a;出栈、压栈 栈的定义&#xff1a; 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性…

Packet Tracer 5.0实验(四) 利用三层交换机实现VLAN间路由

一、实验目标 掌握交换机Tag VLAN 的配置&#xff1b;掌握三层交换机基本配置方法&#xff1b;掌握三层交换机VLAN路由的配置方法&#xff1b;通过三层交换机实现VLAN间相互通信&#xff1b;二、实验背景 某企业有两个主要部门&#xff0c;技术部和销售部&#xff0c;分处于不同…

栈程序演示

#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //栈顶元素PNODE pBottom; //栈底部元素 }STACK,*PSTACK;void init(PSTACK); v…

noi 2009 二叉查找树 动态规划

思路&#xff1a; 先把权值离散化 按数据值排序 sum[i]为前i个节点频度和 dp[i][j][w]表示把节点[i,j]合并成一颗根节点权值不小于w的子树所需的访问代价与修改代价的最小和 dp[i][j][w]min(dp[i][k-1][w]dp[k1][j][w]sum[j]-sum[i-1]K,dp[i][k-1][a[k].weight]dp[k1][j][a[k].…

出栈程序演示

#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //栈顶元素PNODE pBottom; //栈底部元素 }STACK,*PSTACK;void init(PSTACK); v…

栈清空程序演示

#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //栈顶元素PNODE pBottom; //栈底部元素 }STACK,*PSTACK;void init(PSTACK); v…

MySQL学习笔记——显示数据库信息

show privileges 显示可用的系统权限清单。   View Code mysql> show privileges;-----------------------------------------------------------------------------------------------------------------------| Privilege | Context …