從案例實戰看AB Test系統設計及其原理

22 評論 34918 瀏覽 165 收藏 26 分鐘

編輯導語:AB Test,即有A、B兩個設計版本。通過小范圍發布,得到并比較這兩個版本之間你所關心的數據,最后選擇效果最好的版本。對于互聯網產品來說,通過A/B測試提升點擊轉化率,優化獲客成本可以得到越來越多的關注。本文作者從案例實戰出發,為我們分享了AB Test系統設計及其原理。

在實際工作中,我們經常會遇到這種問題,準備上線的新策略真的會比老策略好嗎?遇到這些問題總是讓人不知所措左右為難,難道真的只能遇事不決量子力學了嗎?

在數據驅動時代,只要你遇到的問題是數據可量化的,還真的有這么一個萬能工具能回答你的這些困惑,它就是A/B Test。

從案例實戰看AB Test系統設計及其原理

相信大家對A/B Test并不陌生,但大部分人僅僅處在了解階段,在真正動手做A/B Test實驗的時候還是會遇到各種各樣的問題。

如果你也遇到過以上問題,那我們今天就從數據產品經理的角度通過實戰案例一起來探討一下A/B Test具體怎么做及其里面的原理是什么,以及如何將A/B Test產品化。

一、A/B Test的前世今生

A/B Test的思想最初應用于化學、生物、醫療等傳統學術研究領域,叫做雙盲實驗,在2000年由谷歌引進到在互聯網中進行了第一次A/B Test。A/B Test解決的是在現有認知下不確定哪種方案更優的問題,避免了拍腦袋決策,那么什么場景下適合做A/B Test呢?

首先有兩個條件:

  1. 有兩個到多個待選方案;
  2. 有最直接的數據指標可衡量各待選方案,如:比率、數值。

目前A/B Test比較常見的應用場景如下:

從案例實戰看AB Test系統設計及其原理

二、abtest案例引出

關于A/B Test的案例有很多,最常見的無非就是一個按鈕的顏色或者是按鈕的文案,雖然很經典但未免太簡單,以至于有的地方涉及到的實驗知識點無法詳細展開。今天我們就拿一個工作中的實際例子來舉例:

某產品想上線付費發表情功能,于是產品同學A設計了一套付費引導流程:點擊表情按鈕->彈出付費引導彈窗->點擊付費彈窗支付按鈕->支付成功。

在需求評審上,產品同學B提出了不同意見:為什么不在用戶點擊具體某個表情的時候再彈出付費彈窗,使用如下引導邏輯:點擊表情按鈕->彈出表情面板->點擊具體某個表情->彈出付費引導彈窗->點擊付費彈窗支付按鈕->支付成功。

根據以上邏輯,兩個方案的轉化漏斗如下:

從案例實戰看AB Test系統設計及其原理

假設:點擊表情按鈕人數=n,那么兩個方案看到付費引導彈窗用戶數分別為:

  • A方案看到付費引導彈窗人數 = n*x%
  • B方案看到付費引導彈窗人數 = n*100%*a%*100%=n*a%

付費用戶數分別為:

  • A方案付費用戶數 = A方案看到付費引導彈窗人數*y%*z% = n * x% * y% * z%
  • B方案付費用戶數 = B方案看到付費引導彈窗人數*b%*c% = n * a% * b% * c%

針對兩個方案孰優孰劣,兩個產品同學分別給出了以下觀點:

從案例實戰看AB Test系統設計及其原理

就這樣,兩個產品同學誰都說服不了誰,最終一致決定做個A/B Test看看用戶的真實選擇,是騾子是馬牽出來溜溜就知道了。

三、abtest實驗設計

1. 版本設計

實驗版本的設計要遵循變量的單一性,不能一下子改變多個因素,如同一個按鈕不能同時改變按鈕顏色和按鈕文字,實驗設計越簡單越容易得出正確的結論。

案例時間:

2. 實驗時長

業界的實驗時長一般是2-3周,最短時長建議不要少于7天。因為不同日期活躍的用戶群體可能不一樣,所以最好要覆蓋一個周期,如7天、14天、21天。

