AB测试——原理介绍(中心极限定理、大数定理、假设检验、两类错误)

作为AB测试的学习记录,本文主要整理总结了AB测试背后的数学原理和一些概念解释。


1、控制变量法

基于控制变量法的思想,通过对比两组样本(实验组和对照组)的表现是否有差异,从而验证“变量”的作用。

借用中学生物课上的例子:探究种子萌发的环境条件的实验。
在这里插入图片描述

为了确定阳光对种子萌发有影响,需要确保除光照外所有环境变量一致。实验需要设置实验组和对照组,其中,对照组是正常接受光照的种子(没有其他特殊待遇);实验组是黑暗环境下的种子(有特殊待遇:没有光照)。

最后通过对比两组种子的发芽情况,得出“阳光对种子是否有影响”的结论。此外,还可以对比水分、温度等等环境变量对种子萌发的影响。

同理, 在实际的商业环境中,用户就像是这些待发芽的种子,我们可以通过控制产品设计、营销策略、推荐算法等等“变量”,去提高它们的“萌芽率”——活跃度、留存率、消费金额等等。因此,我们需要进行AB实验去检验各种策略、设计对公司的运营是有效的。

简言之,AB测试是一种评估运营方案是否有效的实验方法。 当不确定两种(或者多种)待选方案中哪个表现更好时,通过直接的实验手段去验证,找出最佳的解决方案。

但这种实验的前提是,样本量足够且变量可以控制。若样本量不足,例如刚上架的APP没有多少注册用户也就没有实验的必要性。

2、中心极限定理VS大数定理

2.1 中心极限定理

随着试验次数的增加,一组独立同分布的变量的均值可以近似看作服从正态分布,且方差也会随着试验次数的增加而减小。简言之,无论总体是什么分布,只要样本量足够大,样本的均值分布都会趋于正态分布。

具体的验证过程可以查看笔记《Python验证中心极限定理》。

样本和总体都呈正态分布,样本量的均值和总体均值一致。 当N固定时,样本的均值和总体一致,样本的方差等于总体的方差/N

独立同分布:指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且互相独立。比如掷色子,第一次和第二次掷出的结果都不会相互影响,而且结果是随机的。
在这里插入图片描述

2.2 大数定理

大数定律的核心在于将随机变量X所对应的随机试验重复多次,随着试验次数的增加,X的均值会愈发趋近于E(X)。即,样本量越大,越靠近总体。

2.3 两个原理的区别

中心极限定理是说无论抽样分布如何均值服从正态分布;而大数定律根本和正态分布无关,是说样本大了抽样分布近似总体分布。

3、假设检验

1) 提出假设
  • 原假设 (null hypothesis,H0):需要拒绝掉的假设,我们不希望看到的结果:新方案对核心指标不会有显著性影响。
  • 备择假设 (alternative hypothesis,H1):和原假设相反的假设,是我们想要的结果:新方案对核心指标有显著性影响。

PS: 在提出假设这一步,我个人的难点是总记不住两个假设的定义。 后面知道了一句顺口溜:“越小越拒绝",意思是P值越小,越拒绝原假设。然后联想推出:P值越小越好,所以在对P值进行判断时,记住不要大的数,越接近0越好。P值越小,我们越要拒绝的原假设。既然原假设是用来拒绝的,那么原假设就是我们不想要的那个结果

2.1) 选定检验方向

根据备择假设确定检验方向:

  • 双侧检验:备择假设没有特定的方向性,形式为“≠”这种检验假设称为双侧检验

  • 单侧检验:备择假设带有特定的方向性,形式为”>””<“的假设检验,称为单侧检验。 其中备择假设 “<“称为左侧检验; “>”称为右侧检验

2.2) 选定检验方法

常用的检验方法有 t检验z检验

判断使用什么检验方法,我们需要看样本量总体方差是否已知,判断的流程如下图所示:
在这里插入图片描述

**一般情况下,绝对值指标用T检验,相对值指标用Z检验。**因为绝对指标的的总体方差,需要知道每一个用户的值,这个在AB实验中肯定不可能。而相对值指标是二项分布,可以通过样本量的值计算出总体的值,就如同10W人的某页面点击率是10%,随机从这10W人中抽样1W人,这个点击率也是10%一样。

3) 结果判断

在这里插入图片描述

显著性水平
指当原假设实际上正确时,检验统计量落在拒绝域的概率,简单理解就是犯弃真错误的概率。
显著性水平α越小,犯第I类错误的概率自然越小,一般取值:0.01、0.05、0.1等。

  • 当给定了检验的显著水平a=0.05时,进行双侧检验的Z值为1.96。
  • 当给定了检验的显著水平a=0.01时,进行双侧检验的Z值为2.58。
  • 当给定了检验的显著水平a=0.05时,进行单侧检验的Z值为1.645。
  • 当给定了检验的显著水平a=0.01时,进行单侧检验的Z值为2.33。

