從零開始學AB測試:躲坑篇

AB測試的原理很簡單,只用到了最簡單的統計假設檢驗,但表面的簡單通常都隱藏著陷阱,這一點沒有經過實踐的摸爬滾打是不容易看到的,今天我就把前人已經踩過的坑,一共15個,給大家分享一下。在分享之前,大家腦中一定要有個概念,AB測試雖然簡單且強大,但是其成立是有前提的:

  1. A組和B組的用戶一定是要「隨機」分配。隨機這個事很有學問,絕對的隨機甚至根本不可能,實際中只能做到盡量接近真隨機。換句話說,隨機性並不總是成立,你要仔細小心它失效的場景。
  2. 在以你測試的時間點為中心的一定時間範圍內,用戶的行為是不變的。

只要牢記並時刻檢查這兩點假設,那麼很多下面的陷阱你自然就能避免了。

知識點,要考

1. 不做AB測試

很顯然,我們不能不做AB測試。不要企圖用一些其他方法替代AB測試,比如:通過比較產品上線之前N天和之後N天的情況,對比分析去得出結論。這不也是AB對比嗎?看起來沒毛病,這種方法也不是完全沒有用,但是很不穩定,所以不要用。

2. 亂作AB測試

既然AB大法這麼好用,那麼我們全靠它不就行了嗎?以後有任何功能任何改動都先搞個AB測試吧!AB測試並不是做的越多越好,我們可以通過下面簡單的公式來看一下:

AB測試效果公式

我們追求的是總的效果,除了注重數量更要注重品質。

3. 取樣污染

舉個例子,如果你在節假日對你的產品做AB測試,那麼測試階段的用戶群(樣本)和平時的用戶群自然會有很大的差異(回顧開頭講的第二條前提條件),這樣很難得出你想要的測試結果。AB測試無法在全體樣本上進行實驗,所以必須取樣,取樣要保證隨機性且能代表總體樣本的分布,做實驗的時候就要特別注意避免一些可能導致取樣污染的特殊因素。

4. 時間範圍不夠

除了要避免在一些特殊時間進行測試,測試的時間還要足夠長,理由如下:

  • 時間長有助於收集更多的數據,保證統計顯著性
  • 如果新的特徵改變比較明顯,老用戶可能會不適應,那麼你需要給老用戶一定的時間去適應你的改變,然後收集的數據才更有統計意義。(參考開頭提到的第二條準則)

5. 只關注平均值

如果測試結果顯示新版本比舊版本平均多吸引了30%的用戶,那麼是否就證明萬事大吉,可以開開心心上線了呢? 還不行。這個時候還要對更細粒度的數據做一些分析,保證你看到的「好結果」是真的。 舉個極端點例子,萬一是系統Bug導致新版本多統計出了更多的用戶呢? 我們相信,在AB實驗結束並且展現了良好的結果時,你已經基本接近成功了,但是永遠不要在分析更詳細用戶數據之前下結論。

6. 忽視技術實現

有些看不見的東西一樣會影響用戶,AB測試階段除了產品特性的不同,技術細節也會改變,這些會不會影響到實驗結果? 如果新版本載入更多的css資源,會不會導致頁面載入變慢?這些看不見的細節也會影響用戶體驗,給實驗結果帶來干擾。

7. 不去思考為什麼

AB測試不會一直成功,甚至失敗的次數可能更多,但是如果實驗結束之後不去思考為什麼,那才是徹底的失敗。實際上AB測試失敗的時候,才是我們從中學習並真正了解用戶的時候,千萬不要放棄這樣的機會,要多問些為什麼。

「想要提高成功率,先提高失敗率。」

失敗是成功之母

8. 用錯誤的度量標準

舉個例子,如果你優化的是網站首頁的性能,那麼就不要拿全站的統計結果去做度量標準。度量標準要選好,不要想當然。

9. 做一系列的測試

如果新版本有10個細節上的改動,那麼是不是我們要做10個AB測試來分別測試他們的效果呢? 當然不行,千萬不要這麼做。產品的改動效果絕對不是線性相加的,不同的特徵之間要一起組合才能生效,就好比把背景變黑之後一定要把字體變白才行。

10. 實驗設置有雜訊

還有很多我們無法預料的因素可能會影響到實驗結果,那麼怎麼辦呢? 我們不止要做AB測試,還要做AA測試,用AA測試來保證實驗設置本身沒有雜訊干擾,這個也很重要。於是在實際中你要把1/3的用戶分配給B組,1/3的用戶分配給第一個A組,1/3的用戶分配給第二個A組。

11. 忽略環境的改變

不管你的AB測試是成功了還是失敗了,在一定時間之後你都要重新審視它,因為環境變了。昨天失敗的AB測試,很可能是你的理念超前了,也許過了一年用戶就可以接受了呢?一次失敗不代表用永遠失敗,反之亦然。

12. 交叉訪問污染

當線上同時存在兩個版本的時候,你一定要考慮到單個用戶的體驗。如果一個用戶在不同瀏覽器、不同設備上訪問到了不同的版本,那麼可能會帶來用戶體驗的下降,同時對收集的數據造成干擾。 比如,如果AB版本之間的差異過於明顯,那麼老顧客可能就會很討厭那個新版本,而在新版本上表現出消極的行為,同時在老版本上表現積極的行為,而我們無法從統計結果中對這種偏差就行糾正。所以保證單個用戶體驗的一致性就很重要。

13. 漏斗污染(Funnel pollution)

不確定這個翻譯準確不準確,就直接按英文直譯了。如果你是一個電商網站,那麼你最終的目標是要用戶下單付款,你的優化目標應該是針對整個下單的全流程,並且以最終下單的數量作為度量標準。假如你在首頁做了某些活度,讓點擊產品頁面的用戶大幅度提升,有些統計數據看起來會很漂亮,但是對最終的結果可能沒有任何幫助。這個也要注意。

14. 同時運行多個AB測試

線上同時存在多個版本的話,實在是有點複雜,一般情況下不會這麼干,但仍要警惕。

15. 使用錯誤的經驗

AB實驗畢竟是一項科學實驗,所以我們要用數據說話,不能想當然。不要亂用一些道聽途說的經驗,比如:「1000個用戶樣本就夠了」,實際上收集多少用戶的數據是要嚴格計算的。上一篇文章我們分享過類似的工具。再比如,不要以為在桌面端測試通過的方案,就可以放心在手機端同時上線了,實際上不同平台的差異非常大,必須單獨進行AB測試。


總之,要記住開頭提到的AB測試成立的兩個前提,要時刻檢驗它們是否成立:

  1. A組和B組的用戶一定是要「隨機」分配。
  2. 在以你測試的時間點為中心的一定時間範圍內,用戶的行為是不變的。

如果你喜歡以上內容,歡迎到我的個人主頁關注我:Homepage