那實驗時長是不是越長越好呢,也不是的,實驗時間過長會把各版本的區別拉平了,不同時期用戶對不同策略的反應不一樣。

例如0元奪寶玩法剛出來的時候用戶會特別感興趣,時間久了大家都知道這是一個套路會慢慢免疫選擇性忽略掉,在玩法誕生之初進行實驗可能效果會很顯著,時間長了之后這玩法的效果就會慢慢下降。

實驗結果也是有時效性的,僅對當前時間當前用戶群有效果并不是放之四海而皆準,所以實驗時間不宜過長,應快速驗證快速迭代。

3. 選擇指標

一個改動影響的指標可能是多方面的,例如更改了加購物車按鈕的顏色,點擊該按鈕的人可能會增多,從而間接導致下單的人數增多。那如何從眾多指標當中選擇出實驗效果指標呢?可以從以下幾個方面進行篩選:

從案例實戰看AB Test系統設計及其原理

既然直接效果指標已經可以決定實驗的成敗,為什么還要添加其他間接指標呢,這就涉及到一個取舍問題了,不是實驗成功了就一定要上線最佳版本。

假如實驗版本確實有提升,但付出的成本有點大,那就要權衡下利弊再決定要不要上線新版本。又或者實驗版本對我們想要提升的指標有顯著效果,但影響到了其他指標的大幅下降,這時候也需要我們進行權衡。

具體可視當前產品北極星指標而定,如當前產品戰略目標為營收,該實驗雖對用戶活躍有影響但能提高營收,也是可以全量上線新版本的,但當前戰略目標為有效日活,那就要慎重考慮新版本的上線問題了。

4. 案例時間

基于前面的例子,影響最為直接的指標為點擊付費彈窗支付按鈕人數,但是這個跟各實驗組具體人數也有關系,所以應該轉化為比率。

分母應該是點擊表情按鈕人數而不是展示付費引導彈窗人數,因為兩個版本的展示付費引導彈窗觸發條件不一樣,方案B已經人為的過濾掉一批低質量用戶,必然會對展示點擊率產生影響。

本實驗間接影響的正向指標為付費人數,同理也需轉化為付費率。正如產品同學A所說,發表情改為付費發送會降低那些點擊表情按鈕意欲發表情的用戶的體驗,有關用戶活躍性的指標同時也需要關注,如:人均使用時長、留存率,這些活躍性指標均可作為本實驗的負向指標來關注。

從案例實戰看AB Test系統設計及其原理

5. 計算最小樣本量

之所以要計算最小樣本量,主要有以下幾點原因:

  1. 樣本量太小不能代表整體的情況,容易受到偶然因素影響,這就要求計算出至少抽取多少樣本量才能代表整體情況;
  2. 避免浪費流量,通常有多個迭代同時進行,給其他迭代留出實驗空間;
  3. 如果實驗是負向的,可以避免帶來大面積不必要的損失。

1)計算最小樣本量兩種檢驗方法

Z檢驗:檢驗實驗組和對照組服從分布的均值是否相等

卡方檢驗:檢驗實驗組是否服從理論分布(將對照組的分布視為理論分布)

在A/B Test中常見的檢驗方法為Z檢驗,下面就以Z檢驗為例計算最小樣本量,在這之前先來了解下以下知識點:

從案例實戰看AB Test系統設計及其原理

  • α:表示出現第一類錯誤的概率,也稱為顯著性水平,常見的取值有1%、5%、10%、20%,一般取值5%,即犯第一類錯誤的概率不超過5%,常見的表示方法為:1-α,稱為統計顯著性,表示有多大的把握不誤診。
  • β:表示出現第二類錯誤的概率,一般取值20%,更常見的表示方式為統計功效power=1-β,即有多大把握能檢查出版本差異。

從兩類錯誤上限的取值(α是5%,β是20%)我們可以了解到A/B Test的重要理念:寧肯砍掉多個好的產品,也不要讓一個不好的產品上線。

指標基線:原有方案的指標,有可能是數值,有可能是比率,取決于選擇的直接效果指標。這個指標由歷史數據得出,如果是一個全新的版本實驗沒有歷史數據,可參考其他類似功能的指標數據,若都沒有只能根據經驗大概給出一個基準值。

