AB 實驗為何值得信賴?
1. 前言
在線 AB 實驗成為當今互聯(lián)網(wǎng)公司中必不可少的數(shù)據(jù)驅(qū)動的工具,很多公司把自己的產(chǎn)品來做一次 AB 實驗作為數(shù)據(jù)驅(qū)動的試金石。
數(shù)據(jù) => 洞察 => 優(yōu)化,循環(huán)往復尋找最優(yōu)解,尋找增長的方法。
AB 中有句經(jīng)典的名言:大膽假設,小心求證。
本分享從以下幾個方面來介紹:
- 數(shù)據(jù)驅(qū)動
 - 基本架構
 - 指標選取
 - 數(shù)據(jù)分析
 
2. 數(shù)據(jù)驅(qū)動
AB 實驗并不是萬能的,沒有 AB 實驗也不是萬萬不能,但是有了 AB 實驗可以少走很多彎路。
2.1 AB 實驗與數(shù)據(jù)驅(qū)動
AB 實驗階段對應數(shù)據(jù)驅(qū)動的不同階段,從最基本的設計執(zhí)行分析階段到絕大多數(shù)改動需要 AB 驗證,從簡單到復雜,從少量實驗到大規(guī)模實驗,正好對應的數(shù)據(jù)驅(qū)動從「爬,走,跑,飛」的四個階段,關系是層層遞進的。

2.1.1 設計執(zhí)行分析階段
設計執(zhí)行分析階段主要是:數(shù)據(jù)檢測設置和數(shù)據(jù)科學能力搭建。在 AB 實驗上進行多次的實驗,從實驗的設計,指標的定義,實驗的開啟,實驗結(jié)果的分析,并且找到成功的一些實驗案例有助于我們進入到下一階段。?
2.1.2 標準化指標階段
標準化指標階段主要是:運行少量實驗到定義標準指標再到開啟更多實驗。AB 實驗開始運行更加復雜的 case 來持續(xù)驗證數(shù)據(jù)的可行性,并且通過運行 AA 實驗來驗證平臺潛在的問題,同時能夠進行樣本比率偏差檢測。
2.1.3 大面積實驗AB實驗階段
從上一個階段的標準化指標,已經(jīng)可以運行大量實驗,并且各種指標也逐漸相對成熟,每次實驗進行多個指標的權衡,然后在一個應用上利用 AB 實驗對絕大多數(shù)的新功能和改動做實驗。
2.1.4 絕大多數(shù)改動需要AB驗證階段
幾乎所有的改動都需要經(jīng)過 AB 實驗的驗證,可以在沒有數(shù)據(jù)科學家的輔助下,可以對大多數(shù)的實驗進行獨立的分析和運作。同時通過對過去實驗的分析,AB 實驗的有效性和最佳實踐也能得到不斷的更新。
2.2 數(shù)據(jù)驅(qū)動的條件
2.2.1 實驗標準化
數(shù)據(jù)決策肯定是一套標準化的東西來規(guī)范,實驗標準化也是 AB 數(shù)據(jù)驅(qū)動的必備條件。
那什么是 AB 實驗的標準化呢?

