天天看點

為什麼在資料驅動的路上,AB 實驗值得信賴?

線上AB實驗成為當今網際網路公司中必不可少的資料驅動的工具,很多公司把自己的應用來做一次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 實驗值得信賴?

AB實驗需要注意辛普森悖論,幸存者偏差,選擇偏差等,注意事項都是來源于對撞因子,簡單來說就是「是指同時被兩個以上的變數影響的變數」,具體可以在Google深入了解一下。

2、實驗結果可信性

有數字容易,讓人信賴的數字需要下功夫。開啟實驗容易,實驗報告有數字很容易,這些數字的可信度,這些數字讓人信賴更重要,需要花費更長的時間。

大量實驗中可能隻有很小一部分實驗,例如微軟大約30%的結果是正向積極的,最終可以釋出到整個應用上。

舉個例子:如果我抛起三枚硬币,落地分别是正正反,那麼我可以說抛硬币正面朝上的機率是三分之二嗎?

機率和頻率并不是一個東西,同理,少數幾次AB實驗的結果也不能證明版本A和版本B的優劣。

我們需要統計學上的嚴格論證和計算,來判斷一個實驗結果是否顯著,是否可信。

3、如何衡量好的想法

對于任何一個想法我們很難去衡量它的好壞,大膽假設小心求證。短期目标可能會與更關鍵的長期目标發生沖突。

舉個例子:一家超市突然提高價格,可能會在短期帶來更高利潤。但長遠看,如果更多的顧客改從競争對手那裡購買商品,那麼這家店的收入就會減少。

新奇效應如何避免?

對于使用者有感覺的A/B Test,如UI改版、新的營運方案、新功能上線等,實驗組做的任何改變都可能引起使用者的注意,好奇心驅使他們先體驗一番,進而導緻A/B Test中實驗組效果一開始優于對照組,p-value極小,實驗效果非常顯著。但是一段時間過去後,使用者對于新的改版不再敏感,實驗組效果回落,顯著性可能會下降,最後趨于穩定。足夠的樣本量能保證一個合理的實驗周期,可以使用我們的流量電腦中計算流量和實驗周期,進而避免這種新奇效應的影響。

AB實驗基本架構

01 - 流量分割

流量分割的方式:分流和分層。

每個獨立實驗為一層,層與層之間流量是正交的(簡單來講,就是一份流量穿越每層實驗時,都會再次随機打散,且随機效果離散)。實驗在同一層拆分流量,不論如何拆分,不同組的流量是不重疊的。

為什麼在資料驅動的路上,AB 實驗值得信賴?

分流

分流是指我們直接将整體使用者切割為幾塊,使用者隻能在一個實驗中。但是這種情況很不現實,因為如果我要同時上線多個實驗,流量不夠切怎麼辦?那為了達到最小樣本量,我們就得延長實驗周期,要是做一個實驗,要幾個月。

簡單來說:分流是指對流量進行整體切割,實驗之間互斥。

  • 目的:為了擷取純淨的分區,不會互相影響。
  • 缺點:浪費流量,導緻流量不夠。

分層

就是将同一批使用者,不停的随機後,處于不同的桶。也就是說,一個使用者會處于多個實驗中,隻要實驗之間不互相影響,我們就能夠無限次的切割使用者。這樣在保證了每個實驗都能用全流量切割的同時,也保證了實驗資料是置信的。

簡單來說:對整體流量分流分層。

  • 目的:同一個使用者在不同的實驗組,互相不會影響。
  • 缺點:不同層之間的hash值盡量不要重合。

02 - 如何看待随機單元?

什麼是随機單元呢?

簡單來說,随機單元就是AB實驗需要達到随機的最小單元。一個web網站中,最小單元可能是頁面級别,可能是會話級别,或者是使用者級别。

舉個例子:我們選擇頁面級别的随機單元,AB實驗針對某一個頁面,使用者每一次打開頁面的時候決定把該使用者導向某一個實驗組。