MDE:檢驗靈敏度,以下用Δ表示,新方案的直接效果指標與指標基線差值的絕對值,即新方案與舊方案的區別有多大,該參數越大需要的樣本量越少。

方差:方差的計算方式根據直接核心指標是數值或者比率決定,兩種類型計算方式如下:

從案例實戰看AB Test系統設計及其原理

單/雙尾檢驗:用哪一種類型檢驗視原假設而定,若原假設為新舊方案無區別用雙尾檢驗,使用場景為樣本量計算或者AA測試;若原假設為新方案優于舊方案或舊方案優于新方案則用單尾檢驗,后面用到的實驗結果評估用的則是單尾檢驗。

Z值:該值可以依據α和β指標確定出對應的Z值,有固定的Z值表可以查,也可以通過excel的NORMSINV函數計算。

鑒于篇幅問題,后續有時間再專門寫一篇詳細介紹Z檢驗,下面直接貼Z檢驗樣本量計算公式出來吧(這里使用雙尾檢驗因此使用α/2):

從案例實戰看AB Test系統設計及其原理

2)案例時間

計算樣本量之前首先要獲取歷史的支付按鈕點擊率,一般取最近一個月的歷史數據,以下是最近一個月的支付按鈕點擊率數據:

從案例實戰看AB Test系統設計及其原理

  • 根據歷史數據計算出支付按鈕點擊率均值p:

p=(0.075+0.079+0.087+……+0.083+0.077+0.081) / 30=0.08

  • 根據支付按鈕點擊率均值p計算出方差:

從案例實戰看AB Test系統設計及其原理

  • 確定MDE值,新方案至少比舊方案提升多少才能達到我們的預期,即計算新方案的ROI,避免實際收益不能彌補新方案的研發和推廣成本,這里我們取比原方案提升10%,即新方案期望的點擊率為:p(新方案支付按鈕點擊率)=0.08*(1+10%)=0.088,可得MDEΔ=0.088-0.008=0.008;
  • 計算Z值,本實驗中我們取α=5%,β=20%,通過NORMSINV計算,得:

從案例實戰看AB Test系統設計及其原理

  • 從以上數據,計算最終所需樣本量為:

從案例實戰看AB Test系統設計及其原理

通過以上計算,每個實驗組需要18053人,有兩個實驗組則總需18053*2=36106人。

6. 圈選用戶

計算出了實驗所需人數,下一步就是從總用戶群體中抽取出對應人數進行實驗,這一步我們將會面臨著兩個問題:如何從一個總體中按一定比例抽取隨機樣本;如果同時進行的實驗中有互斥的怎么辦。

針對以上兩個問題我們有以下三種解決方案,下面分別介紹下:

1)單層方案

所有流量按某個參數(UserID,DeviceID、CookieID、手機號等)分成n個桶,假設選定UserID,有以下兩種方法:

從案例實戰看AB Test系統設計及其原理

以上解決了隨機性問題,并沒有解決實驗互斥的問題,只能靠人工給各實驗指定分組進行實驗。

從案例實戰看AB Test系統設計及其原理

2)多層方案

單層方案適合簡單的驗證,不適合長期大規模做交叉實驗,流量利用效率太低,且隨機組不好把握,最終容易造成某一組用戶指標明顯優于其他組。

為了解決以上問題,多層分組方案應運而生,人為定義一些分層,如:UI 層、推薦算法層,每一層中再對用戶隨機分組,即可實現同一個用戶出現在不同層的不同組里面,做到流量的重復利用。具體實現方法如下:

從案例實戰看AB Test系統設計及其原理

從上圖看到流量經過每一層時都會被打散重新分配,下一層每一組的流量都隨機來源于上一層各組的流量,如推薦算法層的0組用戶均勻來源于UI層的0、1、2……n組用戶。

如此一來我們只需要指定實驗處于哪一層,系統就可計算出該層還有多少剩余流量然后自動分配,即使實驗不互斥也沒必要共用相同的實驗組。

