天天看點

滬江ABTest測試平台實踐

作者:閃念基因

背景

随着滬江業務的高速發展,越來越多的産品營運開始關注資料驅動的精細化營運方法,期望通過精細化營運在一片紅海中持續獲得确定的使用者增長、訂單轉化與收益,而 A/B 測試就是一種有效的精細化營運手段。

設計思路

要認識實驗平台,首先要了解實驗兩個要素:

  1. 流量:流量即使用者的通路,也是實驗的樣本來源。
  2. 參數:或者稱作實驗變量,一個實驗可能有多種政策或者模型需要線上上進行比較,這些政策或者模型就稱作實驗參數。

為了更快的疊代産品,通常産品或營運會要求同一時間做N個實驗,想要同一份流量不同實驗之間互不幹擾,每個實驗都能得到100%流量。針對此,我們設計的實驗平台分層模型借鑒了Google的論文《重疊實驗:更多,更好,更快》,Overlapping Experiment Infrastructure:More, Better, Faster Experimentation。

  • 更多:我們需要能同時進行多個實驗的可擴充性。但也需要考慮靈活性:不同的實驗需要不同的配置和不同的流量來衡量實驗的統計意義上的效果顯著性。有些實驗隻需要修改流量的一個子集,比如隻是日語的流量,并需要取一個合理的流量規模。
  • 更好:不合理的實驗是不應該讓它線上上流量進行的。名額資料不好的實驗應該能很快的被捕獲并且停止它的進行。
  • 更快:能夠很容易并且很快地建立一個實驗。容易到非工程師不需要寫代碼就可以建立一個實驗。評價名額應該很快的被統計出來,以便決策。另外,實驗系統不僅支援實驗,并且可以快速縮量和擴量。更快同時也展現在實驗結果的顯著性能更快的呈現,這時候我們就需要充分的樣本。

為了實作同時做更多的實驗以及實作流量複用,我們經過考量,采用如下的分層模型:

滬江ABTest測試平台實踐

關于分層模型有三個關鍵的概念:

  • 域(domain)是指流量的一個劃分,流量進來首先是劃分域。
  • 層(layer)是指系統參數的一個子集。
  • 實驗(experiment)是由多個政策參數構成的,最終使用者隻會命中其中之一的過程。

上述分層模型先将流量分為兩個域,一個域隻有一個單一層(非重疊域),和一個有三個層的重疊域,在這種情況下,每個請求會分到非重疊域或是重疊域。請求隻能在非重疊域或重疊域其中之一。

如果請求在重疊域,那麼請求最多在一個實驗中(這個實驗可以改變參數集合中的任意參數的值),如果請求在重疊域,那麼請求最多在三個實驗中,每層一個實驗。流量在每一層都會被重新打散。并且對于每個實驗,隻能使用對應層的參數。

該分層模型的主要思想為:

  • 同一實驗的政策參數位于同一層;
  • 互相獨立的政策參數分屬于不同的實驗層;
  • 不同實驗層間進行獨立的流量劃分和獨立的實驗,互不影響。

上述重疊域是一個三層實驗,第一層UI Layer有三個實驗參數,Red、Blue、Green。當在實驗平台配置配置好參數及其流量後,我們會按總計100桶配置設定給三個參數各自的bucket區間,比如 Red、Blue、Green 分别流量配置為 80%,10%,10%,那麼各自對應的是bucket區間分别是 0-79, 80-89, 90-99。後面的 Search Results Layer、 Ads Results Layer依次類推。

當流量進來後,實驗分流服務會根據不同終端采用不同的使用者辨別id來hash分流,web端采用 cookieId ,app端采用裝置id,小程式端采用 openID 作為唯一辨別符。具體進行流量劃分時,為了實作實驗層之間流量劃分的正交性,會将流量辨別資訊和實驗層辨別一起進行實驗流量 bucket 劃分, 實驗層辨別 salt 稱為離散因子。如基于使用者辨別(uid)的流量劃分:

滬江ABTest測試平台實踐

當然,為了便于内測等,我們也實作了白名單功能,營運或者産品可以通過背景配置某使用者命中某個特定的實驗參數。

在實際線上運作ab測試的時候,我們經常需要針對某個實驗參數做流量的擴量或者縮量,比如三個實驗參數A、B、C,線上資料發現A的名額相對最好,我們會逐漸的針對C擴量,其他做相應的縮量。

假設有三個實驗參數A、B、C,假設總 bucket size 為100,A、B、C初始流量為:80%,10%,10%。假設 C 擴張 10% 的流量至 20%,有一種可能,切換之後流量分布如下表:

實驗變量 A B C
切換前bucket區間 0-79 80-89 90-99
切換後bucket區間 0-74 75-79 80-99

切換之後實際上A,B和C覆寫的使用者人群都發生了變化,A、B分别減少了 5%,其實更佳的擴縮量方案是:B流量不變,C從A切換 10% 流量過去,這樣可以盡量減少對覆寫使用者人群參與實驗的變化,進而保證明驗資料更加科學。針對此,我們設計一套算法在調整流量時可以做到盡量保證更小的變動,盡可能挪動更小的使用者群體。

實驗平台架構

目前滬江實驗平台主要包括以下 4 個功能子產品:

  • 實驗管理:允許使用者對實驗進行配置和管理。
  • 流量管理:對實驗參數配置設定流量配置。
  • 資料收集:用戶端上報資料,最終落到BI部門Hadoop叢集
  • 資料分析:對上報的資料進行分析以及計算置信區間等,最後通過報表的形式進行展示。