最簡單的情況就是:随機單元和分析單元是一緻的。我們大多數情況也是将随機單元和分析單元采用使用者級别。兩種單元不一緻可能使得實驗分析變得更加複雜。

03 - 随機算法

首先什麼是随機數?

不确定的數。大多數随機算法使用的是僞數字生成器。

那什麼是僞數字生成器?一個生産數字序列的算法,特征近似随機數序列的特性。僞随機數生成器通常接受一個随機種子( seed) 用來初始化生成器的初始狀态。

按照密碼學來将「随機」分為三種級别:

  1. 僞随機 (PRNG)
  2. 密碼學安全的僞随機 (CSPRNG)
  3. 真随機 (TRNG)
為什麼在資料驅動的路上,AB 實驗值得信賴?

機PRNG生成的序列并不是真随機。

它完全是由一個初始值決定,初始值稱為随機種子(seed)。接近于真随機序列可以通過硬體随機數生成器生成。但是僞随機數生成器因為其生成速度和可再現的優勢,實踐中也很重要。

尋找一個合适的随機算法是非常重要的。

一個實驗的每一個variant(實驗組或對照組)都具有關于users的一個随機抽樣。随機算法必須有一些特征。特征如下:

  1. 特征(1):使用者必須等可能看到一個實驗的每個variant,對于任意的variant必須是無偏的。
  2. 特征(2):同一個實驗中,對于單個user重複配置設定必須是一緻的,對于該使用者每次後續通路中,該user必須被配置設定到相同的variant上。
  3. 特征(3):當多個實驗同時并行運作的時候,實驗之間必須沒有關聯關系。也就是在一個實驗中,一個user被配置設定到一個variant,對于被配置設定給其他任意實驗的一個variant,在機率上沒有影響。
  4. 特征(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 - 實驗灰階釋出

實驗釋出是一個容易忽略但又非常重要的步驟,從比較小的流量慢慢釋出到相對比較大的流量,直到最後全站釋出。這個過程是需要自動化和風險控制相結合。

我們經常的做法就是:

實驗釋出之後,還可以預留一些流量來衡量實驗的長期效果。

還可以重複釋出某一個實驗,看實驗的結果是否可以保持。

名額選取

為什麼在資料驅動的路上,AB 實驗值得信賴?

選取什麼名額來進行檢測,進而更好的幫助我們進行資料驅動決策。

對于一個應用或者産品來說,可能會有很多名額的選擇,哪些名額需要被重點關注,哪些僅僅是關注,哪些是可以不關注。為什麼要定義這個名額,這個名額的定義是為了說明什麼情況,如果這個名額發生變化,将需要怎麼去解釋它。

(一)名額特性

1、 按照實驗的角度來劃分

  • 核心名額:需要優化的目标名額,決定這個實驗的最終發展方向。這種名額在一個實驗是非常少的,在運作之後是不做改變的。
  • 非核心名額名額:與核心名額有因果關系的+基礎資料的名額,基礎資料的名額是應用運作的底線。

2、名額敏感性和魯棒性

  • 名額敏感性:名額對所關心的事物是否足夠敏感
  • 名額魯棒性:名額對不關心的事物是否足夠不敏感

可以通過預先小規模試驗來驗證,或者AA試驗來排除僞關系。

3、名額分類

  • (1)計數或者求和(比如:通路頁面的使用者數)
  • (2)名額分布的平均數,中位數,百分位
  • (3)機率與比率
  • (4)比例

(二)自頂向下設計名額

  • (1)高層次的名額(比如:活躍使用者數,點選轉化率CTR等等)
  • (2)名額細節(比如:如何定義使用者活躍)
  • (3)使用一組名額,并将它們整合成一個單一名額(比如:總體評價名額OEC)

總體評價名額OEC:如果是使用一套名額,可以把他們聚合成一個名額,比如構造一個目标函數,或者是簡單的權重名額。比如OEC = A * 0.6 + B * 04 + C * 2

舉個例子:點選率的定義

定義一:登陸後總點選次數 / 登陸後的去重後的通路總數

定義二:被點選的頁面數 / 總頁面數

定義三:總的頁面點選次數 / 總頁面數

資料分析

為什麼在資料驅動的路上,AB 實驗值得信賴?

有了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))。

