本人微信公眾號(hào)為“推薦算法學(xué)習(xí)筆記”,定期推出經(jīng)典推薦算法文章,歡迎關(guān)注。
我們知道互聯(lián)網(wǎng)公司經(jīng)常要上線各種各樣的實(shí)驗(yàn),例如修改UI界面的某個(gè)按鈕,上線一個(gè)新的算法等等。通過(guò)實(shí)驗(yàn)的對(duì)比指標(biāo)來(lái)衡量這些修改對(duì)用戶的影響程度,以此來(lái)提高用戶體驗(yàn),提高公司收益等等。本文主要參考google經(jīng)典論文《Overlapping Experiment Infrastructure:
More, Better, Faster Experimentation》第4部分,闡述谷歌等大廠都是如何高效地做ab實(shí)驗(yàn)的。
一. 可能想到的實(shí)驗(yàn)方案
方案1)將用戶分成兩半,一半做對(duì)照組,一半做實(shí)驗(yàn)組
缺點(diǎn):一次只能做一個(gè)實(shí)驗(yàn),假如想要同時(shí)做兩個(gè)實(shí)驗(yàn),將無(wú)法滿足
方案2)將用戶分桶,例如通過(guò)用戶ID取模分成1000個(gè)桶,一些桶做基線,一些桶做實(shí)驗(yàn)
缺點(diǎn):如果桶分的太少,同一時(shí)間可以做的實(shí)驗(yàn)還是受到限制。如果桶分的太多,每個(gè)實(shí)驗(yàn)桶的流量將會(huì)變少,置信度將會(huì)降低,需要更長(zhǎng)的實(shí)驗(yàn)時(shí)間。
同時(shí),假如我們的實(shí)驗(yàn)涉及到多個(gè)系統(tǒng)服務(wù),這些系統(tǒng)服務(wù)之間是有關(guān)聯(lián)的。以一個(gè)新聞推薦系統(tǒng)為例,我們知道,當(dāng)系統(tǒng)接受到一個(gè)用戶請(qǐng)求的時(shí)候,首先會(huì)去召回系統(tǒng)里面取出候選的新聞,然后再將這些候選的新聞發(fā)送到精排系統(tǒng)進(jìn)行排序,假如召回系統(tǒng)和精排系統(tǒng)同時(shí)在做ab實(shí)驗(yàn),怎么消除這兩個(gè)系統(tǒng)的相互影響?

二. 正交實(shí)驗(yàn)
可以看到上述方案的缺點(diǎn)是一個(gè)用戶請(qǐng)求只能進(jìn)行一個(gè)實(shí)驗(yàn),那假如一個(gè)用戶請(qǐng)求我們同時(shí)進(jìn)行N個(gè)實(shí)驗(yàn)?zāi)??如果一個(gè)用戶請(qǐng)求同時(shí)進(jìn)行N個(gè)實(shí)驗(yàn),我們?cè)趺磁懦@些實(shí)驗(yàn)之間相互干擾?答案就是使用正交實(shí)驗(yàn)
假如我們要做一個(gè)關(guān)于UI界面的實(shí)驗(yàn)。實(shí)驗(yàn)1為將按鈕的顏色設(shè)置為紅色(20%流量)和藍(lán)色(80%流量),實(shí)驗(yàn)2將頁(yè)面背景設(shè)置為白色(50%流量)或黑色(50%流量),正交實(shí)驗(yàn)如下圖所示