AB 實驗需要注意??辛普森悖論、幸存者偏差、選擇偏差等,注意事項都是來源于對撞因子,簡單來說就是「是指同時被兩個以上的變數(shù)影響的變數(shù)」,具體的可以在 google 深入了解一下。
2.2.2 實驗結(jié)果可信性
有數(shù)字容易,讓人信賴的數(shù)字需要下功夫。開啟實驗容易,實驗報告有數(shù)字很容易,這些數(shù)字的可信度,這些數(shù)字讓人信賴更重要,需要花費更長的時間。
大量實驗中可能只有很小一部分實驗,例如微軟大約 30% 的結(jié)果是正向積極的,最終可以發(fā)布到整個應用上。
舉個例子??:
如果我拋起三枚硬幣,落地分別是正正反,那么我可以說拋硬幣正面朝上的概率是三分之二嗎?
概率和頻率并不是一個東西,同理,少數(shù)幾次 AB 實驗的結(jié)果也不能證明版本 A 和版本 B 的優(yōu)劣。
我們需要統(tǒng)計學上的嚴格論證和計算,來判斷一個實驗結(jié)果是否顯著,是否可信。
2.2.3 如何衡量好的想法
對于任何一個想法我們很難去衡量它的好壞,大膽假設小心求證。短期目標可能會與更關鍵的長期目標發(fā)生沖突。
舉個例子??:
一家超市突然提高價格,可能會在短期帶來更高利潤。但長遠看,如果更多的顧客改從競爭對手那里購買商品,那么這家店的收入就會減少。
新奇效應如何避免?
對于用戶有感知的 A/B Test,如 UI 改版、新的運營方案、新功能上線等,實驗組做的任何改變都可能引起用戶的注意,好奇心驅(qū)使他們先體驗一番,從而導致 A/B Test 中實驗組效果一開始優(yōu)于對照組,p-value 極小,實驗效果非常顯著。但是一段時間過去后,用戶對于新的改版不再敏感,實驗組效果回落,顯著性可能會下降,最后趨于穩(wěn)定。足夠的樣本量能保證一個合理的實驗周期,可以使用我們的流量計算器中計算流量和實驗周期,從而避免這種新奇效應的影響。
3. 基本架構
AB 實驗的思想非常簡單直觀,但是并不是代表做 AB 實驗是一種很簡單容易的事情。
舉個例子??,在網(wǎng)站實現(xiàn)一個 AB 實驗,主要涉及到 2 分部分:
第 1 個是:隨機算法,作用是將 users 映射到不同實驗組中。
第 2 個是:分配方法,隨機算法的結(jié)果來決定每一個用戶是否看到該網(wǎng)站的實驗。
3.1 流量分割
流量分割的方式:分流和分層。
每個獨立實驗為一層,層與層之間流量是正交的(簡單來講,就是一份流量穿越每層實驗時,都會再次隨機打散,且隨機效果離散)。實驗在同一層拆分流量,不論如何拆分,不同組的流量是不重疊的。

3.1.1 分流
分流是指我們直接將整體用戶切割為幾塊,用戶只能在一個實驗中。但是這種情況很不現(xiàn)實,因為如果我要同時上線多個實驗,流量不夠切怎么辦?那為了達到最小樣本量,我們就得延長實驗周期,要是做一個實驗,要幾個月。
簡單來說:分流是指對流量進行整體切割,實驗之間互斥。
目的:為了獲取純凈的分區(qū),不會互相影響。
缺點:浪費流量,導致流量不夠。
3.1.2 分層
就是將同一批用戶,不停的隨機后,處于不同的桶。也就是說,一個用戶會處于多個實驗中,只要實驗之間不相互影響,我們就能夠無限次的切割用戶。這樣在保證了每個實驗都能用全流量切割的同時,也保證了實驗數(shù)據(jù)是置信的。
簡單來說:對整體流量分流分層。
目的:同一個用戶在不同的實驗組,相互不會影響。
缺點:不同層之間的 hash 值盡量不要重合。
3.2 如何看待隨機單元?
什么是隨機單元呢?簡單來說,隨機單元就是 AB 實驗需要達到隨機的最小單元。一個 web 網(wǎng)站中,最小單元可能是頁面級別,可能是會話級別,或者是用戶級別。
舉個例子??:
我們選擇頁面級別的隨機單元,AB 實驗針對某一個頁面,用戶每一次打開頁面的時候決定把該用戶導向某一個實驗組。
最簡單的情況就是:隨機單元和分析單元是一致的。我們大多數(shù)情況也是將隨機單元和分析單元采用用戶級別。兩種單元不一致可能使得實驗分析變得更加復雜。
3.3 隨機算法
首先什么是隨機數(shù)?不確定的數(shù)。
大多數(shù)隨機算法使用的是偽數(shù)字生成器。
那什么是偽數(shù)字生成器?一個生產(chǎn)數(shù)字序列的算法,特征近似隨機數(shù)序列的特性。偽隨機數(shù)生成器通常接受一個隨機種子(seed) 用來初始化生成器的初始狀態(tài)。
按照密碼學來將「隨機」分為三種級別:
1. 偽隨機 (PRNG) 2. 密碼學安全的偽隨機 (CSPRNG) 3. 真隨機 (TRNG)