為什麼在資料驅動的路上,AB 實驗值得信賴?

通常情況下:

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)決策流程

為什麼在資料驅動的路上,AB 實驗值得信賴?

(二)多次測試

簡單的說:傳統的假設檢驗的設定是對需要檢測的「假設」進行唯一測試,然後計算p值。我們有5%的機率觀測到某一個并沒有實際變化的“名額”顯得有統計意義上的顯著變化。

現實中,對于同一個實驗,我們通過AB實驗反複觀察結果,或者反複針對同一個想法進行疊代。

出現更嚴重的問題就是:我們針對同一個實驗,常常同時觀測幾十個或者上百個名額,導緻出現多次實驗的問題,大大增加了觀測并不該有顯著變化的名額有了統計意義變化的機率。

(三)方差的計算

t檢測中我們需要對資料的方法進行計算。有時候我們的“方差”計算是有問題的,之前有說到的「随機單元」和「分析單元」不一緻的情況下,計算比率型的名額,比如點選率。

我們來看一個場景:經常我們的「随機單元」是使用者級别的,然而我們希望計算的是一些頁面級别的點選率,然後看對照組和實驗組之間的差别的,這個時候就存在「随機單元」和「分析單元」不一緻的問題,傳統的計算點選率的「方差」公式可能存在問題。

(四)樣本比率偏差

在理想的狀态下,對照組和實驗組的流量是一半一半的,也就是50%的進入到對照組,50%的進入到實驗組。但是現實是殘酷的,比如會出現50.27%的使用者進入到對照組,另外49.73%的使用者進入到實驗組。

這種情況正常嗎?我們還信任這樣的實驗結果嗎?

這樣情況的排查和分析。簡單的說,我們需要把這樣的分流結果當作假設檢驗,看這樣的結果是否異常。

(五)AA實驗

AA實驗往往作為檢測平台穩定性和實驗設定是否正确的重要手段。

也就是說,對AB系統本身進行測試,以確定系統在95% 的時間内正确識别出沒有統計學意義上的顯著差異。

(六)對照組和實驗組之間幹涉

傳統的實驗我們假設對照組和實驗組是完全隔絕的,然後實際中,完全的隔離是不可能的。

舉個例子:社招網絡中,朋友與朋友的關系,我們按照傳統的随機劃分流量的方法,可能一個使用者在對照組,他的朋友在實驗組,這樣這個使用者可能接觸到對照組的一些資訊,進而違背了假設檢驗的一系列基本假設。

(七)名額的長期效果

有一些“名額”的效果在A/B實驗之後,可能會出現一些“惡化”,也就是說,效果可能沒有之前那麼明顯了,甚至會出現效果完全消失。

如果遇到短期效果與長期效果可能出現不一緻的情況,建議延長測試時間,觀察長期效果。

但是長期存在一些問題:

(1)ssid跳變的情況,進行實驗時候,通過随機配置設定的ssid,進行确定使用者身份,但是使用者可以在浏覽器中修改localstorage中的ssid,保持一個穩定的樣本幾乎不可能,實驗進行的越久,問題越嚴重。

(2)幸存者偏差的情況,過度關注幸存者,忽略沒有幸存的而造成錯誤結論。

(3)選擇偏差的情況,由于ssid跳變,隻有登陸的使用者組成,不具備代表性。

參考

https://www.cambridge.org/core/books/trustworthy-online-controlled-experiments/D97B26382EB0EB2DC2019A7A7B518F59

https://stats.stackexchange.com/a/354377/320904

火山引擎A/B測試

A/B測試,擺脫猜測,用科學的實驗衡量決策收益,打造更好的産品,讓業務的每一步都通往增長。點選了解

歡迎關注位元組跳動資料平台同名公衆号

繼續閱讀