為什麼在數據驅動的路上,AB 實驗值得信賴?
在線AB實驗成為當今互聯網公司中必不可少的數據驅動的工具,很多公司把自己的應用來做一次AB實驗作為數據驅動的試金石。
文 | 松寶 來自 字節跳動數據平台團隊增長平台
在線AB實驗成為當今互聯網公司中必不可少的數據驅動的工具,很多公司把自己的應用來做一次AB實驗作為數據驅動的試金石。
數據 => 洞察 => 優化,循環往複尋找最優解,尋找增長的方法。
AB中有句經典的名言:大膽假設,小心求證。
本系列連載會從數據驅動、AB實驗基本架構、指標選取與數據分析等角度切入,第一篇著重介紹AB實驗與數據驅動的條件和AB實驗的基本架構。
AB實驗與數據驅動
AB實驗階段對應數據驅動的不同階段,從最基本的設計執行分析階段到絕大多數改動需要AB驗證,從簡單到複雜,從少量實驗到大規模實驗,正好反應的數據驅動從「爬,走,跑,飛」的四個階段,關係是層層遞進的。
1、設計執行分析階段
設計執行分析階段主要是:數據檢測設置和數據科學能力搭建。在AB實驗上進行多次的實驗,從實驗的設計,指標的定義,實驗的開啟,實驗結果的分析,並且找到成功的一些實驗案例有助於我們進入到下一階段。
2、標準化指標階段
標準化指標階段主要是:運行少量實驗到定義標準指標再到開啟更多實驗。AB實驗開始運行更加複雜的case來持續驗證數據的可行性,並且通過運行AA實驗來驗證平台潛在的問題,同時能夠進行樣本比率偏差檢測。
3、大面積實驗AB實驗階段
從上一個階段的標準化指標,已經可以運行大量實驗,並且各種指標也逐漸相對成熟,每次實驗進行多個指標的權衡,然後在一個應用上利用AB實驗對絕大多數的新功能和改動做實驗。
4、絕大多數改動需要AB驗證階段
幾乎所有的改動都需要經過AB實驗的驗證,可以在沒有數據科學家的輔助下,可以對大多數的實驗進行獨立的分析和運作。同時通過對過去實驗的分析,AB實驗的有效性和最佳實踐也能得到不斷的更新。
數據驅動的條件
1、實驗標準化
數據決策肯定是一套標準化的東西來規範,實驗標準化也是AB數據驅動的必備條件。
那什麼是AB實驗的標準化呢?
AB實驗需要注意辛普森悖論,倖存者偏差,選擇偏差等,注意事項都是來源於對撞因子,簡單來說就是「是指同時被兩個以上的變數影響的變數」,具體可以在Google深入了解一下。
2、實驗結果可信性
有數字容易,讓人信賴的數字需要下功夫。開啟實驗容易,實驗報告有數字很容易,這些數字的可信度,這些數字讓人信賴更重要,需要花費更長的時間。
大量實驗中可能只有很小一部分實驗,例如微軟大約30%的結果是正向積極的,最終可以發布到整個應用上。
舉個例子:如果我拋起三枚硬幣,落地分別是正正反,那麼我可以說拋硬幣正面朝上的概率是三分之二嗎?
概率和頻率並不是一個東西,同理,少數幾次AB實驗的結果也不能證明版本A和版本B的優劣。
我們需要統計學上的嚴格論證和計算,來判斷一個實驗結果是否顯著,是否可信。
3、如何衡量好的想法
對於任何一個想法我們很難去衡量它的好壞,大膽假設小心求證。短期目標可能會與更關鍵的長期目標發生衝突。
舉個例子:一家超市突然提高價格,可能會在短期帶來更高利潤。但長遠看,如果更多的顧客改從競爭對手那裡購買商品,那麼這家店的收入就會減少。
新奇效應如何避免?
對於用戶有感知的A/B Test,如UI改版、新的運營方案、新功能上線等,實驗組做的任何改變都可能引起用戶的注意,好奇心驅使他們先體驗一番,從而導致A/B Test中實驗組效果一開始優於對照組,p-value極小,實驗效果非常顯著。但是一段時間過去後,用戶對於新的改版不再敏感,實驗組效果回落,顯著性可能會下降,最後趨於穩定。足夠的樣本量能保證一個合理的實驗周期,可以使用我們的流量計算器中計算流量和實驗周期,從而避免這種新奇效應的影響。
AB實驗基本架構
01 – 流量分割
流量分割的方式:分流和分層。
每個獨立實驗為一層,層與層之間流量是正交的(簡單來講,就是一份流量穿越每層實驗時,都會再次隨機打散,且隨機效果離散)。實驗在同一層拆分流量,不論如何拆分,不同組的流量是不重疊的。
分流
分流是指我們直接將整體用戶切割為幾塊,用戶只能在一個實驗中。但是這種情況很不現實,因為如果我要同時上線多個實驗,流量不夠切怎麼辦?那為了達到最小樣本量,我們就得延長實驗周期,要是做一個實驗,要幾個月。
簡單來說:分流是指對流量進行整體切割,實驗之間互斥。
- 目的:為了獲取純凈的分區,不會互相影響。
- 缺點:浪費流量,導致流量不夠。
分層
就是將同一批用戶,不停的隨機後,處於不同的桶。也就是說,一個用戶會處於多個實驗中,只要實驗之間不相互影響,我們就能夠無限次的切割用戶。這樣在保證了每個實驗都能用全流量切割的同時,也保證了實驗數據是置信的。
簡單來說:對整體流量分流分層。
- 目的:同一個用戶在不同的實驗組,相互不會影響。
- 缺點:不同層之間的hash值盡量不要重合。
02 – 如何看待隨機單元?
什麼是隨機單元呢?
簡單來說,隨機單元就是AB實驗需要達到隨機的最小單元。一個web網站中,最小單元可能是頁面級別,可能是會話級別,或者是用戶級別。
舉個例子:我們選擇頁面級別的隨機單元,AB實驗針對某一個頁面,用戶每一次打開頁面的時候決定把該用戶導向某一個實驗組。
最簡單的情況就是:隨機單元和分析單元是一致的。我們大多數情況也是將隨機單元和分析單元採用用戶級別。兩種單元不一致可能使得實驗分析變得更加複雜。
03 – 隨機演算法
首先什麼是隨機數?
不確定的數。大多數隨機演算法使用的是偽數字生成器。
那什麼是偽數字生成器?一個生產數字序列的演算法,特徵近似隨機數序列的特性。偽隨機數生成器通常接受一個隨機種子( seed) 用來初始化生成器的初始狀態。
按照密碼學來將「隨機」分為三種級別:
- 偽隨機 (PRNG)
- 密碼學安全的偽隨機 (CSPRNG)
- 真隨機 (TRNG)
機PRNG生成的序列並不是真隨機。
它完全是由一個初始值決定,初始值稱為隨機種子(seed)。接近於真隨機序列可以通過硬體隨機數生成器生成。但是偽隨機數生成器因為其生成速度和可再現的優勢,實踐中也很重要。
尋找一個合適的隨機演算法是非常重要的。
一個實驗的每一個variant(實驗組或對照組)都具有關於users的一個隨機抽樣。隨機演算法必須有一些特徵。特徵如下:
-
特徵(1):用戶必須等可能看到一個實驗的每個variant,對於任意的variant必須是無偏的。
-
特徵(2):同一個實驗中,對於單個user重複分配必須是一致的,對於該用戶每次後續訪問中,該user必須被分配到相同的variant上。
-
特徵(3):當多個實驗同時並行運行的時候,實驗之間必須沒有關聯關係。也就是在一個實驗中,一個user被分配到一個variant,對於被分配給其他任意實驗的一個variant,在概率上沒有影響。
-
特徵(4):演算法必須支援單調遞增的,也就是說,如果沒有對那些已經被分配給實驗組的用戶分配進行變更,用戶看到一個實驗組的百分比可能會緩慢增加的。
使用caching的偽隨機
偽隨機數的隨機性可以用它的統計特性來衡量,主要特徵是每個數出現的可能性和它出現時與數序中其他數的關係。
偽隨機數的優點是它的計算比較簡單,而且只使用少數的數值很難推斷出它的計算演算法。
使用caching快取,可以使用標準偽數字生成器作為隨機演算法,一個好的偽數字生成器會滿足特徵(1)和特徵(3)。
對於特徵(2),需要引入狀態,用戶的分配必須被快取,或者快取完成可以是資料庫存儲,便於下次再次訪問應用。
Hash和分區
不同於偽隨機方法,hash和分區是無狀態的,每一個user都會被分配一個唯一的user_unique_id,使用ssid和webid(或者其他)來維持。user_unique_id會和實驗的id進行映射綁定,接著user_unique_id和實驗id使用hash函數來獲得一個整數,整數的範圍是均勻分布的。
hash函數的選取需要注意⚠️,如果hash函數有漏斗(那些相鄰key的實例會映射到相同的hash code),會造成均勻分布的衝突,如果hash函數有特性(某一個key變動會產生一個hash code 上可預測的變動),會造成實驗之間會發生相關。
「加密hash函數MD5」生成的數據在實驗間沒有相關性。其實還可以關注「大質數素數hash演算法」等更加精密優良的演算法。
04 – 實驗灰度發布
實驗發布是一個容易忽略但又非常重要的步驟,從比較小的流量慢慢發布到相對比較大的流量,直到最後全站發布。這個過程是需要自動化和風險控制相結合。
我們經常的做法就是:
實驗發布之後,還可以預留一些流量來衡量實驗的長期效果。
還可以重複發布某一個實驗,看實驗的結果是否可以保持。
指標選取
選取什麼指標來進行檢測,從而更好的幫助我們進行數據驅動決策。
對於一個應用或者產品來說,可能會有很多指標的選擇,哪些指標需要被重點關注,哪些僅僅是關注,哪些是可以不關注。為什麼要定義這個指標,這個指標的定義是為了說明什麼情況,如果這個指標發生變化,將需要怎麼去解釋它。
(一)指標特性
1、 按照實驗的角度來劃分
-
核心指標:需要優化的目標指標,決定這個實驗的最終發展方向。這種指標在一個實驗是非常少的,在運行之後是不做改變的。
-
非核心指標指標:與核心指標有因果關係的+基礎數據的指標,基礎數據的指標是應用運行的底線。
2、指標敏感性和魯棒性
-
指標敏感性:指標對所關心的事物是否足夠敏感
-
指標魯棒性:指標對不關心的事物是否足夠不敏感
可以通過預先小規模試驗來驗證,或者AA試驗來排除偽關係。
3、指標分類
-
(1)計數或者求和(比如:訪問頁面的用戶數)
-
(2)指標分布的平均數,中位數,百分位
-
(3)概率與比率
-
(4)比例
(二)自頂向下設計指標
-
(1)高層次的指標(比如:活躍用戶數,點擊轉化率CTR等等)
-
(2)指標細節(比如:如何定義用戶活躍)
-
(3)使用一組指標,並將它們整合成一個單一指標(比如:總體評價指標OEC)
總體評價指標OEC:如果是使用一套指標,可以把他們聚合成一個指標,比如構造一個目標函數,或者是簡單的加權指標。比如OEC = A * 0.6 + B * 04 + C * 2
舉個例子:點擊率的定義
定義一:登陸後總點擊次數 / 登陸後的去重後的訪問總數
定義二:被點擊的頁面數 / 總頁面數
定義三:總的頁面點擊次數 / 總頁面數
數據分析
有了AB實驗,並且有實驗指標選取之後,實驗結果的分析就成為一件非常重要而且有挑戰的事情。
產生一組數據很容易,但是從數據中分析得到實驗的洞察(Insight)並不簡單。
(一)實驗結果顯著
上面有說到實驗結果的可信度,接下來詳細來介紹。
說到實驗結果是否顯著,我們需要知道統計學中2類統計錯誤,我們簡單說明一下,這裡我們不展開說。
- (0)兩類統計學錯誤
在統計學的世界裡,我們往往只說概率,不說確定,在現實世界中往往只能基於樣本進行推斷。在AB實驗中,我們 不知道真實情況是什麼,因此做假設檢驗的時候就會犯錯誤,這種錯誤可以劃分為兩類:
這是第一類錯誤:實際沒有區別,但實驗結果表示有區別,我們得到顯著結果因此否定原假設,認為實驗組更優,發生的概率用 𝛂 表示。
這是第二類錯誤:實際有區別,但是實際結果表示沒有區別,我們得到不顯著的結果因此無法拒絕原假設,認為實驗組和對照組沒有區別,發生的概率用 𝜷 表示。
理想狀態下當然是希望可以同時控制這兩類錯誤,但是這是不可能的,兩個概率值之間是負向關係,其中一個值的減少必然伴隨著另一個值的增大,為什麼呢?後續有機會再分享。
是否顯著,是否可信,我們可以通過以下幾種因素來判斷:
(1)p值。
展示該指標在實驗中犯第一類錯誤的概率,該概率小於顯著性水平 α ,統計學中稱為顯著,1-α 為置信度或置信水平。
簡單來說:p值判斷不同版本的實驗結果之間不存在顯著差異的概率。
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版本有很大的差別,存在顯著性差異。
我們根據判斷 p 值和第一類錯誤概率 α 比較,已經做了決策。是不是覺得大功告成,不,我們可以繼續考慮power統計功效來衡量實驗的可信。也就是我們要同時考慮第二類錯誤概率,這時候引入power統計功效。
(2)power統計功效(1 – 𝜷)。
實驗能正確做出存在差異判斷的概率。
可以理解為有多少的把握認為版本之間有差別。
該值越大則表示概率越大、功效越充分。
一般來說,我們一般並設置的最低的統計功效值為80%以上。認為這樣的可信度是可以接受的。
舉個例子:實驗A顯示,power(統計功效)為92%,那麼就可以理解為有92%的把握認為版本A和版本B之間是有差別的。
但是power根本算不出來,power作為需要滿足的前提條件,作為先驗的輸入值。
實驗開啟前,通過流量計算器中計算流量和實驗運行時長。
實驗開啟後,通過power=80%,然後計算MDE。
(3)MDE檢驗靈敏度,能有效檢驗出指標置信度的diff幅度。
通過比較指標MDE與指標的目標提升率來判斷不顯著的結論是否solid,可以避免實驗在靈敏度不足的情況下被過早作出非顯著結論而結束,錯失有潛力的feature。
MDE 越小,說明當前的實驗靈敏度越高,並且可以認為:實驗組相比於對照組,只有高於 MDE 的提升才能大概率檢測出效果顯著。小於 MDE 的提升,大概率不會被檢測出顯著。
-
當前條件:指當前樣本量,指標值和指標分布情況,並假設樣本方差與總體指標方差足夠接近。
-
有效檢測:指檢出概率大於等於80%(也就是犯第二類錯誤概率 𝜷 <=20%)
主要影響因素:樣本量大小
舉個例子:假設你對該指標的預期目標提升率為1%。
如果此時MDE=0.5%,MDE < 預期提升值,說明指標變化真的不顯著,請結合業務ROI和其他維度里例如用戶體驗、長期戰略價值等來綜合判斷是否值得上線;
如果那此時MDE=2%,MDE > 預期提升值,說明當前能檢驗出顯著性的最小差異值是2%,由於靈敏度不足未能檢測出。這種情況下建議增大樣本量,例如擴大流量、再觀察一段時間積累更多進組用戶,指標還有置信的可能。
(4)置信區間。
置信區間就是用來對一個概率樣本的總體參數的進行區間估計的樣本均值範圍。一般來說,我們使用 95% 的置信水平來進行區間估計。
置信區間可以輔助確定版本間是否有存在顯著差異的可能性:
如果置信區間上下限的值同為正或負,認為存在有顯著差異的可能性;
如果同時正負值,那麼則認為不存在有顯著差異的可能性。
詳細視圖中有個值叫相對差,該值就是指標變化的點估計值,而置信區間給出的是指標預期變化的區間估計值,區間估計值有更大的可能性覆蓋到指標相對變化的真實值。(假設做100次實驗,有95次算出的置信區間包含了真實值)。
可以這樣簡單但不嚴謹地解讀置信區間:假設策略全量上線,你有95%的把握會看到真實的指標收益在置信區間這個範圍內。
(5)決策流程
(二)多次測試
簡單的說:傳統的假設檢驗的設置是對需要檢測的「假設」進行唯一測試,然後計算p值。我們有5%的概率觀測到某一個並沒有實際變化的「指標」顯得有統計意義上的顯著變化。
現實中,對於同一個實驗,我們通過AB實驗反覆觀察結果,或者反覆針對同一個想法進行迭代。
出現更嚴重的問題就是:我們針對同一個實驗,常常同時觀測幾十個或者上百個指標,導致出現多次實驗的問題,大大增加了觀測並不該有顯著變化的指標有了統計意義變化的概率。
(三)方差的計算
t檢測中我們需要對數據的方法進行計算。有時候我們的「方差」計算是有問題的,之前有說到的「隨機單元」和「分析單元」不一致的情況下,計算比率型的指標,比如點擊率。
我們來看一個場景:經常我們的「隨機單元」是用戶級別的,然而我們希望計算的是一些頁面級別的點擊率,然後看對照組和實驗組之間的差別的,這個時候就存在「隨機單元」和「分析單元」不一致的問題,傳統的計算點擊率的「方差」公式可能存在問題。
(四)樣本比率偏差
在理想的狀態下,對照組和實驗組的流量是一半一半的,也就是50%的進入到對照組,50%的進入到實驗組。但是現實是殘酷的,比如會出現50.27%的用戶進入到對照組,另外49.73%的用戶進入到實驗組。
這種情況正常嗎?我們還信任這樣的實驗結果嗎?
這樣情況的排查和分析。簡單的說,我們需要把這樣的分流結果當作假設檢驗,看這樣的結果是否異常。
(五)AA實驗
AA實驗往往作為檢測平台穩定性和實驗設置是否正確的重要手段。
也就是說,對AB系統本身進行測試,以確保系統在95% 的時間內正確識別出沒有統計學意義上的顯著差異。
(六)對照組和實驗組之間干涉
傳統的實驗我們假設對照組和實驗組是完全隔絕的,然後實際中,完全的隔離是不可能的。
舉個例子:社招網路中,朋友與朋友的關係,我們按照傳統的隨機劃分流量的方法,可能一個用戶在對照組,他的朋友在實驗組,這樣這個用戶可能接觸到對照組的一些資訊,從而違背了假設檢驗的一系列基本假設。
(七)指標的長期效果
有一些「指標」的效果在A/B實驗之後,可能會出現一些「惡化」,也就是說,效果可能沒有之前那麼明顯了,甚至會出現效果完全消失。
如果遇到短期效果與長期效果可能出現不一致的情況,建議延長測試時間,觀察長期效果。
但是長期存在一些問題:
(1)ssid跳變的情況,進行實驗時候,通過隨機分配的ssid,進行確定用戶身份,但是用戶可以在瀏覽器中修改localstorage中的ssid,保持一個穩定的樣本幾乎不可能,實驗進行的越久,問題越嚴重。
(2)倖存者偏差的情況,過度關注倖存者,忽略沒有倖存的而造成錯誤結論。
(3)選擇偏差的情況,由於ssid跳變,只有登陸的用戶組成,不具備代表性。
參考
//stats.stackexchange.com/a/354377/320904
火山引擎A/B測試
A/B測試,擺脫猜測,用科學的實驗衡量決策收益,打造更好的產品,讓業務的每一步都通往增長。點擊了解
歡迎關注字節跳動數據平台同名公眾號