本人微信公眾號(hào)為“推薦算法學(xué)習(xí)筆記”曾我,定期推出經(jīng)典推薦算法文章,歡迎關(guān)注健民。
我們知道互聯(lián)網(wǎng)公司經(jīng)常要上線(xiàn)各種各樣的實(shí)驗(yàn)抒巢,例如修改UI界面的某個(gè)按鈕,上線(xiàn)一個(gè)新的算法等等秉犹。通過(guò)實(shí)驗(yàn)的對(duì)比指標(biāo)來(lái)衡量這些修改對(duì)用戶(hù)的影響程度蛉谜,以此來(lái)提高用戶(hù)體驗(yàn),提高公司收益等等崇堵。本文主要參考google經(jīng)典論文《Overlapping Experiment Infrastructure:
More, Better, Faster Experimentation》第4部分型诚,闡述谷歌等大廠都是如何高效地做ab實(shí)驗(yàn)的。
一. 可能想到的實(shí)驗(yàn)方案
方案1)將用戶(hù)分成兩半鸳劳,一半做對(duì)照組狰贯,一半做實(shí)驗(yàn)組
缺點(diǎn):一次只能做一個(gè)實(shí)驗(yàn),假如想要同時(shí)做兩個(gè)實(shí)驗(yàn)赏廓,將無(wú)法滿(mǎn)足
方案2)將用戶(hù)分桶涵紊,例如通過(guò)用戶(hù)ID取模分成1000個(gè)桶,一些桶做基線(xiàn)幔摸,一些桶做實(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è)用戶(hù)請(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è)用戶(hù)請(qǐng)求只能進(jìn)行一個(gè)實(shí)驗(yàn)衰齐,那假如一個(gè)用戶(hù)請(qǐng)求我們同時(shí)進(jìn)行N個(gè)實(shí)驗(yàn)?zāi)兀咳绻粋€(gè)用戶(hù)請(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的用戶(hù)像洗牌一樣重新打散墨辛,均勻地分布在實(shí)驗(yàn)2里面卓研,就可以消除實(shí)驗(yàn)1對(duì)實(shí)驗(yàn)2的影響。同時(shí)睹簇,每個(gè)用戶(hù)請(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的用戶(hù)均勻地分布到實(shí)驗(yàn)2呢?答案就是在hash的時(shí)候加一個(gè)前綴凿渊。例如通過(guò)使用函數(shù)?hash(實(shí)驗(yàn)ID+用戶(hù)ID)%1000梁只,將(實(shí)驗(yàn)1的ID+用戶(hù)ID)取模1000后小于200的用戶(hù)的按鈕顏色設(shè)置為紅色,大于等于200的設(shè)置為藍(lán)色埃脏,同時(shí)搪锣,將(實(shí)驗(yàn)2的ID+用戶(hù)ID)取模1000后小于500的用戶(hù)背景設(shè)置為白色,大于等于500的用戶(hù)背景設(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è)圖為例惫撰,假如用戶(hù)流量是從上往下流進(jìn)來(lái)的
在(a)中羔沙,只有1個(gè)domain,domain里面嵌套了3個(gè)layer厨钻。當(dāng)用戶(hù)請(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è)用戶(hù)請(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)用戶(hù)請(qǐng)求被分配到domain1的時(shí)候涂佃,最多將會(huì)進(jìn)行1個(gè)實(shí)驗(yàn)励翼,當(dāng)用戶(hù)請(qǐng)求被分配到domain2的時(shí)候,用戶(hù)最多將會(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)注围辙。