偽隨機 PRNG 生成的序列并不是真隨機。它完全是由一個初始值決定,初始值稱為隨機種子(seed)。接近于真隨機序列可以通過硬件隨機數(shù)生成器生成。但是偽隨機數(shù)生成器因為其生成速度和可再現(xiàn)的優(yōu)勢,實踐中也很重要。
尋找一個合適的隨機算法是非常重要的。
一個實驗的每一個 variant (實驗組或?qū)φ战M)都具有關于 users 的一個隨機抽樣。隨機算法必須有一些特征。特征如下:
- 特征(1):用戶必須等可能看到一個實驗的每個 variant,對于任意的 variant 必須是無偏的。
 - 特征(2):同一個實驗中,對于單個 user 重復分配必須是一致的,對于該用戶每次后續(xù)訪問中,該 user 必須被分配到相同的 variant 上。
 - 特征(3):當多個實驗同時并行運行的時候,實驗之間必須沒有關聯(lián)關系。也就是在一個實驗中,一個 user 被分配到一個 variant,對于被分配給其他任意實驗的一個 variant,在概率上沒有影響。
 - 特征(4):算法必須支持單調(diào)遞增的,也就是說,如果沒有對那些已經(jīng)被分配給實驗組的用戶分配進行變更,用戶看到一個實驗組的百分比可能會緩慢增加的。
 
3.3.1 使用 caching 的偽隨機
偽隨機數(shù)的隨機性可以用它的統(tǒng)計特性來衡量,主要特征是每個數(shù)出現(xiàn)的可能性和它出現(xiàn)時與數(shù)序中其他數(shù)的關系。
偽隨機數(shù)的優(yōu)點是它的計算比較簡單,而且只使用少數(shù)的數(shù)值很難推斷出它的計算算法。
使用 caching 緩存,可以使用標準偽數(shù)字生成器作為隨機算法,一個好的偽數(shù)字生成器會滿足特征(1)和特征(3)。
對于特征(2),需要引入狀態(tài),用戶的分配必須被緩存,或者緩存完成可以是數(shù)據(jù)庫存儲,便于下次再次訪問應用。
3.3.2 Hash 和分區(qū)
不同于偽隨機方法,hash 和分區(qū)是無狀態(tài)的,每一個 user 都會被分配一個唯一的 user_unique_id,使用 ssid 和 webid (或者其他)來維持。user_unique_id 會和實驗的 id 進行映射綁定,接著 user_unique_id 和實驗 id 使用 hash 函數(shù)來獲得一個整數(shù),整數(shù)的范圍是均勻分布的。
hash 函數(shù)的選取需要注意??,如果 hash 函數(shù)有漏斗(那些相鄰 key 的實例會映射到相同的 hash code),會造成均勻分布的沖突,如果 hash 函數(shù)有特性(某一個 key 變動會產(chǎn)生一個 hash code 上可預測的變動),會造成實驗之間會發(fā)生相關。
「加密 hash 函數(shù) MD5 」生成的數(shù)據(jù)在實驗間沒有相關性。其實還可以關注「大質(zhì)數(shù)素數(shù) hash 算法」等更加精密優(yōu)良的算法。
3.4 實驗灰度發(fā)布
實驗發(fā)布是一個容易忽略但又非常重要的步驟,從比較小的流量慢慢發(fā)布到相對比較大的流量,直到最后全站發(fā)布。這個過程是需要自動化和風險控制相結(jié)合。
我們經(jīng)常的做法就是:
- 實驗發(fā)布之后,還可以預留一些流量來衡量實驗的長期效果。
 - 還可以重復發(fā)布某一個實驗,看實驗的結(jié)果是否可以保持。
 
4. 指標選取
選取什么指標來進行檢測,從而更好的幫助我們進行數(shù)據(jù)驅(qū)動決策。
對于一個應用或者產(chǎn)品來說,可能會有很多指標的選擇,哪些指標需要被重點關注,哪些僅僅是關注,哪些是可以不關注。為什么要定義這個指標,這個指標的定義是為了說明什么情況,如果這個指標發(fā)生變化,將需要怎么去解釋它。
4.1 指標特性
選取什么指標來進行檢測,從而更好的幫助我們進行數(shù)據(jù)驅(qū)動決策。

