科技公司努力作出數據驅動的產品決策的趨勢下,Lyft 也不能免俗。 正由於如此,在線實驗,或者說 a / b 測試,變得無處不在。 AB測試太火了,以致於你可能會認爲它是一個徹底解決的問題。 在這篇文章中,咱們將解釋爲何實際狀況相去甚遠,在 Lyft 的拼車市場同樣,系統是根據網絡動態發展的。 正如咱們將看到的,天真地將用戶劃分爲實驗組和控制組可能會影響您所關心的效果估計。git
在實驗結束後要求[數據科學家]對結果進行分析。 [她]也許能說出這個實驗失敗的緣由。— paraphrasing R. A. Fisher, 1938.github
簡單地說,Fisher 的意思是,實驗設計很重要。以致於一個粗心的實驗設計有時會致使沒法回答感興趣的問題的數據。segmentfault
想象一下,以下圖所示,整個 Lyft 網絡被微小的正方形區域所封裝。 當用戶 a 和 b 打開 Lyft 應用程序(大約在同一時間) ,附近只有一個驅動程序可用。 咱們稱這種狀況爲供應不足。微信
圖1. 典型的供應不足狀況: 兩名乘客和一名可用司機。 在這個例子中,兩位乘客均可能接觸到峯時價格網絡
在這種狀況下,Lyft 有時會採用峯時訂價來維持駕駛員的可用性。 峯時訂價是以百分比表示的價格附加費,根據供應不足的程度(+ 25% ,+ 50% 等)能夠有不一樣的價值。 爲了簡單起見,在這個例子中咱們假設峯時訂價是二進制的 -- 要麼有(在某個固定值) ,要麼沒有。 咱們還假設峯時訂價的供給效應發生在一個比需求效應更慢的時間尺度上,所以咱們能夠忽略它們。 換句話說,乘客對峯時訂價的反應比司機快。框架
假設咱們想要評估 Lyft 補貼峯時訂價的效果,即表明乘客支付峯時訂價,甚至不向乘客展現。 咱們將在隨後的圖片中用綠色標記表示得到補貼的乘客。ide
這裏有一個有趣的比喻是關於兩個平行宇宙的。 咱們感興趣的是現實世界和非現實世界之間的區別,前者是用戶在供不該求的狀況下得到峯時訂價,後者是 Lyft 補貼峯時訂價。 這兩個宇宙以下圖所示。 請注意,若是沒有任何干預,咱們只能觀察到總體狀況,咱們稱之爲全局控制。 另外一方面,全局性的施策至關於對全部乘客給予峯時訂價補貼。測試
圖2 事實和反事實的宇宙。 在現實生活中(上圖) ,兩個用戶都體驗黃金時間。 此場景也稱爲全局控制。 在下面的圖片中,兩個用戶都獲得了峯時訂價補貼——全局施策。 咱們不能同時觀察這兩個平行的現實,而且在沒有一些干預的狀況下觀察全局控制。優化
假設核心指標是平均完成單量(或指望完成)。 咱們想知道這個數字在兩個平行宇宙之間是如何變化的。 讓咱們假設一個簡單的機率模型來簡化這個例子。 具體來講:spa
在全局控制狀況下,乘客 a 和 b 的平均乘坐次數爲0.75。 爲了找到緣由且不失通常性,假設乘客 a 在乘客 b 出現前幾秒打開應用程序,隨後半程加入,儘管看到峯時訂價,用戶 a 也將發生一個訂單,乘坐次數是1。 另外一種狀況,用戶 a 將選擇不發起請求,那麼用戶 b 將取而代之完成一個訂單。 不然,兩個用戶都會拒絕峯時訂價,而且不會使用任何訂單。根據對稱性,若是 b 先打開,狀況也是如此。 所以,指望是
在全局施策下,兩位乘客都沒有看到峯時訂價,此時狀況要簡單得多。 第一個打開應用程序的用戶會自動乘坐,第二個用戶就不太走運了。 既然老是乘坐單程車,那麼1也是一種指望。 比較這兩個宇宙,咱們看到全局平均實驗效應,也就是咱們想要估計的基本事實,是由
在咱們的簡單模型中,補貼峯時訂價致使了1 / 3的訂單增長。這種實驗效果在現實生活中固然是沒法觀察到的。 所以,咱們必須找到一些方法來估計它。
A / b 測試干預(如補貼峯時訂價)的標準方法是將用戶(在本例中是乘客)隨機分配到實驗組或控制組,例如將他們的用戶 id 散列到桶中。 在咱們的例子中,這種隨機化的平均結果是,一個用戶看到峯時訂價,而另外一個用戶看不到--以下圖所示。 這個場景對應於第三個(相互排斥的)平行宇宙!
圖3. 隨機用戶實驗的一種實現方法。 在這個例子中,用戶 a 在控制組中(隱藏峯時訂價) ,用戶 b 在實驗組中(峯時訂價補貼)
爲了評估這種處理方式對於像這樣的隨機用戶實驗對核心指標的影響,人們一般會作如下操做:
讓咱們看看當咱們把這個邏輯應用到咱們的簡單示例時會發生什麼。 記住,每一個用戶有50% 的機會先打開應用程序。 讓咱們首先考慮用戶 b,他碰巧在實驗組中(補貼峯時訂價)。 在咱們的簡單模型中,若是她先打開應用程序,她保證會要求並完成一個訂單。 另外一方面,若是她打開應用程序第二,她將完成一個訂單當且僅當用戶 a 決定不要求。 這種狀況也有50% 的可能性發生,因此假設用戶 a 首先打開應用程序,用戶 b 但願乘坐半程。 綜合全部這些,用戶 b 的預期完單次數是
對於用戶 A 來講,狀況就更簡單了。 若是用戶 B 先打開應用程序,用戶 A 就不能乘車,所以在這種狀況下,預期值是0。 咱們知道,用戶 A,誰看到峯時訂價,在有司機條件下將要求中途上車。 所以,A 預計完成的訂單數量爲
如今讓咱們計算一下因爲峯時訂價補貼而帶來的核心指標增量有多少。
顯然,這比咱們上面計算的33% 的真實效果大得多 -- 咱們高估了峯時訂價補貼的效果6倍! 誠然,兩個用戶並非不少,因此您可能認爲這個虛構的 A/B 測試存在樣本量小的問題。 固然,一個用戶實際上不能乘坐0.25次。 可是想象一下,真正的 Lyft 網絡是由這個兩人仿真衍生而成的,它們都是隨着時間的推移獨立進化的,以一個固定的速率爲司機和乘客提供補給。 咱們能夠構造一個更大規模的例子,在大量相似用例上面計算仍然適用。
上面例子中發生的狀況是因爲一種稱爲 干擾(interference) 的統計現象(不要與推斷混淆)。 爲了正肯定義它,咱們首先必須引入 潛在結果 的概念。 潛在結果背後的想法很簡單: 每個 實驗單位 (例如用戶)走來走去都帶着兩張紙,一張在後面的口袋裏。 在其中一張紙中寫道,被分配到對照組。 另外一張紙上標記分配到實驗組。 這兩張紙合在一塊兒,就是一個單位的潛在結果ーー若是她參加實驗,這些事情就可能發生在她身上。 一般,單元分配給一個實驗組被認爲是肯定性且惟一隨機的。
因果推理的一個關鍵假設是,寫在這兩張紙上的內容不受實驗單元碰巧獲得的實驗任務和實驗中其餘單元的任務的影響。 當 a 單元的分組分配改變 b 單元的任何潛在結果時,就會發生干擾。 這正是咱們在上面的樣例中看到的狀況,其結果是乘坐是否完成。 當用戶 a 的峯時獲得補貼時,用戶 b 不太可能完成乘車(無論用戶 b 的峯時是否也獲得補貼)。
在醫學統計學中,干擾的概念出如今傳染病疫苗的研究中。 疫苗對一個受試者結果的有效性取決於在他的社交圈中有多少其餘人也接種了疫苗。 換句話說,一個實驗對象的治療能夠給其餘可能未經治療的實驗對象提供保護做用。 結果是,實驗組和未實驗組之間的測量差別(歸因於疫苗的好處)將會縮小。 上圖中,用戶 a 的峯時是對用戶 b 成功完成 Lyft 旅程的傾向的「保護」——在這種狀況下,這致使了對真實效果的誇大。 一般,干涉誤差能夠發生在任何一個方向上。
Lyft 並非惟一一家試圖在 a / b 測試中減小統計干擾的科技公司。Google和eBay 的研究人員在廣告商或用戶在網上拍賣中互動的應用程序中觀察到了一樣的現象。 粗糙的隨機化,好比說在拍賣層面,能夠幫助(但不是徹底)減輕這種偏見。 eBay 的例子特別適合咱們的樣例,由於做者描述的干擾偏見相對於供應和需求彈性。 干擾問題也出如今社交網絡的實驗中,用戶對治療的反應可能會污染圖中的鄰近節點。 對於相對靜態的網絡,這個問題已經取得了一些進展,其中圖聚類起着核心做用。 讓咱們的世界變得複雜的是,Lyft 網絡是雙面的(乘客和司機) ,它的圖形結構具備難以置信的動態性。 所以,干擾很難明確地建模。
隨機化用戶確定不是在拼車市場上構建在線實驗的惟一方式。 你能夠選擇隨機化應用程序會話,從方塊到整個城市的空間單位,甚至時間間隔。 這些實驗單位越粗糙,在你的效果估計中對干涉偏見的保護就越強。 然而,成本增長了估計量的方差,由於粗糙的單位天然少於精細的單位(方差比例是樣本容量的一倍) ,有時也是不均勻的。 這個成本多是巨大的。 儘管如此,在全局控制和全局實驗配置之間的交替時間間隔對於 Lyft Marketplace 團隊在實驗早期是一個成功的策略。 下表將這些不一樣的隨機化方案置於誤差-方差折衷的連續體上。
表一 實驗單元的不一樣選擇對應於誤差-方差折衷譜的不一樣點。 在網絡實驗中,誤差來源於干擾效應,方差來源於單元集基數的減小,以及單元間的異質性
然而,要嚴格量化這些權衡,須要仔細的模擬研究。 在咱們開始這項冒險以前,咱們須要描述 Lyft 數據科學團隊設計和構建的精細的仿真框架。 幸運的是,這正是咱們下一篇博客文章的主題,第2部分: 模擬乘車共享市場。 敬請期待!
你對試驗設計,市場優化,或數據科學感興趣嗎? Lyft 持續招聘中! 郵件至 chamandy@lyft.com.
原文做者: Nicholas Chamandy 譯者: Harry Zhu 英文原文地址:
https://eng.lyft.com/experime...做爲分享主義者(sharism),本人全部互聯網發佈的圖文均聽從CC版權,轉載請保留做者信息並註明做者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,若是涉及源代碼請註明GitHub地址:https://github.com/harryprince。微信號: harryzhustudio商業使用請聯繫做者。