一般情况下,都是选择a=0.05作为判断:

  • 如果P≤α,那么拒绝原假设
  • 如果P>α,那么不能拒绝原假设

拒绝域: 拒绝域是由显著性水平围成的区域。

检验统计量
对原假设和备择假设作出决策的某个样本统计量,称为检验统计量。
t-test和z-test对应的检验统计量就是 t值 和 z 值。

P值:
P值是用来判定假设检验结果的一个参数,反映某一事件发生的可能性大小,即P值是一个概率值。统计学根据显著性检验方法所得到的P值,一般以P<0.05 为有统计学差异。


4. 两类错误

在这里插入图片描述

弃真错误:也叫第I类错误或α错误。它是指原假设实际上是真的,但通过样本估计总体后,拒绝了原假设。明显这是错误的,我们拒绝了真实的原假设,所以叫弃真错【错误拒绝】,这个错误的概率我们记为α。(这个值也是显著性水平,在假设检验之前我们会规定这个概率的大小。)

取伪错误:也叫第II类错误或β错误。它是指原假设实际上假的,但通过样本估计总体后,接受了原假设【错误接受】。明显者是错误的,我们接受的原假设实际上是假的,所以叫取伪错误,这个错误的概率我们记为β。把统计功效定义为1-β,一般情况下, β 取值0.2,则统计功效的取值为0.8。

举个栗子:

  • 一类错误就是这个产品不能给我们带来收益,但是错误判断它可以带来收益 。这个会导致坏产品上线。
  • 二类错误就是,这个产品实际上是好产品,能给我们带来收益,但是我们错误认为它不能赚钱。这个错误会导致拒绝好的产品上线(取伪错误)。
  • 相比之下,一类错误更不能接受。我们宁愿让10个好产品不上线,也不能让1个坏产品上线了,因为一个坏的产品可能带来无法挽回的客户损失

引申问题: 为什么原假设是"想要拒绝的假设"呢?
答: 因为原假设被拒绝如果出错的话,只能犯第I类错误,而犯第I类错误的概率已经被规定的显著性水平所控制。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传蚁群算法是一种基于生物进化和蚁群行为的启发式优化算法,常用于解决组合优化问题。在Python中,可以使用遗传算法和蚁群算法的思想来实现遗传蚁群控制变量法。 以下是一个简单的示例代码,展示了如何使用Python实现遗传蚁群控制变量法: ```python import numpy as np # 初始化种群 def init_population(population_size, variable_size): population = np.random.randint(low=0, high=2, size=(population_size, variable_size)) return population # 计算适应度值 def calculate_fitness(population): fitness = np.sum(population, axis=1) return fitness # 选择操作 def selection(population, fitness): select_idx = np.argmax(fitness) select_individual = population[select_idx] return select_individual # 交叉操作 def crossover(parent1, parent2): crossover_point = np.random.randint(low=0, high=len(parent1)) child = np.concatenate((parent1[:crossover_point], parent2[crossover_point:])) return child # 变异操作 def mutation(child, mutation_rate): for i in range(len(child)): if np.random.rand() < mutation_rate: child[i] = 1 - child[i] return child # 遗传蚁群控制变量法 def genetic_ant_colony_control_variable(population_size, variable_size, num_generations, mutation_rate): population = init_population(population_size, variable_size) for generation in range(num_generations): fitness = calculate_fitness(population) select_individual = selection(population, fitness) child = crossover(select_individual, select_individual) child = mutation(child, mutation_rate) population = np.concatenate((population, child.reshape(1, -1))) best_individual = selection(population, calculate_fitness(population)) return best_individual # 示例运行 population_size = 50 variable_size = 10 num_generations = 100 mutation_rate = 0.01 best_individual = genetic_ant_colony_control_variable(population_size, variable_size, num_generations, mutation_rate) print("Best individual:", best_individual) ``` 在这个示例代码中,我们首先定义了几个基本操作,包括初始化种群、计算适应度值、选择操作、交叉操作和变异操作。然后,我们使用这些操作来实现遗传蚁群控制变量法。 在主函数`genetic_ant_colony_control_variable`中,我们通过循环迭代生成新的个体,并更新种群。每一代中,我们选择适应度值最高的个体作为父代,进行交叉和变异操作,生成子代。最后,我们选择适应度值最高的个体作为最优解。 这只是一个简单的示例代码,实际应用中可能需要根据具体问题进行适当的改进和调整。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值