AB实验平台:为什么AB实验平台必不可少?
1.概述
1.1 為什么AB實(shí)驗(yàn)平臺(tái)必不可少?
1.1.1 依據(jù)統(tǒng)計(jì)數(shù)據(jù)做決策
當(dāng)面對(duì)眾多選擇時(shí),我們應(yīng)該怎么選才能最大化我們的收益(或者說(shuō)最小化我們的開(kāi)銷)呢?舉例來(lái)說(shuō),怎么選擇最優(yōu)的上班的路線才能使途中花費(fèi)的時(shí)間最少?在這個(gè)例子中,我們的收益可能是依據(jù)于上班時(shí)間,但同樣可以是燃料成本或交通時(shí)間。
1.1.2 什么問(wèn)題用于A/B測(cè)試?
任何問(wèn)題,只要它的每個(gè)選項(xiàng)能夠被多次進(jìn)行測(cè)試,并且每個(gè)選項(xiàng)在被測(cè)試時(shí)都能返回固定的結(jié)果,那么它就能使用A/B測(cè)試技術(shù)來(lái)進(jìn)行優(yōu)化。
1.1.3 大廠產(chǎn)品
市面上可參考的平臺(tái):
1.2 平臺(tái)架構(gòu)
1.2.1 架構(gòu)設(shè)計(jì)圖
@TODO
1.2.2 使用接口定義
請(qǐng)求數(shù)據(jù)
-- 按單一AB實(shí)驗(yàn)訪問(wèn) {"page": 1,"uid": "111122233" }-- 按一系列AB實(shí)驗(yàn)訪問(wèn) {"biz": "test","uid": "111122233" }返回?cái)?shù)據(jù)
{"code": 0,"expid": [1, 2, 6],"params": {"add_recall": "deepfm","use_rank": "dnn"} }1.3 AB平臺(tái)的3大特性
AB平臺(tái)要發(fā)揮數(shù)據(jù)驅(qū)動(dòng)的作用,要做到三大特性:并行性、先驗(yàn)性、科學(xué)性。
1.3.1 并行性:實(shí)驗(yàn)正交進(jìn)行
基準(zhǔn)點(diǎn)
-
正交性:各層之間互相不影響
-
均勻性:實(shí)驗(yàn)組和對(duì)照組的流量是對(duì)等的
-
充足性:每個(gè)分支實(shí)驗(yàn)的流量是足夠的
-
日均人數(shù)少于1000的實(shí)驗(yàn)結(jié)果波動(dòng)將會(huì)非常大
-
日均人數(shù)大于2W的實(shí)驗(yàn)結(jié)果更具參考性
-
最終目標(biāo)
-
快速構(gòu)建實(shí)驗(yàn)
-
隨時(shí)上下線實(shí)驗(yàn)
-
同時(shí)支持多組實(shí)驗(yàn)
實(shí)現(xiàn)原理
**前提:在流量無(wú)窮的情況,每個(gè)層A組和B組的流量是均勻的
重點(diǎn)關(guān)注
-
實(shí)驗(yàn)流量分配
-
排除實(shí)驗(yàn)自身干擾
1.3.2 先驗(yàn)性:驗(yàn)證決策過(guò)程而非決策本身
A/B測(cè)試是當(dāng)面對(duì)一個(gè)改進(jìn)目標(biāo)有兩種甚至多種不同的方案的時(shí)候,為了避免盲目決策帶來(lái)的不確定性好隨機(jī)性,將各種不同的實(shí)驗(yàn)同時(shí)放到線上讓實(shí)際目標(biāo)群體選擇,然后利用實(shí)際數(shù)據(jù)分析的結(jié)果來(lái)輔助進(jìn)行決策的一種方式和手段。
所以A/B的常見(jiàn)的應(yīng)用場(chǎng)景應(yīng)該滿足一下4個(gè)條件:
-
優(yōu)化場(chǎng)景
- A/B測(cè)試并不能給出解決方案,而只是輔助我們對(duì)若干候選方案進(jìn)行選擇。
-
量化指標(biāo)
- 要運(yùn)用A/B測(cè)試來(lái)改進(jìn)系統(tǒng),另外一個(gè)重要的因素就是要改進(jìn)的目標(biāo)需要有一個(gè)或多個(gè)可量化的明確指標(biāo),并且這個(gè)指標(biāo)會(huì)直接或間接收到該方案的影響
-
用戶穩(wěn)定
- 由于A/B測(cè)試將不同的設(shè)計(jì)或者策略呈現(xiàn)給一些隨機(jī)的用戶群體,之后統(tǒng)計(jì)各用戶群體的群體指標(biāo),因此用戶群體的選擇和劃分也是A/B測(cè)試是否成功的重要因素。
-
長(zhǎng)期反饋
- 在設(shè)計(jì)和實(shí)現(xiàn)A/B測(cè)出實(shí)驗(yàn)的時(shí)候,要盡量控制除實(shí)驗(yàn)之外的影響因素保持固定
建議流程
-
步驟一:提出目標(biāo)
-
步驟二:建立假設(shè)
-
步驟三:設(shè)計(jì)方案
-
步驟四:執(zhí)行實(shí)驗(yàn)
-
步驟五:分析數(shù)據(jù)
-
步驟六:發(fā)布版本
案例講解
搜索是發(fā)現(xiàn)好物的開(kāi)始,是電商平臺(tái)主要的流量入口,可以說(shuō)三分天下有其一
案例背景
-
搜索使用日均人次:3045w+(曝光)
-
搜索推薦詞的日均CTR:0.38%
怎樣提高搜索推薦詞的CTR,節(jié)省用戶時(shí)間?
步驟一:提出目標(biāo)
提升CTR:節(jié)省更多用戶更多時(shí)間,提升平臺(tái)體驗(yàn)
步驟二:建立假設(shè)
CTR的原因(假設(shè))
-
前端體驗(yàn)不佳
-
對(duì)搜索詞進(jìn)行標(biāo)簽分類
-
通過(guò)色彩突出搜索詞
-
搜索詞添加熱度提示
-
-
后端推薦策略不佳
-
發(fā)掘用戶偏好
-
匹配用戶歷史搜索
-
協(xié)同過(guò)濾算法
-
步驟三:設(shè)計(jì)方案
-
A001:推薦詞添加類別標(biāo)簽,如書(shū)籍/店鋪/話題
-
A002:推薦詞依據(jù)排列的位置,字體顏色漸變
-
A003:推薦詞前三添加熱度指數(shù),體現(xiàn)詞熱度
步驟四:執(zhí)行實(shí)驗(yàn)
-
抽樣人群:20000人,權(quán)衡實(shí)驗(yàn)效果和成本
-
均勻分配:A001、A002、A003 三組均勻流量保證人群特征相似
-
上線環(huán)境:同時(shí)上線
-
監(jiān)控?cái)?shù)據(jù):一致的統(tǒng)計(jì)方式,評(píng)估標(biāo)準(zhǔn)
步驟五:分析數(shù)據(jù)
-
數(shù)據(jù)短期看比較,長(zhǎng)期看趨勢(shì),要經(jīng)過(guò)一段的檢驗(yàn)
-
總體的提升置信度提示等等
步驟六:發(fā)布版本
基于5的數(shù)據(jù)分析,選擇A001是毫無(wú)爭(zhēng)議的
1.3.3 科學(xué)性:經(jīng)典的統(tǒng)計(jì)學(xué)理論
決策相關(guān)的統(tǒng)計(jì)學(xué)參考,詳見(jiàn)2.2節(jié)。
2 原理
2.1 樣本分流
谷歌分層實(shí)驗(yàn)框架論文

