項目復盤:如何避開從0~1構建AB Test過程中的坑(上)

9 評論 7990 瀏覽 57 收藏 14 分鐘

編輯導語:ABTest,簡單來說,就是為同一個產品目標制定兩個方案,通過日志記錄用戶的使用情況,通過結構化的日志數據分析相關指標,從而得出更符合預期設計目標的方案,最終將全部流量切換至符合目標的方案。本文作者通過自己的經驗,分享給我們應該如何避開從0~1構建AB Test過程中的坑。

最近設計完成了一個用于信息投放的ABTest功能,正好總結梳理下,避免大家踩坑。

AB實驗大家都聽過,互聯網公司里更常見,開始講內容之前通俗的介紹下AB概念:你在做產品規劃設計時,想出了一個改版方案(姑且稱為版本B),但不確定這個改進的效果是否比老版本(稱為版本A)效果好。

于是想對比下這兩版本的效果,所以你把用戶群體(假設100人),其中10%的流量分配給B方案,90%的流量分配給A方案,持續一周后,查看數據;如果版本B效果比版本A好,那就準備全部上線,如果版本B效果不好,那就下線或重新做實驗。

(手繪人群分流示意,請諒解)

故事講完了,可能很多人覺得很簡單,不就是之前學的生物化學里的單一變量嘛,如果這樣想,那么你的AB實驗應該是做錯了。

一、AB實驗中的典型問題

先看下AB里的幾個核心問題:

  1. 怎么劃分人群,是隨機劃分還是依照什么規則確保人群劃分的合理?(AB實驗里的分流邏輯);
  2. 實驗結果出來了,我怎么判斷這個結果可信不可信(AB實驗里的顯著性差異);
  3. 實驗結果出來了,實驗組數據好,我怎么判斷是不是真的好(AB實驗里的第一類錯誤);
  4. 實驗結果出來了,實驗組數據差,我怎么判斷是不是真的差(AB實驗里的第二類錯誤);
  5. 實驗結果出來了,好多個維度數據,我怎么衡量實驗結果(AB實驗里的衡量指標);
  6. 實驗結果出來了,但是一組AB實驗我總覺得不靠譜(AB實驗的AB組,稱為AA組以及AABB組)。

解決上面6個問題,就從邏輯上完成了AB實驗方案的規劃,剩下的就是產品設計了。

二、如何合理的劃分人群

1. 什么是人群劃分(分流)

這個問題是AB實驗里最關鍵的分流邏輯。

AB實驗最關鍵的是保證變量,是的,這一點和生物化學里的單一變量法一樣了,除了你產品要實驗的點不同外,其實人群也要保證一樣,這個一樣不是說流量或比例一樣,而是人群特質一樣。

舉個例子:BB霜廠家做總人數1200人的AB實驗,1號BB霜投放給了一波600人的女生群體(即人群A分流50%),2號BB霜投放給了另一波600人男生群體(即人群B分流50%),流量劃分一致,實驗結果發現人群A的接受度很高,結論:1號BB霜更受市場歡迎!

這個結論可信么,不可信,因為本身人群特質就不一樣,這里和流量1:1沒關系,流量的比例多少不會影響AB實驗結果,男生拿到BB霜接受度肯定不高(莫要牛角尖,說男生拿到送女朋友之類云云),這個例子說明的是人群特質對實驗結果的影響。

2. 如何進行人群劃分(分流)

首先我們公司是內部有專門的人群分流系統,主要默認的分流算法是uid+hash因子 計算md5取模,根據結果判斷是落在哪個實驗分桶里,該系統可以直接對接使用,所以此處不贅述。

本次主要講下對于沒有科學分流系統的公司如何處理?

采用算法或規則分流,算法分流也分為在線分流和離線分流。在線分流是指根據當前線上目前的實時特征進行劃分,結果更加精確;離線分流是指根據T+1或T+N(具體N根據不同公司不同業務來確定)的特征進行劃分。條件允許情況下,推薦前者。

核心思路主要是拿到用戶的唯一標識,對用戶的唯一標識進行雜散后重新分配。

不同產品唯一標識不同,但一般都有用戶Uid,簡單方式可以用規則對uid采取奇偶數劃分;另外一種引入算法,如Hash算法(一般翻譯為散列、雜湊或音譯為哈希,其輸出是散列值),對uid進行哈希處理。處理后根據業務要求,加入分桶邏輯,判斷具體的uid落在哪個分桶內,完成科學分流。

