Jan Overgoor在Airbnb的博客Nerds上分享了這篇文章湖苞。通過案例講述了在利用A/B測試推動產(chǎn)品決策時(shí)應(yīng)該注意的部分問題,如:A/B測試應(yīng)該做多久台夺、在情景中去解釋A/B測試的結(jié)果、為什么應(yīng)該做A/A測試等。
為什么要做A/B測試锚烦?
測試能夠讓我們簡單而直接的進(jìn)行因果推斷。如圖1帝雇,我們一般很難只是通過簡單的觀察來了解是否行為導(dǎo)致了結(jié)果或者行為的影響力有多大涮俄。
通常外界的影響因素比產(chǎn)品本身變化對測量指標(biāo)的影響要大許多。用戶在工作日/周末尸闸、不同季節(jié)彻亲、不同天氣情況下、因?yàn)榫W(wǎng)頁廣告或主動探索觸達(dá)的產(chǎn)品都可能會表現(xiàn)出截然不同的行為模式吮廉。實(shí)驗(yàn)測試的方法能夠幫助我們控制這些額外的因素苞尝。如在下圖2中展示了一個(gè)Airbnb采用實(shí)驗(yàn)測試并最終拒絕的功能。Airbnb曾希望通過這個(gè)功能讓用戶在搜索結(jié)果中篩選產(chǎn)品的價(jià)位信息宦芦,但測試結(jié)果發(fā)現(xiàn)用戶使用這種篩選方式的頻率反而不如原有的篩選器宙址。
在Airbnb如何進(jìn)行的A/B測試
目前市場上有著許多的公司提供進(jìn)行優(yōu)秀的A/B測試工具,也有部分公司將內(nèi)部的測試系統(tǒng)開源提供給他人使用如调卑,Cloudera的Gertrude, Etsy的Feature,以及Facebook的PlanOut等抡砂。
Airbnb所提供的服務(wù)有著一定的特異性:首先,用戶不需要注冊/登錄以獲取服務(wù)恬涧,因此很難講用戶和行為捆綁在一起注益;其次,用戶在預(yù)定房間的過程中更換實(shí)驗(yàn)的設(shè)備(PC和手機(jī))溯捆;另外丑搔,預(yù)定的過程可能會長達(dá)數(shù)天,因此需要等待時(shí)間以確定用戶完成/放棄預(yù)定流程提揍;最后啤月,預(yù)定的成功還取決于空房的數(shù)量以及其主人的響應(yīng)與否,而這些因素是Airbnb所不能掌控的碳锈。綜合考慮這些因素后顽冶,Airbnb自建了用于實(shí)驗(yàn)的A/B測試系統(tǒng)。
A/B測試中通常以點(diǎn)擊率或轉(zhuǎn)化率作為評價(jià)的指標(biāo)售碳。在Airbnb强重,預(yù)定的流程同樣很復(fù)雜:首先,旅客需要搜索獲得房間的信息贸人,然后再聯(lián)系相關(guān)的房主间景;接下來,房主房主將決定是否接受旅客的需求艺智;然后倘要,旅客才能真正預(yù)約到房間。除此之外,還有其他的路徑能夠進(jìn)行預(yù)約---旅客可以不需要聯(lián)系房主就能預(yù)約某些房間封拧,或者提交預(yù)約需求后直接到達(dá)最后一步志鹃。預(yù)約流程中的四個(gè)步驟如圖3所示。盡管在測試過程中需要考慮4個(gè)階段間的轉(zhuǎn)化泽西,但Airbnb將從搜索到最后預(yù)定的整體轉(zhuǎn)化率作為測試的主要指標(biāo)曹铃。
A/B測試需要持續(xù)多久?
對于在線的A/B測試而言捧杉,普遍的疑惑在于需要進(jìn)行多長的時(shí)間來收集數(shù)據(jù)結(jié)果并由此得出結(jié)論陕见。對于使用P值作為‘終止符’的實(shí)驗(yàn)而言,應(yīng)該在實(shí)驗(yàn)進(jìn)行之前就已經(jīng)預(yù)估好了樣本量和效應(yīng)量味抖,因此可以及時(shí)停止實(shí)驗(yàn)评甜。但如果你只是持續(xù)監(jiān)測實(shí)驗(yàn)的進(jìn)程和P值的變化,那么即使在不存在顯著效應(yīng)的時(shí)候仔涩,你有也機(jī)會觀察到顯著的影響忍坷。另外一個(gè)常見的錯(cuò)誤則是因?yàn)闆]有及時(shí)觀察到顯著效應(yīng)而過早地結(jié)束測試。
下圖4中展示的是Airbnb所進(jìn)行的一次實(shí)驗(yàn)红柱。新版中將搜索界面中價(jià)格篩選工具的范圍從300改到1000美元承匣。
在圖5中展示了A/B測試隨著時(shí)間推進(jìn)的結(jié)果蓖乘。上部分的線條展示的為改版效果(新版/舊版-1)锤悄,而底部的線條為隨時(shí)間變化的p值〖问悖可以看到的是零聚,p值的曲線在7天后達(dá)到所謂的0.05的統(tǒng)計(jì)學(xué)顯著,此時(shí)的改版的效應(yīng)值為4%些侍。如果A/B測試到這里結(jié)束隶症,則可能的出的結(jié)論是新版比舊版對預(yù)約的達(dá)成有著顯著的促進(jìn)作用。但Airbnb維持了測試?yán)^續(xù)進(jìn)行岗宣,而最終可以看出測試得出的結(jié)果是新舊版篩選器對預(yù)約的達(dá)成全無影響蚂会,效應(yīng)值的變化基本可以歸為是統(tǒng)計(jì)噪音。
為什么Airbnb沒有在數(shù)據(jù)達(dá)到0.05顯著時(shí)停止A/B測試耗式?因?yàn)榫虯irbnb而言胁住,這樣在早期觀察到的顯著差異隨時(shí)間變化成為無差異的現(xiàn)象并不罕見】龋可能的原因有很多:1.預(yù)約的流程普遍會比較長彪见,所以測試早期快速完成的預(yù)約會對整個(gè)測試結(jié)果有著較大的影響;2.傳統(tǒng)的顯著值可能并不適用于現(xiàn)在動輒成千上萬的用戶測試娱挨;3.監(jiān)控測試的進(jìn)程意味著每多一次測算p值余指,也多一點(diǎn)兒收獲一個(gè)低于0.05的p值的可能。
講一些題外話跷坝,熟悉Airbnb網(wǎng)站的用戶可能會注意到它現(xiàn)在采用的正是新版的篩選器酵镜。盡管A/B測試的結(jié)果表明新版篩選器并不會提升預(yù)約的數(shù)量碉碉,但確實(shí)有部分用戶會希望有這樣的篩選器能夠更快找到高端房源,因此Airbnb決定在不損害已有數(shù)據(jù)的情況下淮韭,為這些用戶做出改變誉裆。
回到正題:一次A/B測試應(yīng)該運(yùn)行多久?為了防止二類(存?zhèn)危╁e(cuò)誤缸濒,最好的做法是能夠在測試開始前便確定好新版需要達(dá)到的最低效果足丢,并根據(jù)樣本量(每日新增用戶)和期望的顯著值計(jì)算好測試需要進(jìn)行的時(shí)間。Evan Miller就提供了這樣一個(gè)在線計(jì)算工具:點(diǎn)擊打開庇配。
還有一個(gè)問題在于斩跌,通常很難確定新版應(yīng)該要有多大的效果或者會有怎樣的效果:有可能它會帶來巨大的成功,然而由于測試時(shí)間過長而耽誤了發(fā)布以至于損失過多的利益捞慌;或者也有可能A/B測試會導(dǎo)致產(chǎn)品BUG耀鸦,則越早停止測試越好。
有時(shí)候也會碰到測試結(jié)果在預(yù)定時(shí)間之前便觸及顯著水平的情況啸澡。所以在P值之外建立一個(gè)新的測試指標(biāo)就顯得很有必要了袖订。如同前文中所述的案例,可以看到在測試首次達(dá)到顯著水平的時(shí)候嗅虏,效應(yīng)量(新/舊-1)的圖線走勢看起來并沒有完全飽和洛姑。有時(shí)候這樣的直覺思維有利于判斷某個(gè)顯著結(jié)果是否已經(jīng)穩(wěn)定下來嗎,而這樣的直覺通常需要以懷疑主義對待早期的顯著結(jié)果皮服。這就意味著楞艾,在最測試的早期采用較低的p值來判斷測試結(jié)果的顯著性,而隨著更多的數(shù)據(jù)進(jìn)入龄广,二類錯(cuò)誤的可能性開始降低硫眯,則可以隨之提高接受結(jié)果的p值。
Airbnb通過模擬測試獲得動態(tài)的P值曲線來判斷一個(gè)早期的顯著值是否值得信任择同。通過在模擬Airbnb的經(jīng)濟(jì)生態(tài)中引入各種變量以獲得不同情況下的效果量和置信度两入,并以此為依據(jù)判斷新的產(chǎn)品設(shè)計(jì)是否存在真的影響。下圖6中展示了某次模擬測試所得到的決策邊界(注意這個(gè)示例是在某些特定變量所得到的曲線敲才,并不能直接適用到其它的情況)裹纳。
對測試結(jié)果進(jìn)行情景化的解釋
A/B測試中需要避免的另一個(gè)問題是習(xí)慣性的將測試結(jié)果當(dāng)做一個(gè)整體來看待。一般而言归斤,從某個(gè)固定的測量維度來評估測試的結(jié)果是沒錯(cuò)的痊夭,這樣做通常可以避免在多個(gè)維度中挑選最符合“需要”的數(shù)據(jù)脏里,而故意忽視不符合假設(shè)的結(jié)果她我。但同樣的,只是單純的考慮一個(gè)維度也意味著脫離了情景來看待數(shù)據(jù),而有時(shí)候這些不同的情景可能完全改變你對測試結(jié)果的解釋番舆。
舉個(gè)例子來說酝碳,2013年Airbnb對搜索頁進(jìn)行了改版設(shè)計(jì)。對于Airbnb而言恨狈,搜索頁算是業(yè)務(wù)流程中最基礎(chǔ)和重要的頁面了疏哗。因此,能否準(zhǔn)確的確定改版的效果是非常關(guān)鍵的禾怠。在下圖7中可以看到搜索頁改版前后的變化:新版中更加強(qiáng)調(diào)了房源的圖片(Airbnb為房主提供專業(yè)的攝影師以獲得這些圖片)和標(biāo)記了房源所在位置的地圖返奉。
Airbnb為改版項(xiàng)目投入了許多的資源,設(shè)計(jì)人員預(yù)測新版肯定會表現(xiàn)得更好吗氏,定性的研究也表明確實(shí)如此芽偏。盡管不直接向全部用戶發(fā)布新版可能意味著大量的利益損失,但Airbnb還是延續(xù)著其‘測試文化’推進(jìn)了針對搜索頁的A/B測試以評估其真正的效果弦讽。
在等待了足夠長的時(shí)間過后污尉,A/B測試的結(jié)果反饋出新版并沒有帶來更多的預(yù)約達(dá)成。這當(dāng)然是難以接受的往产,所以Airbnb的數(shù)據(jù)分析員決定從情景出發(fā)被碗,將數(shù)據(jù)細(xì)分到不同的情景中來判斷究竟為什么改版沒有帶來足夠的效果。事實(shí)證明仿村,問題都處在Internet Explorer上了:如圖8中所示锐朴,除了來自IE的訪問以外,新版在其它主流瀏覽器上的表現(xiàn)都是優(yōu)于舊版的奠宜。在修復(fù)相關(guān)的問題后包颁,源自IE的數(shù)據(jù)也有了超出2%的增長。
除了告訴我們在做QA的時(shí)候要尤其注意IE以外压真,這個(gè)案例也強(qiáng)調(diào)了從多個(gè)維度對測試結(jié)果進(jìn)行解釋的價(jià)值。你可以根據(jù)瀏覽器蘑险、國家滴肿、用戶類型等多個(gè)維度分解數(shù)據(jù)來源進(jìn)行分析。但需要注意的是佃迄,不要為了找到‘顯著’的結(jié)果而刻意去分解數(shù)據(jù)泼差。
為什么要做A/A測試?
最后呵俏,在A/B測試中人們常犯的一個(gè)錯(cuò)誤在于自以為測試在理想的狀態(tài)中進(jìn)行堆缘。不論是使用自建的還是第三方測試系統(tǒng),都應(yīng)該盡量避免這種想法:測試系統(tǒng)很可能反應(yīng)的并不是完全的真實(shí)普碎。導(dǎo)致這些差異的原因可能是測試系統(tǒng)本身的問題或是你沒有正確地使用它吼肥。避免這種錯(cuò)誤的方法就是:當(dāng)你看到某個(gè)特別理想的結(jié)果的時(shí)候,假設(shè)它是有問題的,然后通過排除其他可能的原因來證明它是準(zhǔn)確的缀皱。
A/A測試就是用于這些檢測的簡便方法:A組和B組使用相同的產(chǎn)品版本斗这,如果二者的結(jié)果表現(xiàn)出顯著差異則意味著A/B測試的結(jié)果差異是由于A/B組自身而不是產(chǎn)品的差異所導(dǎo)致的。如圖9所示啤斗,如果測試系統(tǒng)是正常/使用正確的表箭,那么A/A測試通常會反饋出無差異的結(jié)果(當(dāng)然如果將數(shù)據(jù)分解到不同的維度來檢測,則你總會在某個(gè)維度上看到一些顯著的結(jié)果)钮莲。
Airbnb通過不斷的A/A測試來針對自建測試系統(tǒng)的潛在問題免钻。在某次測試中,Airbnb檢測了A/B組間樣本量差異的影響崔拥。圖10中列出了在全部用戶間取不同比例作為A/A測試的兩組間所得到的實(shí)驗(yàn)結(jié)果伯襟。可以看到當(dāng)兩組的樣本量相同的時(shí)候握童,測試的結(jié)果反饋出無顯著差異姆怪;而當(dāng)兩組的樣本量存在明顯先差異(25/75)的時(shí)候,測試反饋了顯著的結(jié)果澡绩。Airbnb檢測了這一結(jié)果的原因稽揭,發(fā)現(xiàn)這與其測試系統(tǒng)對未登錄用戶的分組有關(guān)。盡管這一錯(cuò)誤是Airbnb自建的測試系統(tǒng)所特有的肥卡,但這個(gè)案例也表明了A/A測試的重要性和價(jià)值溪掀。
總結(jié)
嚴(yán)格控制的實(shí)驗(yàn)是產(chǎn)品研發(fā)過程中強(qiáng)有力的決策工具。希望這篇文章能夠幫助大家更有效地進(jìn)行A/B測試步鉴。
首先揪胃,確定測試運(yùn)行時(shí)間的最好方式是提前計(jì)算好預(yù)期的顯著值所需要的樣本量。如果測試在早期就反饋了理想的結(jié)果氛琢,最好是帶著懷疑的態(tài)度等待測試運(yùn)行結(jié)束喊递。靈活的利用p值將有利于進(jìn)行產(chǎn)品決策:在早期采用較低的p值(如0.01),然后隨著測試的進(jìn)行而逐漸提高p值(如0.05)阳似。
第二骚勘,從不同的情景中去理解測試的結(jié)果是非常重要的。你應(yīng)該嘗試將數(shù)據(jù)分解到不同的維度撮奏,然后再去理解不同維度下產(chǎn)品的效果俏讹。但是需要注意的是,A/B測試的目的在于為了優(yōu)化產(chǎn)品決策畜吊,而不是為了最優(yōu)化測試結(jié)果泽疆。優(yōu)化測試結(jié)果通常導(dǎo)致為了獲得一定短期利益的機(jī)會主義決策。
最后玲献,驗(yàn)證你所使用的測試系統(tǒng)是否如你所期望的一樣工作殉疼。如果A/B測試反饋的結(jié)果有問題或者是過于理想梯浪,你都應(yīng)該仔細(xì)核驗(yàn)它。最簡單的方式就是進(jìn)行一次A/A測試株依,重復(fù)進(jìn)行A/A測試有利于了解測試系統(tǒng)的工作原理驱证,并幫助對數(shù)據(jù)結(jié)果進(jìn)行更全面的解釋。
PS. Jan Overgoor在原文中更多的使用的是‘Experiment(即恋腕,實(shí)驗(yàn))’這個(gè)名詞抹锄。在翻譯過程中統(tǒng)一以‘A/B測試’來表述。
拓展閱讀
Airbnb的另一名數(shù)據(jù)專家Bar Ifrach詳細(xì)描寫了他們?nèi)绾瓮ㄟ^機(jī)器學(xué)習(xí)預(yù)測(個(gè)性化的搜索結(jié)果展示)房主和旅客的偏好來提高預(yù)約的達(dá)成率:How Airbnb uses machine learning to detect host preferences荠藤?