重疊實(shí)驗(yàn)框架.pdf
2.2 提升的衡量
(p-value , 置信區(qū)間 ,power的具體含義和計(jì)算方法)
2.2.1 基礎(chǔ)概念
互逆假設(shè)
統(tǒng)計(jì)學(xué)上有2個(gè)互逆的假設(shè):
- 原假設(shè):我們希望通過(guò)試驗(yàn)結(jié)果推翻的假設(shè)
- 備擇假設(shè):我們希望通過(guò)試驗(yàn)結(jié)果驗(yàn)證的假設(shè)
在A/B測(cè)試過(guò)程中,我們?cè)囼?yàn)的目的是通過(guò)反證法證明測(cè)試版本和對(duì)照版本有明顯的不同(提升),因此在這個(gè)場(chǎng)景中,原假設(shè)就是原始版本和試驗(yàn)版本無(wú)差異,而備擇假設(shè)就是這兩個(gè)版本存在差異,因此,A/B試驗(yàn)的目的,做A/B試驗(yàn)的目的就是推翻2個(gè)版本無(wú)差異的原假設(shè),驗(yàn)證他們有差異的備擇假設(shè)。
**
在統(tǒng)計(jì)學(xué)上,存在兩大錯(cuò)誤,一是棄真錯(cuò)誤,二是納偽錯(cuò)誤。
第一類錯(cuò)誤(棄真錯(cuò)誤):原假設(shè)為真時(shí)拒絕了原假設(shè)
首先我們?nèi)菀追傅木褪堑谝活愬e(cuò)誤,就是原假設(shè)為真時(shí)拒絕了原假設(shè),說(shuō)白了就是過(guò)來(lái)就是2個(gè)版本無(wú)差異時(shí)候,我們錯(cuò)誤 的認(rèn)為他們有差異(從統(tǒng)計(jì)學(xué)角度講也叫棄真錯(cuò)誤)這個(gè)錯(cuò)誤的后果非常嚴(yán)重,所以我們把這它的標(biāo)準(zhǔn)設(shè)一個(gè)值0.05, 它其實(shí)就是一個(gè)概率, 這個(gè)概率就是我們?nèi)菰S自己出錯(cuò)的概率。
這個(gè)5%就是在統(tǒng)計(jì)學(xué)里的 α , 它代表著我們這個(gè)試驗(yàn)結(jié)果的置信水平。與這個(gè)置信水平相對(duì)應(yīng)的就是置信區(qū)間的置信度,由 1- α 得出,所以你在這里看到如果 α 是0.05,那置信度就是0.95,也就是說(shuō),如果我們?nèi)菰S自己出錯(cuò)的幾率是5%,那我們將得到一個(gè)有 95% 的可能性包含真實(shí)的總體均值區(qū)間范圍,如果你把這個(gè) α 調(diào)整成0.07,那你的置信區(qū)間的置信度將變成93%。
由于 α 是我們自己設(shè)置的,那么當(dāng)然需要通過(guò)數(shù)據(jù)去驗(yàn)證一下,這個(gè)通過(guò)計(jì)算出來(lái)的值就是p-value , p 的定義就是,如果兩個(gè)版本無(wú)差異的前提下,得到當(dāng)前試驗(yàn)數(shù)據(jù)的概率。
**
第二類錯(cuò)誤(納偽錯(cuò)誤):原假設(shè)為假時(shí)接受了原假設(shè)
第二類錯(cuò)誤是指原假設(shè)為假時(shí)接受了原假設(shè),即當(dāng)2個(gè)版本有差異時(shí)候,我們錯(cuò)誤的認(rèn)為他們沒(méi)有差異 ,這個(gè)錯(cuò)誤的概率在統(tǒng)計(jì)學(xué)角度也稱為取偽錯(cuò)誤,記為 β ,這個(gè)概率可以相對(duì)大一些,業(yè)界大約定俗成的一個(gè)標(biāo)準(zhǔn)就是10%和20%的概率。
和顯著性水平一樣,為了避免我們犯第二類錯(cuò)誤,我們需要通核算 β 從而計(jì)算出另一個(gè)參數(shù)來(lái)給我們參考,就是統(tǒng)計(jì)功效,和核算置信區(qū)間的置信度類似,它是的思路是 1-β 來(lái)得出 (統(tǒng)計(jì)功效 power = 1 – β )
** 統(tǒng)計(jì)功效是指版本差異(效果)為某個(gè)指定值時(shí),通過(guò)顯著性檢驗(yàn)?zāi)苷_地把差異檢驗(yàn)出來(lái)的概率。說(shuō)白了就是,假設(shè)兩個(gè)版本的確存在差異,我們能夠正確拒絕原假設(shè),獲得統(tǒng)計(jì)顯著性結(jié)果(95%置信區(qū)間中數(shù)據(jù))的概率。
** 統(tǒng)計(jì)功效的核算涉及樣本數(shù)量,方差, α 、以及最小變化度或者置信區(qū)間下限。
由此可見(jiàn),只有我們把第一類錯(cuò)誤控制在5%以內(nèi),第二類錯(cuò)誤控制在10%-20%左右,我們才可以說(shuō)得出具有參考價(jià)值的出的試驗(yàn)數(shù)據(jù)。換句話說(shuō),我們?cè)谧鯝/B測(cè)試時(shí),試驗(yàn)結(jié)果達(dá)到95%的置信度,以及80%-90%的統(tǒng)計(jì)功效時(shí),它對(duì)我們來(lái)說(shuō)才是有意義、可以作為決策參考的。
**
各值推理及計(jì)算
因?yàn)锳B的統(tǒng)計(jì)符合二項(xiàng)分布,接下來(lái)的公式用二項(xiàng)分布做推導(dǎo)
p-value
p-value的定義是,如果兩個(gè)版本無(wú)差異的前提下,得到當(dāng)前試驗(yàn)數(shù)據(jù)的概率,其計(jì)算公式如下圖所示,在A/B實(shí)驗(yàn)中,采用右側(cè)檢驗(yàn)的方式