3)無層方案

多層方案做到了流量的重復利用,但是并沒有發揮出最大的重復利用價值。

單獨看每一層,其實就是一個單層方案,并沒有從根本上解決問題,只不過是復制出來多幾層而已,如果某一層實驗非常多,還是會存在流量不夠用的情況,這就衍生出了無層方案。

所謂無層,就是每個實驗都是單獨一層,具體實現方法如下:

從案例實戰看AB Test系統設計及其原理

如此一來確保了每個實驗都單獨占有所有流量,可以取任意組的流量進行實驗,但是又引進了新的問題,多層方案將實驗的互斥在層內進行了限制,無層會導致同一個用戶命中多個實驗,即使這些實驗是互斥的。

顯然這樣子是絕對不允許的,解決方法是賦予每個實驗優先級,例如按上線優先級排序,優先將流量賦予高優先級用戶。也可以在創建實驗的時候如果有互斥實驗,新創建實驗的分組算法復用已有實驗的實驗ID進行分組即可避免。

以上分流算法最終會形成n個組,需要進行AA實驗驗證分組是否均勻。驗證各組之間無顯著性差異后即可從n組中隨機抽取出某幾組達到實驗所需的用戶量進行實驗。

四、abtest實驗評估

流量經過分流后進入到每個實驗組,經過一段時間后各實驗版本將會產生實驗數據,經過統計各組數據之間是否存在顯著性差異以及差異大小,就可以得出各版本之間是否有差異,哪個版本更好的結論。

顯著性檢驗同樣有多種方法:T檢驗、Z檢驗、卡方檢驗。

Z檢驗使用的是總體方差,T檢驗使用的是樣本方差,卡方檢驗是比較兩組數值的分布,因此Z檢驗比T檢驗和卡方檢驗效果更明顯,檢驗精確度是:Z檢驗>T檢驗>卡方檢驗,下面以Z檢驗為例進行介紹。

AB測試需要比較出哪個實驗組表現更好,因此使用的是單尾檢驗。原假設為新方案不優于舊方案,然后計算出在原假設成立的條件下,計算所得實驗樣本數據特征的概率原假設發生的概率P值,和顯著性水平α進行比較以判斷是否拒絕原假設。

如果P值小于顯著性水平,說明我們在原假設的條件下幾乎不會得到這樣的數據,所以我們應該拒絕原假設。取顯著性水平α為5%,具體步驟如下:

1. 計算Z值

根據實驗數據得到對照組均值為p1、實驗樣本數n1,實驗組均值為p2、實驗樣本數n2,有以下公式:

從案例實戰看AB Test系統設計及其原理

2. 得出實驗結果

1)方法一

將上一步得到的Z值與α對應的Z值比較,如果Z(實際) >= Z(1- α),則拒絕原假設,可通過Excel函數計算。

  • 【雙側檢驗】NORMSINV(1-α/2)。例如:NORMSINV(1-0.05/2)=1.959963985
  • 【單側檢驗】NORMSINV(1-α)。例如:NORMSINV(1-0.05)=1.644853627

2)方法二

根據上一步得到的Z值計算出P值,與顯著性水平α比較,如果P < α, 則拒絕原假設,若兩者相等,可加大樣本量后再驗證。

P之計算方式:【雙側檢驗】P值=(1-NORMSDIST(Z(實際)))*2,例如:(1-NORMSDIST(1.96))*2=0.024997895*2=0.05【單側檢驗】P值=1-NORMSDIST(Z(實際)),例如:1-NORMSDIST(1.96)=0.024997895=0.025。

3. 案例時間

通過一段時間的實驗,各實驗組人數為方案A:n1=18953,方案B:n2=18879,點擊率數據得到如下:

從案例實戰看AB Test系統設計及其原理

根據歷史數據計算出支付按鈕點擊率均值p:

p1=(0.078+0.084+0.075+……+0.081+0.075+0.082) / 14=0.081

P2=(0.086+0.092+0.091+……+0.087+0.088+0.089) / 14=0.089

1)計算Z值

從案例實戰看AB Test系統設計及其原理