可以看到,我們只要將實(shí)驗(yàn)1的用戶像洗牌一樣重新打散,均勻地分布在實(shí)驗(yàn)2里面,就可以消除實(shí)驗(yàn)1對(duì)實(shí)驗(yàn)2的影響。同時(shí),每個(gè)用戶請(qǐng)求是同時(shí)進(jìn)行進(jìn)行2個(gè)實(shí)驗(yàn)的(按鈕為紅/藍(lán),背景白色/黑色)。利用正交實(shí)驗(yàn),我們的每個(gè)實(shí)驗(yàn)都可以利用到全部的流量。
那么我們?cè)趺磳?shí)驗(yàn)1的用戶均勻地分布到實(shí)驗(yàn)2呢?答案就是在hash的時(shí)候加一個(gè)前綴。例如通過(guò)使用函數(shù)?hash(實(shí)驗(yàn)ID+用戶ID)%1000,將(實(shí)驗(yàn)1的ID+用戶ID)取模1000后小于200的用戶的按鈕顏色設(shè)置為紅色,大于等于200的設(shè)置為藍(lán)色,同時(shí),將(實(shí)驗(yàn)2的ID+用戶ID)取模1000后小于500的用戶背景設(shè)置為白色,大于等于500的用戶背景設(shè)置為黑色即可。這就是正交實(shí)驗(yàn)。
三. 谷歌分層重疊實(shí)驗(yàn)框架
在正交實(shí)驗(yàn)的基礎(chǔ)上,通過(guò)對(duì)流量的切割,以及分層重疊嵌套,便可設(shè)計(jì)出更為靈活的AB實(shí)驗(yàn)框架。
首先介紹3個(gè)概念
1) domain:全部流量被切割之后的一段流量
2)layer:在layer里面包含一系列可以改變的參數(shù)。例如上面的實(shí)驗(yàn)可以分成2個(gè)layer,layer1對(duì)應(yīng)實(shí)驗(yàn)1,layer2對(duì)應(yīng)實(shí)驗(yàn)2。
3)experiment:在layer里面可以添加桶,例如通過(guò)?hash(layerId + userId)%1000?, 然后把實(shí)驗(yàn)放入桶中。
1個(gè)domain可以有多個(gè)重疊的layer,1個(gè)layer反過(guò)來(lái)也可以嵌套多個(gè)domain,實(shí)驗(yàn)最終落入到layer里面的bucket里面。
以下面兩個(gè)圖為例,假如用戶流量是從上往下流進(jìn)來(lái)的

在(a)中,只有1個(gè)domain,domain里面嵌套了3個(gè)layer。當(dāng)用戶請(qǐng)求過(guò)來(lái)的時(shí)候,會(huì)依次經(jīng)過(guò)UI Layer,Search results layer和Ads result layer,在各個(gè)layer里面通過(guò)?hash(layerId + userId)%1000?映射到對(duì)應(yīng)的桶取出相應(yīng)的experiment。因此1個(gè)用戶請(qǐng)求最多會(huì)同時(shí)進(jìn)行3個(gè)實(shí)驗(yàn)
在(b)中,流量被切割成2個(gè)domain,1個(gè)domain只有1個(gè)layer,另一個(gè)domain有3個(gè)layer。當(dāng)用戶請(qǐng)求被分配到domain1的時(shí)候,最多將會(huì)進(jìn)行1個(gè)實(shí)驗(yàn),當(dāng)用戶請(qǐng)求被分配到domain2的時(shí)候,用戶最多將會(huì)進(jìn)行3個(gè)實(shí)驗(yàn)。
利用這個(gè)思想,我們便可以設(shè)計(jì)更為復(fù)雜靈活的AB實(shí)驗(yàn)框架,如下圖所示

值得注意的是,各個(gè)layer之間的實(shí)驗(yàn)是要獨(dú)立的。例如layer1中的實(shí)驗(yàn)是設(shè)置按鈕為白色和黑色,layer3的實(shí)驗(yàn)是設(shè)置按鈕為白色和紅色,這樣的兩個(gè)layer之間就不是獨(dú)立的了,那么正交性就會(huì)遭到破壞。需要特別注意這一點(diǎn)。
四. 總結(jié)
以上便是本文所有內(nèi)容,更多具體細(xì)節(jié)可查看論文《Overlapping Experiment Infrastructure:More, Better, Faster Experimentation》。如果有問(wèn)題或錯(cuò)誤,歡迎隨時(shí)聯(lián)系~
本人微信公眾號(hào)為“推薦算法學(xué)習(xí)筆記”,定期推出經(jīng)典推薦算法文章,歡迎關(guān)注。