中心極限定理說(shuō)明,在適當(dāng)?shù)臈l件下,大量相互獨(dú)立隨機(jī)變量的均值經(jīng)適當(dāng)標(biāo)準(zhǔn)化后依分布收斂于正態(tài)分布(具體推導(dǎo)參考大數(shù)定理、中心極限定理),在樣本數(shù)量比較大情況下,可以采用z檢驗(yàn)。
ABtest需要采用雙樣本對(duì)照的z檢驗(yàn)公式。
**
z=pexp?pctrlSEexp2+SEctrl2z = \frac{p_{exp} - p_{ctrl}}{\sqrt{SE_{exp}^2 + SE_{ctrl}^2}}z=SEexp2?+SEctrl2??pexp??pctrl??
**
其中p代表轉(zhuǎn)化率,KaTeX parse error: Expected group after '^' at position 3: SE^?代表標(biāo)準(zhǔn)誤差,由于轉(zhuǎn)化過(guò)程是符合二項(xiàng)分布的,因此用戶行為可以看作單次伯努利試驗(yàn)(single Bernoulli trial),而積極結(jié)果(完成轉(zhuǎn)化)的可能性是未知的。假設(shè)樣本數(shù)量足夠大,我們可以使用廣泛采用的Wald方法,將該分布近似為正態(tài)分布。因此有
SE2=SEexp2+SEctrl2SE^2 = SE_{exp}^2 + SE_{ctrl}^2SE2=SEexp2?+SEctrl2?
SEexp2=pexp(1?pexp)nexpSE_{exp}^2 = \frac{p_{exp}(1 - p_{exp})}{n_{exp}}SEexp2?=nexp?pexp?(1?pexp?)?
SEctrl2=pctrl(1?pctrl)nctrlSE_{ctrl}^2 = \frac{p_{ctrl}(1 - p_{ctrl})}{n_{ctrl}}SEctrl2?=nctrl?pctrl?(1?pctrl?)?
** 根據(jù)計(jì)算出的z值,即可根據(jù)概率累積函數(shù)(CDF)計(jì)算出p-value**
** p-value = 1 - **Φ(z)
置信區(qū)間
根據(jù)統(tǒng)計(jì)學(xué)的中心極限定理,樣本均值的抽樣分布呈正態(tài)分布。由之前計(jì)算得出Z值,再根據(jù)兩個(gè)總體的均值、標(biāo)準(zhǔn)差和樣本大小,利用以下公式即可求出兩個(gè)總體均值差的置信度為α置信區(qū)間。
(ρ1?ρ2)±zα2?σ12n1+σ22n2(\rho_1 - \rho_2) ± z_{\frac{\alpha}{2}}\cdot \sqrt{\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}}(ρ1??ρ2?)±z2α???n1?σ12??+n2?σ22???
ρ1,ρ2是雙樣本的觀察均值\rho_1,\rho_2是雙樣本的觀察均值ρ1?,ρ2?是雙樣本的觀察均值
統(tǒng)計(jì)功效
**統(tǒng)計(jì)功效是指版本差異(效果)為某個(gè)指定值時(shí),通過(guò)顯著性檢驗(yàn)?zāi)苷_地把差異檢驗(yàn)出來(lái)的概率。**說(shuō)白了就是,假設(shè)兩個(gè)版本的確存在差異,我們能夠正確拒絕原假設(shè),獲得統(tǒng)計(jì)顯著性結(jié)果(95%置信區(qū)間中數(shù)據(jù))的概率。其計(jì)算公式如下圖所示