2)計算P值

P=1-NORMSDIST(Z(實際))= 1-NORMSDIST(2.789943083)= 0.002635865

3)得出結論

P值0.002635865遠小于顯著性水平0.05,說明在當前的數據表現下,原假設幾乎不可能發生,拒絕原假設,認為方案B是優于方案A的。

4)計算置信區間

顯然我們再做一次實驗的話方案B的支付按鈕點擊率均值不一定還是0.089,有可能會上下波動,那么這個波動范圍是多少呢,我們可以由樣本統計量構成的總體參數計算出估計區間。計算公式如下:

標準誤是描述樣本均數的抽樣誤差,樣本的標準誤差為(n為樣本量):

從案例實戰看AB Test系統設計及其原理

樣本均值為p,樣本置信區間為:

從案例實戰看AB Test系統設計及其原理

方案B的均值為0.089,方差為0.081079,顯著性水平為5%,樣本量為18879,則方案B的標準誤為:

從案例實戰看AB Test系統設計及其原理

可計算出方案B的置信區間為:

從案例實戰看AB Test系統設計及其原理

這意味著,將方案B應用到總體用戶,支付按鈕點擊率有95%的概率落到[0.085,0.093]這個區間。

五、abtest系統核心功能架構圖

經過上面的分析,我們已經知道了A/B Test的完整流程。

一個產品需要測試的點往往是非常多的,如果每次實驗都要像上面那樣人工走一遍顯然效率是非常低的,A/B Test又是近年興起的增長黑客的秘密武器,需要進行快速迭代快速驗證,所以將以上流程自動化是非常有必要的。

下面我們就來看看A/B Test系統需要哪些模塊,各模塊之間是怎么配合的。

從案例實戰看AB Test系統設計及其原理

1. 配置模塊

  1. 配置實驗名稱、版本等信息;
  2. 選擇實驗指標,并從數據倉庫獲取所有實驗的指標配置,若有當前在運行的實驗與本次實驗選擇指標一致,則自動化選擇該實驗為互斥實驗;
  3. 選擇實驗對象,如圈選進行過充值的用戶進行實驗;
  4. 根據配置的指標及統計參數,計算出需要多少用戶量,根據選擇的實驗對象,從數倉中同步選擇的實驗對象每天有多少該實驗對象用戶,計算出需要多少天才能達到最小樣本量,并自動化推薦實驗時長。

2. 預警模塊

若實驗快到期,或者實驗樣本量與預期的出入較大,則向業務方預警及時進行調整。

3. 分流模塊

實驗配置好并上線后,用戶訪問APP時,向該模塊該用戶對應的實驗配置信息,分流模塊根據現有正運行的實驗配置,計算出該用戶屬于哪些實驗,進行互斥處理后返回對應最終實驗的版本,客戶端展示對應的實驗版本。

4. 分析模塊

  1. 從數據倉庫中讀取實驗的指標數據、樣本量數據、其他輔助指標數據,進行分析;
  2. 針對每天新進實驗組的用戶數據,進行同期群分析,觀察每天新增實驗用戶的數據波動情況,常見應用于留存分析。

 

本文由 @不語 原創發布于人人都是產品經理,未經許可,禁止轉載