對于一個應用或者產(chǎn)品來說,可能會有很多指標的選擇,哪些指標需要被重點關注,哪些僅僅是關注,哪些是可以不關注。為什么要定義這個指標,這個指標的定義是為了說明什么情況,如果這個指標發(fā)生變化,將需要怎么去解釋它。
4.1.1 按照實驗的角度來劃分
核心指標:需要優(yōu)化的目標指標,決定這個實驗的最終發(fā)展方向。這種指標在一個實驗是非常少的,在運行之后是不做改變的。
非核心指標指標:與核心指標有因果關系的+基礎數(shù)據(jù)的指標,基礎數(shù)據(jù)的指標是應用運行的底線。
4.1.2 指標敏感性和魯棒性
指標敏感性:指標對所關心的事物是否足夠敏感。
指標魯棒性:指標對不關心的事物是否足夠不敏感。
可以通過預先小規(guī)模試驗來驗證,或者 AA 試驗來排除偽關系。
4.1.3 指標分類
- 計數(shù)或者求和(比如:訪問頁面的用戶數(shù))。
 - 指標分布的平均數(shù),中位數(shù),百分位。
 - 概率與比率。
 - 比例。
 
4.2 自頂向下設計指標
- 高層次的指標(比如:活躍用戶數(shù),點擊轉(zhuǎn)化率 CTR 等等)。
 - 指標細節(jié)(比如:如何定義用戶活躍)。
 - 使用一組指標,并將它們整合成一個單一指標(比如:總體評價指標 OEC )。
 
總體評價指標 OEC :如果是使用一套指標,可以把他們聚合成一個指標,比如構造一個目標函數(shù),或者是簡單的加權指標。比如 OEC = A * 0.6 + B * 04 + C * 2 。
現(xiàn)在我們的策略是指標,還是獨立去觀測。那為啥不使用 OEC 來看指標呢?通過 OEC 看的指標不能單獨觀測多個指標,對于新手小白比較友好,只需要關注 OEC,不需要關注多個指標的數(shù)據(jù),但是并不能真的反應多個指標的真實情況。
舉個例子??:
點擊率的定義:
- 定義一:登陸后總點擊次數(shù) / 登陸后的去重后的訪問總數(shù)
 - 定義二:被點擊的頁面數(shù) / 總頁面數(shù)
 - 定義三:總的頁面點擊次數(shù) / 總頁面數(shù)
 
5. 數(shù)據(jù)分析

有了 AB 實驗,并且有實驗指標選取之后,實驗結(jié)果的分析就成為一件非常重要而且有挑戰(zhàn)的事情。
產(chǎn)生一組數(shù)據(jù)很容易,但是從數(shù)據(jù)中分析得到實驗的洞察(Insight)并不簡單。
5.1 實驗結(jié)果顯著
上面有說到實驗結(jié)果的可信度,接下來詳細來介紹。
說到實驗結(jié)果是否顯著,我們需要知道統(tǒng)計學中 2 類統(tǒng)計錯誤,我們簡單說明一下,這里我們不展開說。
5.1.1 兩類統(tǒng)計學錯誤
在統(tǒng)計學的世界里,我們往往只說概率,不說確定,在現(xiàn)實世界中往往只能基于樣本進行推斷。在 AB 實驗中,我們 不知道真實情況是什么,因此做假設檢驗的時候就會犯錯誤,這種錯誤可以劃分為兩類:
- 這是第一類錯誤:實際沒有區(qū)別,但實驗結(jié)果表示有區(qū)別,我們得到顯著結(jié)果因此否定原假設,認為實驗組更優(yōu),發(fā)生的概率用 ?? 表示。
 - 這是第二類錯誤:實際有區(qū)別,但是實際結(jié)果表示沒有區(qū)別,我們得到不顯著的結(jié)果因此無法拒絕原假設,認為實驗組和對照組沒有區(qū)別,發(fā)生的概率用?? 表示。
 
理想狀態(tài)下當然是希望可以同時控制這兩類錯誤,但是這是不可能的,兩個概率值之間是負向關系,其中一個值的減少必然伴隨著另一個值的增大,為什么呢?后續(xù)有機會再分享。
5.1.2 顯著和可信的判斷
是否顯著,是否可信,我們可以通過以下幾種因素來判斷:?
(1)p 值。展示該指標在實驗中犯第一類錯誤的概率,該概率小于顯著性水平 α ,統(tǒng)計學中稱為顯著, 1-α 為置信度或置信水平。
- 簡單來說:p 值判斷不同版本的實驗結(jié)果之間不存在顯著差異的概率。
 - p-value 越小越可信,有顯著差異的指標,P-value=0.01 的比 P-value=0.05 的可信度更高。
 - p 值基本上還有另一個相對應的叫作 t 值,這個 p 值其實就是在 t 分布下 ≥t 值的概率密度值 (P(x≥t))。
 