3. 如何設計人群劃分(分流)

分流的本質是分桶,劃分到不同桶內。所以實現邏輯上明確后,產品設計上其實很簡答,參考思路如下:

(axure草稿版交互,人群分桶示意,參考看就好)

三、如何判斷結果是否可信

1. 結果差異是不是明顯(顯著性檢驗)

判斷實驗是否可信就是AB實驗里的顯著性檢驗,由于AB實驗對用戶進行了分流、抽樣,不同實驗組之間的差異本身就存在隨機性。

所以存在一個顯而易見的問題,實驗的結果是隨機波動導致的還是真實可信的差異?檢驗差異的統計顯著性就是幫助我們判斷這個差異是真實的效果,還是僅僅是由于分流抽樣帶來的隨機的差異。

之前聽韓瞳大佬的課程時,了解到一個拋硬幣的例子,淺顯易懂,借由該例子解釋下:想驗證一個硬幣有沒有被動了手腳,應該怎么做?

  1. 無限次拋擲,然后記錄正反面數據,看下正反面比例;
  2. 這件事前提是大家均知道,正反面的概率分別是50%。

在證明之前,統計學上有個概念原假設和備擇假設,原假設即想要證明的假設,備擇假設即不想證明的假設。所以在這個例子里,我們做如下假設:

  • 原假設:硬幣沒有被動手腳
  • 備擇假設:硬幣被動了手腳

那么假設硬幣的數據如下:

image.png

你是不是覺得結果不好判斷,或者自己心里的判斷很主觀,到底偏移多少算正常的,偏移多少算不正常的?這就是顯著性檢驗要解決的。

再給出答案之前,還需要知道AB實驗里的四種數據情況:

image.png

表格中的兩個錯誤是什么情況下發生的呢?

第一類錯誤:也就是比如拋擲1000次,600次正面,400次反面,數據看起來不正常,但是實際上是統計學里正常的情況,如果繼續拋擲1000次,可能就是510正面,490反面了,也就是之前的拋擲恰好處于自然波動范圍內了;

第二類錯誤:也就是比如拋擲10次,5次正面,5次反面,數據看起來正常,但是實際上統計學里已經不正常了,如果繼續拋擲1000次,可能這個硬幣就變成800正面,200反面了,也就是說由于拋擲次數過少導致的。

講到這里,就是顯著性檢驗的作用了,用于判斷到底是否是正常的波動。

  • 如何評估是否出現了第一類錯誤:采用P值
  • 如何評估是否出現了第二類錯誤:采用Power值

2. 怎么判斷結果是否明顯(檢驗方法)

1)先來解決第一類錯誤

這里非統計學概率學伙伴要問,什么是P值,那么來解釋下。AB實驗的基礎是統計學里的假設檢驗里的知識,核心思路如下:

  1. 當樣本量足夠大足夠多時,把實驗對象分為兩組,如A組和B組。由于數量夠多夠大,理論上可以認為AB兩組的樣本特質一樣,即樣本無差別;
  2. AB兩組投放同一個產品,對B組投放的產品做了改動,A組無改動(統計上稱B組為實驗組,A組為對照組);
  3. 假設該改動沒有影響(統計學上稱之為“原假設”:即最初的假設條件);
  4. 假設該改動有影響(統計學上稱之為“備擇假設”:即原假設的對立假設,包含一切使原假設不成立的命題);
  5. 觀察B組的實驗數據,在統計學和概率學的計算下,原假設成立的前提下,判斷B組數據出現的概率。根據這個概率是否處于置信區間范圍內來判斷,原假設是真還是假。

(手繪p值示意,請諒解)

如圖,在統計學上,參考原假設來判斷其出現概率稱之為P-Value,即p值。

P值指的是比較的兩者的差別是由機遇所導致的可能性大小。P值越小,越有理由認為對比事物間存在差異。一般統計學認為,P>0.05稱“不顯著”;P<=0.05稱“顯著”,P<=0.01稱“非常顯著”。

P<0.05,就是說結果顯示的差別是由機遇所致的可能性不足5%,或者說,別人在同樣的條件下重復同樣的研究,得出相反結論的可能性不足5%。

但是很多AB實驗里容易搞混一個詞,因為AB實驗里經常用“顯著”來描述,所以容易出現“差異具有顯著性”和“具有顯著差異”兩個詞混用,其實二者意義不同。