題圖來自?Unsplash,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 好專業 當教材學習了!

    來自浙江 回復
  2. 我想問下 假設的是新方案不優于舊方案,是否在計算z的時候就使用p2-p1,如果假設新方案優于舊方案,那要怎么減呢?
    假設和p2-p1相減順序的關系是什么

    來自浙江 回復
  3. 我們公司推薦 搜索業務都有涉及到abtest 文章內容對比實際場景收獲不少 感謝~

    來自北京 回復
  4. 這里概率類指標的方差應該是綜合方差吧? p1(1-p1)+p2(1-p2)

    來自上海 回復
  5. 您好,非常感謝您的文章,學到了很多。但對于文中對于雙尾檢驗及單尾檢驗的部分有些疑惑,希望能夠得到博主更為詳實的講解~
    第一部分:
    1 三、abtest實驗設計→5. 計算最小樣本量→1)計算最小樣本量兩種檢驗方法→單/雙尾檢驗講解部分中,提到“原假設為新方案優于舊方案或舊方案優于新方案則用單尾檢驗,后面用到的實驗結果評估用的則是單尾檢驗?!贝藭r重點為單尾檢驗。
    2 在兩行后中對于樣本量的計算使用了雙尾檢驗:“下面直接貼Z檢驗樣本量計算公式出來吧(這里使用雙尾檢驗因此使用α/2)”
    在此想請問,是否在設計中明確標識針對本文中的案例所設立的假設,以及使用的驗證方法?
    第二部分:
    四、abtest實驗評估→2. 得出實驗結果→1)方法一→此部分計算了雙尾檢驗(a/2)的Z值為1.9599,單尾檢驗(a)的Z值為1.6448,
    但在接下來的 2)方法二→P之計算方式中,“【單側檢驗】P值=1-NORMSDIST(Z(實際)),例如:1-NORMSDIST(1.96)=0.024997895=0.025?!?br /> 實際單側檢驗的數值上面有計算為1.6448,整體是否應該修改為“【單側檢驗】P值=1-NORMSDIST(Z(實際a)),例如:1-NORMSDIST(1.6448)=0.05。” 又該如何解讀呢?
    第三部分:
    對于統計學部分,我還是個小白,想請教博主,針對本文中的案例,若原假設為“AB兩組沒有明顯差異”,應使用文中提到的雙尾檢驗,但如果原假設為“A組效果高于B組”,整個的實驗流程及檢驗是否會有一個新的計算流程及解讀呢?
    萬望博主能夠賜教~不勝感激

    來自上海 回復
  6. 我有很多問題想要問你,加個微信吧

    來自北京 回復
  7. 你好,想問下文章中的三種分流方案,主流的abtest都是用哪一個呀?感覺每一個方案都有缺點…

    來自廣東 回復
    1. 沒有主流這一說法,看自己的業務需求,如果流量夠用的話采取簡單一點的方案就好,如果流量不多并且經常需要同時進行大量實驗就需要分層設計重復利用流量。

      來自香港 回復
    2. 奧,明白了。所以在同一個頁面同一個場景下,進行簡單的實驗,一般都是互斥了。只有在同一頁面上進行多個實驗并且共用一套流量的時候,采用正交分層就比較合適了。感謝~

      來自廣東 回復
  8. 你好,請問一下,為什么一開始A同學的方案里,點擊表情后只有x%的人可以看到彈出窗口,這里不應該是100%嗎?

    來自四川 回復
    1. 看的比較仔細,確實這里的x應該等于100

      來自香港 回復
    2. 點擊表情的基數肯定比點擊具體某個具體表情的大 為啥等100% 不太明白

      來自北京 回復
  9. 哈哈案例實踐是不是都打錯了,大佬打的是案例時間,一臉懵逼

    來自北京 回復
  10. 請教大佬,現在國內市場的A/B testing工具,好像大部分都是T檢驗,至于在設計系統上需要支持多種檢驗來評估結果嗎?(PS:統計學小白對這塊真是有點迷)

    來自北京 回復
    1. 也沒必要,目前也沒看到有哪家產品各種檢驗都支持的,互聯網這塊的話Z檢驗就可以滿足了,用的比較多的是Z檢驗

      來自香港 回復
    2. 大佬目前是做商業化AB平臺還是大廠內部AB平臺哈,可以加個微信交流交流不

      來自北京 回復
  11. 您的這個“Z檢驗樣本量計算公式出來吧(這里使用雙尾檢驗因此使用α/2)”,這里的Z(1-α/2),那第二類錯誤為什么是Z(1-β),而不是Z(1-β/2)?

    來自河南 回復
    1. 這是統計學的公式,我去學習一下吧

      來自河南 回復
  12. 很好的解說 棒棒

    來自新加坡 回復
    1. 感謝支持,說明認真看完了!

      來自廣東 回復
  13. 高端啊,這么多數學公式

    來自云南 回復
    1. 把這些復雜的計算流程固化成傻瓜式產品才是產品經理的價值所在,共勉!

      回復