通常情況下:
p 值 > α(顯著水平α,α 值一般 5%) ,說明 A 版本和 B 版本沒有太大差別,不存在顯著性差異。
p 值 < α(顯著水平,α 值一般 5%),說明 A 版本和 B 版本有很大的差別,存在顯著性差異。
我們根據(jù)判斷 p 值和第一類錯誤概率 α 比較,已經(jīng)做了決策。是不是覺得大功告成,不,我們可以繼續(xù)考慮 power 統(tǒng)計功效來衡量實驗的可信。也就是我們要同時考慮第二類錯誤概率,這時候引入 power 統(tǒng)計功效。
(2)power 統(tǒng)計功效(1 - ??)。實驗能正確做出存在差異判斷的概率。
- 可以理解為有多少的把握認為版本之間有差別。
 - 該值越大則表示概率越大、功效越充分。
 - 一般來說,我們一般并設置的最低的統(tǒng)計功效值為 80% 以上。認為這樣的可信度是可以接受的。
 
舉個例子??:
實驗 A 顯示,power(統(tǒng)計功效)為 92%,那么就可以理解為有 92% 的把握認為版本 A 和版本 B 之間是有差別的。
但是 power 根本算不出來,power 作為需要滿足的前提條件,作為先驗的輸入值。
- 實驗開啟前,通過流量計算器中計算流量和實驗運行時長。
 - 實驗開啟后,通過 power=80%,然后計算 MDE。
 
(3)MDE 檢驗靈敏度,能有效檢驗出指標置信度的 diff 幅度。
通過比較指標 MDE 與指標的目標提升率來 判斷不顯著的結(jié)論是否 solid,可以避免實驗在靈敏度不足的情況下被過早作出非顯著結(jié)論而結(jié)束,錯失有潛力的 feature。
MDE 越小,說明當前的實驗靈敏度越高, 并且可以認為:實驗組相比于對照組,只有高于 MDE 的提升才能大概率檢測出效果顯著。小于 MDE 的提升,大概率不會被檢測出顯著。
- 當前條件:指當前樣本量,指標值和指標分布情況,并假設樣本方差與總體指標方差足夠接近。
 - 有效檢測:指檢出概率大于等于 80%(也就是犯第二類錯誤概率 ?? <=20%)
 - 主要影響因素:樣本量大小
 
舉個例子??
假設你對該指標的預期目標提升率為 1%。
- 如果此時 MDE = 0.5%,MDE < 預期提升值,說明指標變化真的不顯著,請結(jié)合業(yè)務 ROI 和其他維度里例如用戶體驗、長期戰(zhàn)略價值等來綜合判斷是否值得上線。
 - 如果那此時 MDE = 2%,MDE > 預期提升值,說明當前能檢驗出顯著性的最小差異值是 2%,由于靈敏度不足未能檢測出。這種情況下建議增大樣本量, 例如擴大流量、再觀察一段時間積累更多進組用戶,指標還有置信的可能。
 
(4)置信區(qū)間。置信區(qū)間就是用來對一個概率樣本的總體參數(shù)的進行區(qū)間估計的樣本均值范圍。一般來說,我們使用 95% 的置信水平來進行區(qū)間估計。
置信區(qū)間可以輔助確定版本間是否有存在顯著差異的可能性:
- 如果置信區(qū)間上下限的值同為正或負,認為存在有顯著差異的可能性。
 - 如果同時正負值,那么則認為不存在有顯著差異的可能性。
 
在火山引擎 AB 測試的實驗報告中,指標分析的詳細視圖中有個值叫相對差,該值就是指標變化的點估計值,而置信區(qū)間給出的是指標預期變化的區(qū)間估計值,區(qū)間估計值有更大的可能性覆蓋到指標相對變化的真實值。(假設做 100 次實驗,有 95 次算出的置信區(qū)間包含了真實值)。
可以這樣簡單但不嚴謹?shù)亟庾x置信區(qū)間 :假設策略全量上線,你有 95% 的把握會看到真實的指標收益在 置信區(qū)間 這個范圍內(nèi)。?
5.1.3 決策流程

