python统计图原理_AB测试原理及样本量计算的Python实现
前言
為了對(duì)比不同策略的效果,如新策略點(diǎn)擊率的提升是否顯著,常需要進(jìn)行A/B測(cè)試。但測(cè)試是有成本的,樣本量小時(shí)不能判斷出差異是否是由抽樣誤差引起,樣本量太大時(shí)如果效果不好則會(huì)造成難以挽回的損失。如何科學(xué)地選擇樣本量呢?需要了解A/B測(cè)試的統(tǒng)計(jì)學(xué)原理
一、 A/B測(cè)試的統(tǒng)計(jì)學(xué)原理
(一)大數(shù)定律和中心極限定理
A/B 測(cè)試樣本量的選取基于大數(shù)定律和中心極限定理。通俗地講:
1. 大數(shù)定律:當(dāng)試驗(yàn)條件不變時(shí),隨機(jī)試驗(yàn)重復(fù)多次以后,隨機(jī)事件的頻率近似等于隨機(jī)事件的概率。
2. 中心極限定理:對(duì)獨(dú)立同分布且有相同期望和方差的n個(gè)隨機(jī)變量,當(dāng)樣本量很大時(shí),隨機(jī)變量
近似服從標(biāo)準(zhǔn)正態(tài)分布N(0,1)。
根據(jù)大數(shù)定律和中心極限定理,當(dāng)樣本量較大(大于30)時(shí),可以通過Z檢驗(yàn)來檢驗(yàn)測(cè)試組和對(duì)照組兩個(gè)樣本均值差異的顯著性。
注:樣本量小于30時(shí),可進(jìn)行t檢驗(yàn)。
(二)假設(shè)檢驗(yàn)
在進(jìn)行假設(shè)檢驗(yàn)時(shí),我們有兩個(gè)假設(shè):原假設(shè)H0(兩個(gè)樣本沒有顯著性差異)和備擇假設(shè)H1(兩個(gè)樣本有顯著性差異)。相應(yīng)地,我們可能會(huì)犯兩類錯(cuò)誤:
第I類錯(cuò)誤:H0為真,H1為假時(shí),拒絕H0,犯第I類錯(cuò)誤(即錯(cuò)誤地拒絕H0)的概率記為alpha。
第II類錯(cuò)誤:H0為假,H1為真時(shí),接受H0,犯第II類錯(cuò)誤(即錯(cuò)誤地接受H0)的概率記為beta。
1. 犯第I類錯(cuò)誤的概率alpha與置信水平1-alpha
通常,將犯第I類錯(cuò)誤的概覽alpha(0.05)稱為顯著性,把沒有1-alpha(0.95)稱為置信水平,即有1-alpha的概率正確接受了H0。
一般,alpha取值為0.05或更小的數(shù)值,即容忍犯第I類錯(cuò)誤的概率最大為alpha。
2. 犯第II類錯(cuò)誤的概率beta與統(tǒng)計(jì)功效power=1-beta
通常,將犯第II類錯(cuò)誤的概率稱為beta;將1-beta稱為統(tǒng)計(jì)功效,即正確拒絕H0的概率。
一般,beta取10%~20%,則統(tǒng)計(jì)功效的取值為80%~90%。
犯第一類錯(cuò)誤的概覽alpha與犯第二類錯(cuò)誤的概覽beta之間的關(guān)系如下圖:
3. 統(tǒng)計(jì)顯著性p-value
當(dāng)p-value
根據(jù)統(tǒng)計(jì)學(xué)原理計(jì)算樣本量,需要根據(jù)顯著性水平查正態(tài)分布表,工作中用到的比較少,這里省略。
工作中可用python中的已有的包和函數(shù)計(jì)算。
二、樣本量計(jì)算的python實(shí)現(xiàn)
Python統(tǒng)計(jì)包statsmodels.stats.power中,有一個(gè)NormalIndPower工具,可以用其中的solve_power函數(shù)實(shí)現(xiàn)。
Solve_power函數(shù)中的參數(shù)如下:
(1)參數(shù)effect_size :兩個(gè)樣本均值之差/(原來樣本值*(1-原來樣本值))的開方
(2)nobs1:樣本1的樣本量,樣本2的樣本量=樣本1的樣本量*ratio
(3)alpha:顯著性水平,一般取0.05
(4)power:統(tǒng)計(jì)功效,一般去0.8
(5)ratio: 樣本2的樣本量/樣本1的樣本量,一般取1
(6)alternative:字符串str類型,默認(rèn)為‘two-sided’,也可以為單邊檢驗(yàn):’larger’ 或’small’
例:目前的點(diǎn)擊率CTR是0.3,我們要想提升10%,將點(diǎn)擊率提升到0.33,測(cè)試組和對(duì)照組的樣本量相同。
計(jì)算如下:
fromstatsmodels.stats.power import NormalIndPower
import math
effect_size= 0.03/math.sqrt(0.3*(1-0.3))
ztest=NormalIndPower()
num=ztest.solve_power(
effect_size=effect_size,
nobs1=None,
alpha= 0.05,
power= 0.8,
ratio=1,
alternative= 'two-sided')
print (num)
3662.8015711721328
檢測(cè)效果變化值越小,需要的樣本量越大;檢測(cè)效果變化值越大,需要的樣本量越小。因?yàn)?#xff0c;變化效果越小,越有可能是抽樣誤差引起的;為了避免抽樣誤差的影響,需要增大樣本量。
https://abtestguide.com/abtestsize/
總結(jié)
以上是生活随笔為你收集整理的python统计图原理_AB测试原理及样本量计算的Python实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: strtotime()加半个小时_炖羊肉
- 下一篇: python中os.system.获取输