精华内容
下载资源
问答
  • 本文将以二项分布作为研究手段,分两种情况求解此类问题的置信区间范围,并结合实际案例进行分析。背景某一天,测试同学在验证一个接口时遇到了一个问题。该接口设定为50%概率触发,测试同学写了自动化脚本进行多次...

    1a67f84abc867fcc44b0829367798255.png

    前言

    日常开发测试可能会遇到这样一种情况,有一个接口或方法概率触发,那么需要多少次抽样落在一个什么区间内,才能断定是否按照设定概率进行呢?

    本文将以二项分布作为研究手段,分两种情况求解此类问题的置信区间范围,并结合实际案例进行分析。

    背景

    某一天,测试同学在验证一个接口时遇到了一个问题。

    该接口设定为50%概率触发,测试同学写了自动化脚本进行多次调用。

    但是问题来了,他并不知道应该调用多少次,然后落在一个什么区间内才算测试通过。

    极大的扩大样本容量,然后给一个模糊的范围边界确实能解决这个问题,但是测试同学并不满足于此,他要一个精确的数字

    因此我只能满足他任性的要求,提笔拯救测试同学。

    解题思路

    在这种情况下,触发 or 不触发 此类概率问题可以看作一个二项分布,我们的目的在于经过一定量的样本测试之后判断测试出来的概率是否落在置信区间内

    那么就需要考虑这几种极端情况:

    1.概率太小

    2.概率太大

    3.样本数很小

    4.样本数很大

    在二项分布中,可以将样本数与事件概率综合起来考虑,合并为以下两种情况

    (a) 概率比较正常或样本数较大 —— np > 5 and n(1-p) > 5

    (b) 概率比较极端或样本数较小 —— np <= 5 or n(1-p) <= 5

    (n :样本总数,p:概率)

    二项分布的置信区间估计方法常用的有两种,一是正态分布近似方法,即 Normal Approximation Method;二是精确置信区间法,即 Clopper-Pearson Method。

    对于这两种情况可分别应用这两种方法进行求解。

    Normal Approximation Method

    很容易可以想象出当样本数足够大的情况下,二项分布的曲线分布会愈发趋向于近似正态分布。

    因此在情况a中适用于正态分布近似。

    置信区间计算公式:

    da03d707f1100314a8c661b4b032f6e9.png

    因此使用了正态分布近似,因此Z value用的也是正态分布的Z value。

    p: 样本中所测得的事件发生概率

    a: I类错误率

    Z: Z value常量,可查表得知

    n: 样本总数

    该方法的优点在于简单易于理解,但是在极端情况中精度会很差。

    Clopper-Pearson Method

    在情况b中适用于精确置信区间法

    置信区间计算公式(贼复杂,网上大多数贴的都是这个):

    cc7bdae6f9b18cff685ed517ca7d117f.png

    但是可以发现上述公式是基于Binomial Cumulative Distribution Function,可以通过Beta Distribution来计算,因此经过简化可得如下置信区间计算公式。

    置信区间计算公式(经过简化):

    da9e52b98963415b5e0e6052b042f41e.png

    n: 样本总数

    k: 成功数量

    a: I类错误率

    BetaInv: 一个算法函数,完全不用理解具体细节,找个别人实现的直接调用即可(包括excel)

    这样一来就简单的多了,我甚至可以拿excel解出来。

    该方法的优点就在于可以处理极端情况,p是0或1的情况也阔以。

    实际案例

    案例一(正态分布近似法)

    问题:一个50%概率的接口,测试50次,成功28次,判断是否正常。

    p = 28/50 = 0.56

    np = 0.56* 50 = 28 > 5

    n(1-p) = 0.45 * 50 = 22 > 5

    因此使用正态分布近似法。

    da03d707f1100314a8c661b4b032f6e9.png

    置信度假设为95%,因此查表得知Z值为1.96

    Z = 1.96

    p = 28/50 = 0.56

    n = 50

    代入可得,置信区间为[0.56 - 0.14, 0.56 + 0.14]这个范围,因此0.5确实落入这个置信区间,所以可以暂时认为这个我这个接口没问题!

    案例二(精确置信区间法)

    问题:一个17%概率的接口,测试50次,成功3次,判断是否正常。

    p = 3 / 50 = 0.06

    np = 0.06* 50 = 3 < 5

    适用于精确置信区间法。

    da9e52b98963415b5e0e6052b042f41e.png

    假设置信度为95%

    a = 0.05

    n = 50

    k = 3

    使用Excel或其他方法

    d455f8b6f31e2a5abd73a3e79fc89b17.png

    计算可得:

    Pub = 0.1655

    Plb = 0.0125

    置信区间为[0.0125, 0.1655],所以17%概率的接口没有落在置信区间内,可以认为在95%置信度的情况下,该接口出现了问题。

    接着有请测试同学发言=。=!

    测试的实践

    实践的功能与背景

    基于鉴定460版ai鉴定师智能回复这个功能。简单来说这个功能就是,当你对鉴定贴进行回复时,你的回复内容完全匹配到回复词库时,就会触发ai自动回复。而触发ai自动回复是有一个概率控制的,在测试的时候想不单单校验返回值,也想同时校验这个概率功能的准确性。

    测试执行

    首先遇到这个功能,我想到的测试步骤就是:

    130235617b53587cdb785c2bd5183cb5.png

    目前就是这个测试步骤,然后通过接口的返回值来判断做判定:

    1.检查回复中有没有子评论

    2.检查子评论的回复人是不是ai鉴定师

    校验的代码如下

    
    if (replyListResponse.getJSONObject("data").getJSONObject("simpleReply").
           getJSONArray("list").getJSONObject(j).getJSONObject("childReply").
           getJSONArray("list")!=null){
               DuAssert.getInstance().assertTrue(replyListResponse.
                   getJSONObject("data").getJSONObject("simpleReply").
                   getJSONArray("list").getJSONObject(j).getJSONObject("childReply").
                   getJSONArray("list").getJSONObject(0).getString("userName").equals("ai鉴别"));
    }
    
    
    

    有人会问,为什么没有检查回复的信息的正确性呢?首先,测试服的数据不可控因素比较多,比如今天校验了他的回复信息,但是过两天回复信息在验收之后改了,那就还需要对用例进行改动。其次,在正常的测试流程中肯定会覆盖不同的入参信息与不同的返回信息对应情况,只要验证一次这个逻辑,剩下这个数据准确性的验证反而觉得有一些冗余,写针对这么长的测试用例更像是为了保证整个流程:从发帖到审核,从回复到审核这两个老流程的准确性保证;非鉴定师触发ai鉴别这个基础流程的保证情况。

    概率验证

    进行到概率验证,做法很简单,比如我们随机50次,然后有子评论,且评论用户为ai鉴别,则n+1。但是这样又会引入一个新问题,这个最后叠加出的n肯定是在一定区间内波动的。比如服务端现在设置为50%回复,那n就是25左右,那这个具体要怎样来设置这个区间,才能较为准确的验证这个概率的正确性,从而在数值没有落在区间内的时候,可以光明正大的给开发提bug,说你的概率算的不准确呢?

    从上文中我们得知,需要测试的事件概率为50%,尝试的次数为50次,所以:

    np=50X50%;

    n(1-p)=50X50%,

    均大于5,由此可知概率应符合正态分布曲线,所以用来计算这个置信区间的公式为:

    09e2a30a6aed4f8a5c482254d1d6c987.png

    代码实现

    public static double getProbability(int times,double targetP) {
     
            double z=1.96;
            return Math.sqrt(targetP*(1-targetP)/times)*z;
     
        }
    
    

    很简单,一行代码就搞定了。有同学可能会问这个1.96是哪来的,实际上这个是查表查的,暂定要求的准确度为95%,于是根据下方的表格查得0.975对应的横纵坐标为0.06和1.9,于是相加得1.96

    d1a4fe44061885e49a3131ac197ac380.png

    最后用例代码添加

    
     double realP=n/50.00;
            double max =Math.ceil(50*realP+50* Probability.getProbability(50,realP));
            double min =Math.ceil(50*realP-50* Probability.getProbability(50,realP));
            if (25<=max &&25>min){
                DuAssert.getInstance().assertEquals("在区间内,概率可信","在区间内,概率可信");
            }
            else{
                DuAssert.getInstance().assertEquals("不在区间内,不可信,提bug!","在区间内,概率可信");
     
            }
    
    
    

    综上所述,我们基于统计的原理校验了这个功能的准确性。

    总结

    测试概率是测试过程中一个比较模棱两可的事情,如何进行概率事件的测试并有效的发现问题是非常必要的。

    因此在上文中主要将此类问题模拟成二项分布进行求解,求得置信区间从而进行较为准确的判断。

    但是有一点要注意的是在上文两个案例中都是以95%置信度作为前提,实际上是存在发生I类错误的可能性,所以测出了问题只能说大概率可能出现了问题,而不能立马给一个绝对性的结论,这样是不科学的。

    建议是根据统计学经验,先测30+次,能用正态分布近似覆盖就尽量先使用正态分布近似。

    展开全文
  • 概率分布描述了一个给定变量...当然这难不倒我们历史上伟大的数学家们,他们经过大量实验发现了一些很特殊的概率分布,比如几何,二项,泊松,正太分布等,而这些期望和方差都有特定的方法,可是给我们节约了不少时...

    统计学系列目录(文末有大奖赠送
    统计学①——概率论基础及业务实战
    统计学③——总体与样本
    统计学④——置信区间
    统计学⑤——假设验证

    概率分布描述了一个给定变量的所有可能取值结果的概率,历史上伟大的数学家们经过大量实验发现了一些很特殊的概率分布,比如几何,二项,泊松,正太分布等,这些分布在日常生活中很常见,且概率,期望和方差都有非常简便的算法。

    一、几何分布

    如果你碰见了这种情况:
    a. 要进行一系列独立实验
    b. 每一次实验既有成功的可能,也有失败的可能,且单次实验成功概率相同
    c. 你感兴趣的是,为了取得第一次成功需要进行多少次实验
    比如保龄球要玩多少次才能一下打倒10个?

    如果你所求的概率的情况满足这几个条件,就可以用几何分布来帮你速战速决。
    变量X表示为了取得第一次成功所需要进行的实验次数,如果一个变量X符合几何分布,且单次成功的概率为p,则可以写作:
    在这里插入图片描述
    几何分布图像如下:
    在这里插入图片描述
    看似有违直觉,但是实际上可能性最大的结果就是:仅需一次就成功;比如驾照考试,不管一个人的成功率是多少,一次就过的可能性对于他个人而言确实是最大的

    ①X取特定值r的概率计算公式(q = 1-p,为失败的概率):
    在这里插入图片描述
    ②X取值在某个范围的概率计算公式
    在这里插入图片描述在这里插入图片描述
    有了概率计算公式,我们就不必要为了得到概率分布而计算每一种结果的概率,关键在于通过这个公式可以描述每一种可能结果

    ③ 几何分布的期望和方差
    在这里插入图片描述
    二、二项分布
    二项分布之前先来了解下排列和组合
    1、排列和组合
    ① 排列指的是选取对象并关注对象的排位顺序
    如果求n个对象的可能排位方式,则计算为:
    n! = n*(n-1)*(n-2)……3*2*1
    如果从n个对象中取r个进行排位,则计算为:
    n!
    ② 组合是选取对象但不关注对象的排位顺序
    如果为n个对象排位,其中第一类对象有k个,第二类对象有j个,第三类对象有m个……则排位计算为:
    在这里插入图片描述
    如果从n个对象中选取r个对象的选取方式的数目,这时不必知道对象的确切顺序
    在这里插入图片描述
    排位比组合多,除非只有一个对象

    2、二项分布
    a. 你正在进行一系列实验
    b. 每一次都存在成功和失败的可能,且概率一样
    c. 你想知道在一定区间内能成功多少次
    比如玩了10把保龄球,有几把能打倒10个?

    这就是典型二项分布的情况,与几何分布差别在于,你不是想知道多少次才成功的概率,而是想知道会有多少次成功。
    X 表示 n次实验中成功次数,如果一个变量X符合二项分布且成功的概率为p,可以写成
    在这里插入图片描述
    二项分布图如下,根据n和r的不同,二项分布的形状会发生变化,p越接近于0.5,则图像越对称,p小于0.5,图像向右偏斜
    在这里插入图片描述
    ① 当X取特定值 r 时,概率计算公式为(q=1-p):
    在这里插入图片描述
    ② 当X取特定范围时,需要将范围内所有的X取值概率相加
    ③ 二项分布的期望和方差
    在这里插入图片描述

    三、泊松分布

    在遇到独立事件时(例如机器在给定区间内发生故障),若已经λ(给定时间区间内事件发生的平均次数)且你感兴趣的是一个特定时间区间内的发生次数,这时就可以用泊松分布。
    说起来有点绕,其实就是知道一个平均值,求其余值的概率,比如一个月平均要吃5顿火锅,那这个月吃1顿,2顿,3顿等的概率。
    令X是实际发生的次数,如果变量X符合泊松分布,且平均发生次数或发生率为λ,则
    在这里插入图片描述
    ① 概率计算如下:
    在这里插入图片描述
    ② 泊松分布的期望和方差

    ③ 如果两个独立事件A,B都符合泊松分布
    在这里插入图片描述

    四、正态分布

    前面三种提到的都是离散变量的概率分布,如果X取值是连续值时,又该如何计算概率呢?
    概率密度函数来描述连续变量的概率分布,概率密度是一条线,线与横坐标形成的面积就是概率,一般通过积分计算而得
    对于离散变量概率,我们关注的是特定数值的概率,而连续概率分布,我们更关心的是取得一个特定范围的概率。
    正态分布具有钟形曲线,且曲线对称,中央的概率密度最大,直偏离中心概率密度越小。正态分布通过均值μ和方差σ2定义,μ代表曲线的中心位置,σ2代表曲线的分散性,越大则曲线越扁平。如果一个连续变量X符合均值为μ,方差为 σ^2的正态分布,则通常写作:
    在这里插入图片描述
    在这里插入图片描述
    日常生活中有很多现象均符合正态分布,比如身高,年龄,财富,体重的分布等。当得知X符合正态分布后,如何计算X在[a,b]范围内的概率呢?
    在这里插入图片描述
    我们有一张标准概率表,给出了X~N(0,1)的概率,要做的就是将X标准化为N(0,1)的分布后,再通过查表就得到概率,标准化公式为:
    在这里插入图片描述

    五、各种分布之间的关系

    ① 当二项分布中n>50且p<0.1时,二项分布X~B(n,p)可以近似为泊松分布X-Po(np)
    ② 当二项分布中np>5且nq>5时,二项分布X~B(n,p)可以近似为正态分布X-N(np,npq)
    ③ 当泊松分布中λ>15时,泊松分布X~Po(λ)可以近似为正态分布X-N(λ,λ)
    在这里插入图片描述


    本人互联网数据分析师,目前已出ExcelSQLPandasMatplotlibSeaborn机器学习统计学个性推荐关联算法工作总结系列。


    微信搜索并关注 " 数据小斑马" 公众号,回复“统计”可以免费获取下方深入浅出统计学、统计学原理、赤裸裸的统计学9本统计学入门到精通必备经典教材
    在这里插入图片描述

    展开全文
  • 统计学方法与数据分析(上下册)

    热门讨论 2013-12-29 11:32:47
    4.8一个常用的离散随机变量:二项分布 4.9连续随机变量的概率分布 4.10一个常用的连续随机变量:正态分布 4.11随机抽样 4.12抽样分布 4.13二项分布的正态逼近 4.14Minitab指令 4.15小结 重要公式 补充练习 ...
  • 然后,这工作表明如何使用Floquet分析来研究在x和y方向上具有均匀振幅和线性相位分布的有限阵列。 为了对建议的结构进行建模,在频谱和空间域中给出了两种公式,其中应用了矩(MoM)方法和广义等效电路(GEC)...
  • 因为在这里我们使用的是的二项分布(因变量),我们需要选择一个对于这个分布最佳的连结函数。 它就是Logit函数。 在上述方程中,通过观测样本的极大似然估计值来选择参数, 而不是最小化平方和误差...
  • 3.2.3 如何计算卷积神经网络输出值 97 3.2.4 如何计算池化层输出值 100 3.2.5 反向传播实例 101 3.2.6 神经网络更“深”的意义 104 3.3 激活函数 104 3.3.1 为什么需要激活函数 104 3.3.2 为什么激活函数需要非线性...
  • DVD在线租赁优化方案

    2009-08-22 10:55:55
    项分布的随机模拟模型,发现了DVD 的最小购买量与会员需求量之间的正比关系。问题先将订单中会员 对光盘的偏好程度转化为满意度矩阵,再建立DVD分配的0—1规划模型,用Lingo求解得到最大满意度 以及对应的最优解。...
  • 6.5 产生频繁集的其他方法 221 6.6 FP增长算法 223 6.6.1 FP树表示法 224 6.6.2 FP增长算法的频繁集产生 225 6.7 关联模式的评估 228 6.7.1 兴趣度的客观度量 228 6.7.2 多个二元变量的度量 235 6.7.3 ...
  • 算法导论(part2)

    2010-09-09 22:54:12
    它深入浅出地介绍了大量的算法及相关的数据结构,以及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等),重点在于算法的分析和设计。对于每一个专题,作者都试图提供目前最新的研究成果及样例...
  • 算法导论(part1)

    2010-09-09 22:51:05
    它深入浅出地介绍了大量的算法及相关的数据结构,以及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等),重点在于算法的分析和设计。对于每一个专题,作者都试图提供目前最新的研究成果及样例...
  • 算法导论(原书第三版)

    热门讨论 2013-03-06 14:31:34
    原书的书影,高清版的。 算法导论第三版目录 ...C.4 几何分布与二项分布 *C.5 二项分布的尾部 思考题 附录注记 附录D 矩阵 D.1 矩阵与矩阵运算 D.2 矩阵基本性质 思考题 附录注记 参考文献 索引

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

二项分布如何计算方法