5.2 多次測試
簡單的說:傳統(tǒng)的假設檢驗的設置是對需要檢測的「假設」進行唯一測試,然后計算 p 值。我們有 5% 的概率觀測到某一個并沒有實際變化的“指標”顯得有統(tǒng)計意義上的顯著變化。
現(xiàn)實中,對于同一個實驗,我們通過 AB 實驗反復觀察結(jié)果,或者反復針對同一個想法進行迭代。
出現(xiàn)更嚴重的問題就是:我們針對同一個實驗,常常同時觀測幾十個或者上百個指標,導致出現(xiàn)多次實驗的問題,大大增加了觀測并不該有顯著變化的指標有了統(tǒng)計意義變化的概率。
5.3 方差的計算
t檢測中我們需要對數(shù)據(jù)的方法進行計算。有時候我們的“方差”計算是有問題的,之前有說到的「隨機單元」和「分析單元」不一致的情況下,計算比率型的指標,比如點擊率。
我們來看一個場景:經(jīng)常我們的「隨機單元」是用戶級別的,然而我們希望計算的是一些頁面級別的點擊率,然后看對照組和實驗組之間的差別的,這個時候就存在「隨機單元」和「分析單元」不一致的問題,傳統(tǒng)的計算點擊率的「方差」公式可能存在問題。
5.4 樣本比率偏差
在理想的狀態(tài)下,對照組和實驗組的流量是一半一半的,也就是 50% 的進入到對照組,50% 的進入到實驗組。但是現(xiàn)實是殘酷的,比如會出現(xiàn) 50.27% 的用戶進入到對照組,另外 49.73% 的用戶進入到實驗組。
這種情況正常嗎?我們還信任這樣的實驗結(jié)果嗎?
這樣情況的排查和分析。簡單的說,我們需要把這樣的分流結(jié)果當作假設檢驗,看這樣的結(jié)果是否異常。
5.5 AA 實驗
AA 實驗往往作為檢測平臺穩(wěn)定性和實驗設置是否正確的重要手段。
總是有人想著做「AA」實驗,為什么會這樣呢?說到底還是對于 AB 實驗存在疑慮和不信賴。大多數(shù)想做 AA 實驗的目的主要是:驗證用戶分流是否“均勻”;比較“ AA 組內(nèi)差異”和“ AB 組間差異”。
其實 AA 實驗中的指標差異顯著/置信并不代表分流不科學,AA 實驗的指標必然存在差異,并且指標差異可能還不小,AA 差異可能“顯著”。
也就是說,對 AB 系統(tǒng)本身進行測試,以確保系統(tǒng)在 95% 的時間內(nèi)正確識別出沒有統(tǒng)計學意義上的顯著差異。
5.6 對照組和實驗組之間干涉
傳統(tǒng)的實驗我們假設對照組和實驗組是完全隔絕的,然后實際中,完全的隔離是不可能的。
舉個例子??:
社招網(wǎng)絡中,朋友與朋友的關系,我們按照傳統(tǒng)的隨機劃分流量的方法,可能一個用戶在對照組,他的朋友在實驗組,這樣這個用戶可能接觸到對照組的一些信息,從而違背了假設檢驗的一系列基本假設。
5.7 指標的長期效果
有一些“指標”的效果在 A/B 實驗之后,可能會出現(xiàn)一些“惡化”,也就是說,效果可能沒有之前那么明顯了,甚至會出現(xiàn)效果完全消失。
如果遇到短期效果與長期效果可能出現(xiàn)不一致的情況,建議延長測試時間,觀察長期效果。
但是長期存在一些問題:
(1)用戶唯一標識(比如:ssid)跳變的情況,進行實驗時候,通過隨機分配的 ssid,進行確定用戶身份,但是用戶可以在瀏覽器中修改 localstorage 中的 ssid,保持一個穩(wěn)定的樣本幾乎不可能,實驗進行的越久,問題越嚴重。
(2)幸存者偏差的情況,過度關注幸存者,忽略沒有幸存的而造成錯誤結(jié)論。
(3)選擇偏差的情況,由于 ssid 跳變,只有登陸的用戶組成,不具備代表性。
6. 總結(jié)

7. 參考
- https://www.cambridge.org/core/books/trustworthy-online-controlled-experiments/D97B26382EB0EB2DC2019A7A7B518F59
 - https://stats.stackexchange.com/a/354377/320904
 















 
 
 







 
 
 
 