2.2.2 代碼實(shí)現(xiàn)
Java版本
import org.apache.commons.math3.distribution.NormalDistribution;import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List;/*** 描述:** @author zhourao* @create 2020-04-26 2:40 下午*/ public class AlalysisUtils {private static NormalDistribution nd = new NormalDistribution();private final static int SCALE = 16;//采用雙邊檢測(cè)private static final double FIRST_TYPE_ERROR_CHANCE = 0.05;// 統(tǒng)計(jì)功效計(jì)算public static double GetStatisticalPower(BigDecimal expCt, BigDecimal controlCt, BigDecimal expCnt, BigDecimal controlCnt) {if (BigDecimal.ZERO.equals(expCt) && BigDecimal.ZERO.equals(controlCt)) {return 0;}BigDecimal zScore = GetZScore(expCt, controlCt, expCnt, controlCnt);BigDecimal staticZScore = BigDecimal.ZERO.subtract(new BigDecimal(nd.inverseCumulativeProbability(1 - FIRST_TYPE_ERROR_CHANCE / 2)));return 2 - nd.cumulativeProbability(staticZScore.add(zScore).doubleValue()) - nd.cumulativeProbability(staticZScore.subtract(zScore).doubleValue());}// 置信區(qū)間計(jì)算public static List<BigDecimal> GetConfidenceInterval(BigDecimal expCt, BigDecimal controlCt, BigDecimal expCnt, BigDecimal controlCnt) {List<BigDecimal> result = new ArrayList<>();if (BigDecimal.ZERO.equals(expCt) && BigDecimal.ZERO.equals(controlCt)) {result.add(BigDecimal.ZERO);result.add(BigDecimal.ZERO);return result;}BigDecimal expRatio = expCt.divide(expCnt, SCALE, BigDecimal.ROUND_HALF_UP);BigDecimal controlRatio = controlCt.divide(controlCnt, SCALE, BigDecimal.ROUND_HALF_UP);BigDecimal variance = getVariance(expRatio, controlRatio, expCnt, controlCnt);double v = nd.inverseCumulativeProbability(FIRST_TYPE_ERROR_CHANCE / 2);BigDecimal wave = variance.multiply(new BigDecimal(v)).abs();result.add(expRatio.subtract(controlRatio).subtract(wave));result.add(expRatio.subtract(controlRatio).add(wave));return result;}// p值計(jì)算public static double GetPValue(BigDecimal expCt, BigDecimal controlCt, BigDecimal expCnt, BigDecimal controlCnt) {if (BigDecimal.ZERO.equals(expCt) && BigDecimal.ZERO.equals(controlCt)) {return 1;}BigDecimal zScore = GetZScore(expCt, controlCt, expCnt, controlCnt);return 1 - nd.cumulativeProbability(zScore.doubleValue());}// z分?jǐn)?shù)計(jì)算public static BigDecimal GetZScore(BigDecimal expCt, BigDecimal controlCt, BigDecimal expCnt, BigDecimal controlCnt) {BigDecimal expRatio = expCt.divide(expCnt, SCALE, BigDecimal.ROUND_HALF_UP);BigDecimal controlRatio = controlCt.divide(controlCnt, SCALE, BigDecimal.ROUND_HALF_UP);BigDecimal variance = getVariance(expRatio, controlRatio, expCnt, controlCnt);return (expRatio.subtract(controlRatio)).divide(variance, SCALE, BigDecimal.ROUND_HALF_UP).abs();}private static BigDecimal getVariance(BigDecimal expRatio, BigDecimal controlRatio, BigDecimal expCnt, BigDecimal controlCnt) {BigDecimal se_experiment = expRatio.multiply(BigDecimal.ONE.subtract(expRatio)).divide(expCnt, SCALE, BigDecimal.ROUND_HALF_UP);BigDecimal se_control = controlRatio.multiply(BigDecimal.ONE.subtract(controlRatio)).divide(controlCnt, SCALE, BigDecimal.ROUND_HALF_UP);return sqrt(se_experiment.add(se_control));}public static BigDecimal sqrt(BigDecimal value) {BigDecimal num2 = BigDecimal.valueOf(2);int precision = 100;MathContext mc = new MathContext(precision, RoundingMode.HALF_UP);BigDecimal deviation = value;int cnt = 0;while (cnt < precision) {deviation = (deviation.add(value.divide(deviation, mc))).divide(num2, mc);cnt++;}deviation = deviation.setScale(SCALE, BigDecimal.ROUND_HALF_UP);return deviation;} }2.2.3 使用流量建議
在做AB測(cè)試的時(shí)候,我們希望能測(cè)試兩組間的轉(zhuǎn)化率在統(tǒng)計(jì)上是否存在明顯差異。由于樣本量大,我們可以采用雙樣本單尾z-檢驗(yàn)(two-sample, one-tailed z-test)。另外,對(duì)于較小的樣本集合,我們可以依賴于t-檢驗(yàn)。
- 轉(zhuǎn)化率的數(shù)據(jù)分布按二項(xiàng)分布計(jì)算
大流量-z檢驗(yàn)
大流量及推薦用戶量
確定相較原來(lái)有轉(zhuǎn)化率的增長(zhǎng),置信度95%(p-value<0.05)
| 1 | 5% | 1032974 | 259459 |
| 2 | 10% | 489160 | 122829 |
| 3 | 20% | 217253 | 54514 |
| 4 | 30% | 126617 | 31743 |
| 5 | 40% | 81299 | 20357 |
| 6 | 50% | 54109 | 13526 |
過(guò)程推理
按二項(xiàng)分布,推導(dǎo)的z值求解公式如下:
z=pexp?pctrlSEexp2+SEctrl2z = \frac{p_{exp} - p_{ctrl}}{\sqrt{SE_{exp}^2 + SE_{ctrl}^2}}z=SEexp2?+SEctrl2??pexp??pctrl??
置信區(qū)間95%對(duì)應(yīng)的z值為1.65,按相對(duì)原來(lái)增長(zhǎng)1%計(jì)算
結(jié)果圖

小流量-t檢驗(yàn)
- 小用戶流量推薦:單邊檢測(cè),統(tǒng)計(jì)功效大于80%,

import math from scipy.stats import normdef get_cnt(old_cvr, ratio):p_experiment = old_cvr + old_cvr * ratiop_control = old_cvrreturn math.ceil((norm.ppf(0.95) + norm.ppf(0.8)) ** 2 * (p_experiment * (1 - p_experiment) + p_control * (1 - p_control)) / (old_cvr * ratio ** 2))print(get_cnt(0.05, 0.01)) print(get_cnt(0.10, 0.01)) print(get_cnt(0.20, 0.01)) print(get_cnt(0.30, 0.01)) print(get_cnt(0.40, 0.01)) print(get_cnt(0.50, 0.01))print(get_cnt(0.05, 0.02)) print(get_cnt(0.10, 0.02)) print(get_cnt(0.20, 0.02)) print(get_cnt(0.30, 0.02)) print(get_cnt(0.40, 0.02)) print(get_cnt(0.50, 0.02))| 1 | 5% | 118025 | 29646 |
| 2 | 10% | 111781 | 28069 |
| 3 | 20% | 99291 | 24915 |
| 4 | 30% | 86802 | 21761 |
| 5 | 40% | 74312 | 18608 |
| 6 | 50% | 61823 | 15454 |
3 實(shí)戰(zhàn)經(jīng)驗(yàn)
3.1 指標(biāo)體系的設(shè)立
3.3.1 常用指標(biāo)類別
- 人次
- 頻次
- 人均
- 普通人均=頻次/人次
- 同一個(gè)人重復(fù)點(diǎn)擊去除的人均,A點(diǎn)擊了B 2次、C 1次,按上述人均是3,按此人均是2
- 頻次轉(zhuǎn)化率
- 人次轉(zhuǎn)化率
- 總和(如成交金額)
3.2 結(jié)合數(shù)據(jù)分析
3.2.1 AAARR漏斗模型
3.2.2 渠道分析統(tǒng)計(jì)
3.3 報(bào)表統(tǒng)計(jì)分層
4 常見(jiàn)問(wèn)題
4.1 辛普森悖論
當(dāng)人們嘗試探究?jī)煞N變量(比如新生錄取率與性別)是否具有相關(guān)性的時(shí)候,會(huì)分別對(duì)之進(jìn)行分組研究。然而,在分組比較中都占優(yōu)勢(shì)的一方,在總評(píng)中有時(shí)反而是失勢(shì)的一方。該現(xiàn)象于20世紀(jì)初就有人討論,但一直到1951年,E.H.辛普森在他發(fā)表的論文中闡述此一現(xiàn)象后,該現(xiàn)象才算正式被描述解釋。后來(lái)就以他的名字命名此悖論,即辛普森悖論。
4.2 A/B測(cè)試方法的副作用和處理辦法
對(duì)于非常小的效果變化,往往都需要?jiǎng)?chuàng)建相當(dāng)大的對(duì)照組和測(cè)試組來(lái)實(shí)現(xiàn)AB測(cè)試,這個(gè)的代價(jià)往往是很大的。設(shè)想下在零售商場(chǎng)中,每天觀察到的用戶數(shù)量,往往需要很久的時(shí)間才能得出明顯的結(jié)論。在實(shí)際業(yè)務(wù)應(yīng)用中,會(huì)遇到的問(wèn)題是:當(dāng)你運(yùn)行測(cè)試時(shí)整體運(yùn)行的效果是受到很大影響的,因?yàn)楸仨氂幸话氲挠脩籼幱谛Ч患训膶?shí)驗(yàn)組,或者有一半的用戶處于效果不佳的對(duì)照組,而且你必須等待測(cè)試完成才能停止這種局面。
這是被稱為**探索利用難題(explore-exploit conundrum)**的一個(gè)經(jīng)典問(wèn)題。我們需要運(yùn)行次優(yōu)方法,以探索空間,并找到效果更好的解決方案,而一旦找到了更好的解決方案,我們還需要盡快利用它們來(lái)實(shí)現(xiàn)效果提升。能否可以更快地利用新的解決方案,而不必等待測(cè)試完全完成呢?答案是肯定的。下面簡(jiǎn)單介紹下多臂賭博機(jī)(multi-armed bandit,MAB)的概念。
多臂賭博機(jī)的定義
多臂賭博機(jī)(multi-armed bandit,MAB)的名字來(lái)源于著名的賭博游戲角子賭博機(jī)(one-armed bandit)。對(duì)那些從沒(méi)去過(guò)賭場(chǎng)的人,我們來(lái)做下解釋:角子機(jī)(又稱老虎機(jī))是一個(gè)需要你拉杠桿(或搖臂)的賭博機(jī)器,根據(jù)機(jī)器展示的數(shù)值,你可能會(huì)得到一筆獎(jiǎng)勵(lì),也可能(更大幾率)得不到任何東西。和你想的一樣,這些機(jī)器的設(shè)置都對(duì)莊家有利,所以能獲的獎(jiǎng)勵(lì)的幾率是非常非常小的。
多臂賭博機(jī)(理論上的)擴(kuò)展了這種形式,想象你面對(duì)的是一堆角子賭博機(jī),每個(gè)賭博機(jī)都被分配按照一個(gè)獨(dú)立的概率進(jìn)行獎(jiǎng)勵(lì)。作為一個(gè)玩家,你不知道在這些機(jī)器后的獲獎(jiǎng)概率,你唯一可以找到獲獎(jiǎng)概率的方法是進(jìn)行游戲。你的任務(wù)是通過(guò)玩這些機(jī)器,最大限度地提高所獲的獎(jiǎng)勵(lì)。那么你應(yīng)該使用什么策略呢?
附錄
附錄A 流程
附錄B 問(wèn)題排查
總結(jié)
以上是生活随笔為你收集整理的AB实验平台:为什么AB实验平台必不可少?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用 Mailgun 配置 Ghost
- 下一篇: 图解GHOST使用教程