前者是指其p<=0.05,即可以相信兩個事物完全相同的概率還不到5%,因此可以認為兩個事物確實存在差異,這個結論如果是錯的,錯誤的概率≤5%。

后者是指兩個事物的差別確實是比較大的,如蘋果和西紅柿差別很大,因此可以認為“有顯著差異”,但小蘋果和大蘋果差別不是特別大,但如果AB實驗統計學上的p值≤0.05,可以認為兩者“差別有顯著性”,但不能認為是“有顯著差異”。

好了,這里解釋了p值以及在判斷p值過程中的兩類錯誤。綜上,所以判斷實驗結果是否可信的可以通過判斷P值來判斷。

2)再來解決第二類錯誤

什么是power值,那么來解釋下:接上面的硬幣實驗,也就是硬幣的數據看起來正常(也就是數據好像符合原假設),但是結果確是硬幣實際上不正常,我們犯這個錯誤的概率,稱之為二類錯誤概率值,而power值即稱為統計功效,也就是不犯這個錯誤的概率。

一般情況下,power值在80%或90%以上,認為是可信的,可以接受的。

四、其他衡量方法

聽完后是不是覺得AB沒有那么簡單了,別擔心,上面的邏輯研發會從代碼層面搞定或Python里有現成的函數,產品經理梳理好邏輯就行。

另外還需要額外說明下,AB實驗的衡量方式還有“通過樣本估計整體”、“置信區間”兩種方法,不過多闡述,感興趣的可以自己百度下,效果殊途同歸。

好了,這次就先到這,由于太耗時,下次在寫一篇AB Test(下)講解下AB的衡量指標以及AA組、AABB組的問題。

 

作者:楠神,公眾號《音波楠神》

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

題圖來自 Unsplash,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 寫的非常棒,點個贊,有個問題想請教,既然有了AA試驗,還有必要做顯著性驗證么? 如果要對A/B test的記過做顯著性驗證,是否是通過A(A1、A2、A3、A4)& B(B1、B2、B3、B4)來求P值的方式作為判斷標準,如果沒有顯著性差異,是否可以認為是測試項沒有統計學上的差異,需要引入新的具有顯著差異測試項?(但對于只需要對有限方案做出最優選擇的測試目的來說,AB等效,即隨便選一個就行,判斷其差異是否有意義)。

    來自廣東 回復
    1. 多謝認可,針對你的疑問有幾點解釋如下
      1、AA實驗的目的是為了驗證AB中無法區分的是否是隨機波動導致的問題,AB實驗中的P值指的是比較的兩者的差別是由機遇所導致的可能性大小,所以理論上P值也只是從概率學的角度給出的建議值,當然如果P值很小,基本上大概率認為是顯著性差異導致而不是隨機波動,但,也只是大概率而已
      2、P值一般只是用來驗證AB實驗中的第一類錯誤,即α錯誤,你如果想驗證AB到底有沒有問題,你是不是需要繼續驗證β錯誤,即第二類錯誤,一般用power值驗證,也是概率層面的。所以可以看到,AB實驗結果出來后,你需要數據分析來不斷驗證和校驗你的結果看看對不對
      3、AA是純對照組,脫離概率角度,從生物學的單一變量的角度來輔助你驗證AB實驗的正確性
      4、P值計算方法網上有很多,你也可以直接用Python中的現成的模塊計算

      來自浙江 回復
    2. 明白了,顯著性檢驗檢目的是為了驗證 此次A/B實驗是否是因為隨機因素影響而造成的實驗結果,確保實驗的有效性;AA實驗是為了盡可能的消除這種隨機因素,確保單一變量的有效性。

      來自廣東 回復
    3. 是的。這里不方便直接貼微信,你可以先關注我的公眾號 后臺回我

      來自浙江 回復
    4. 好嘞

      來自廣東 回復
    5. 能否加個微信,以后能多請教。

      來自廣東 回復
  2. 很強,增長、策略產品運營必學知識點。

    來自廣東 回復
  3. 我有個疑問,應該是備擇假設是想要證明的假設吧

    來自北京 回復
    1. 對的,標準理論上是的。由于備擇假設是研究者希望通過收集證據予以支持的假設,一般情況下,建立假設時,先建立備擇假設在確定原假設。自己比較熟悉的情況下,自己能區分開就行。不過還是多謝你的嚴謹

      來自浙江 回復