整體架構大緻如下:

滬江ABTest測試平台實踐
  1. 産品或者開發通過AB實驗控制台配置實驗方案及流量配置設定,配置同時入庫
  2. AB分流服務啟動時初始化從DB拉取實驗配置加載入記憶體,如實驗配置發生變更,AB分流服務将定時拉取DB中配置資訊
  3. 業務方請求AB分流服務擷取分流政策
  4. 業務方上報打點資料給BI
  5. AB報表平台讀取BI離線或者實時統計的資料名額并做P值檢驗和置信區間計算

實驗名額

我們現在已經覆寫滬江常用的名額,訂單轉化、留存(次日留存、三日留存、七日留存等)、點選轉化率等核心名額。這些名額隻需要在實驗平台背景配置一下(如下圖所示),T+1日就會自動生成名額報告。

實驗名額配置示例如下:

滬江ABTest測試平台實踐

某業務留存資料示例如下:

滬江ABTest測試平台實踐

實驗名額我們不僅給出了均值與每日走勢,針對兩個版本或者多個版本,我們也給出了與對照版本的置信區間和置信度。那麼到底什麼是置信區間呢?這其實關系到實驗資料的科學性。

實驗科學性

假設某業務算法優化的 AB Test 的點選資料如下:

實驗變量 點選率 UV
algo1 0.35 230111
algo2 0.34 229136

純粹從數字上看,algo1算法的點選率是0.35,algo2的點選率是0.34。是不是就意味着algo1的效果就好于algo2呢,這并不一定,實驗是抽樣進行的,樣本量大小和某些偶然因素,比如某天的資料algo1遠高于algo2,導緻均值比algo2略高。是以我們需要一套科學的統計手段來比較兩個版本孰優孰劣。我們現在采用的是P值檢驗和置信區間來判斷方案的優劣。

P-value(P值檢驗)

首先要了解P 值檢驗,我們首先需要了解下假設實驗,在實驗驗過程中存在2個假設。

  • 原假設:我們希望通過實驗結果推翻的假設,如兩個版本沒有明顯差異
  • 備擇假設:我們希望通過實驗結果驗證的假設,如兩個版本有明顯差異

P 值檢驗就是在零假設成立的條件下,獲得和觀察到的資料一緻,或者更加極端情況的機率。p值越小,說明原假設越不成立,因為機率太小了。假設 P 值 0.04, 那麼意味着如果原假設為真,我們通過抽樣得到觀察到的樣本資料的可能性隻有 4%,這時我們有理由推翻原假設,選擇備擇假設。

通常情況下,在統計學上有一個機率值 α ,也稱為顯著性水準,當 P 值小于 α ,即可以推翻原假設,選擇備擇假設。α 可以選擇為 0.05,0.1等。我們選擇的是比較常用的 0.05 。

根據中心極限定理,在樣本量達到一定量時,大量互相獨立随機變量的均值經适當标準化後分布收斂于正态分布:

滬江ABTest測試平台實踐

由于樣本量大,我們可以采用Z檢驗。另外,對于較小的樣本集合,我們可以依賴于T檢驗。通常我們通過Z值推導P值,AB測試計算Z值的計算公式為:

滬江ABTest測試平台實踐

計算出Z值我們可以根據正态分布Z值表查詢到對應的P值。

置信區間

置信區間概念

置信區間(Confidence Interval)是用來對一個機率樣本的總體參數進行區間估計的樣本均值範圍,它展現了這個均值範圍包含總體參數的機率,這個機率稱為置信水準。

置信水準代表了估計的可靠度,一般而言,我們采用 95% 的置信水準進行區間估計。

置信區間在A/B測試中的意義

在實驗運作一段時間之後,如果置信區間的上下限同為正,說明實驗結果是統計顯著的,并且實驗版本優于對照版本;如果同為負,實驗結果也是統計顯著的,但是實驗版本劣于對照版本;如果置信區間為一正一負,則說明版本間差異不大。

在上圖中,從我們針對公司某款小程式産品做關于做題對使用者留存率影響的ab資料名額看,不做題的置信區間是【-55.78%,-8.97%】。這個資料說明: 不做題版本不如做題版本,并且有95%的可能性是差了55.78%到8.97%之間。

置信區間的計算方法

由前面計算得出的Z 值,再根據兩個總體的均值、标準差和樣本大小,利用以下公式即可求出兩個總體均值差的95%置信區間。

由前面計算得出的Z值,再根據兩個總體的均值、标準差和樣本大小,利用以下公式即可求出兩個總體均值差的95%置信區間。

滬江ABTest測試平台實踐

從公式看,如果要縮小置信區間的範圍,可以通過加大樣本量來做AB Test。

總結

  1. ABTest 重在比對不同方案的名額資料,在不同方案的設計上也需要有明确的産品思路差異。
  2. 在名額跟蹤上,也需要設計核心明确的名額來跟蹤。
  3. 在資料采集上盡量針對每個環節設計好完善的埋點機制,便于後續分析新老版本的差異。

參考資料

  • 分層實驗平台基石 Google論文:https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/36500.pdf
  • 線上AB置信區間計算:https://abtestguide.com/calc/
  • 置信區間:https://onlinecourses.science.psu.edu/statprogram/reviewofbasic_statistics/
  • P值檢驗:https://www.statsdirect.com/help/basics/p_values.htm

作者:張麗斌

來源-微信公衆号:滬江技術

出處:https://mp.weixin.qq.com/s/FjuUHg7YMdWUIoc4sp2TWA

繼續閱讀