Etsy使用交錯新演算法實現更快的ML實驗
線上實驗在產品開發中起著核心作用。Etsy 寫了它如何使用交錯實驗測試來捕捉使用者在個人層面的偏好。
在Etsy,我們的產品和機器學習 (ML) 團隊一直在努力改善我們買家和賣家的體驗。他們產生的創新必須經過測試,以驗證他們做了我們希望他們會做的事情。
在引入產品或演算法更改時,團隊會針對線上流量進行實驗,以評估其是否對當前使用者體驗產生了改進,如透過關鍵指標衡量的那樣。這些實驗通常是“黃金標準”A/B 測試。
但在某些情況下,我們還使用了一種鮮為人知的實驗設計,稱為交錯。
對於產生有序結果的 ML 模型,交錯可以在執行等效 A/B 測試所需流量的 10% 或更少的流量上顯示使用者偏好,從而使我們的團隊能夠更快地進行實驗、學習和迭代。
衡量新演算法的影響
考慮一下我們如何測試一種新演算法(或“模型”或“排序器”)以產生搜尋結果(按特定順序排列的一組列表)。在 A/B 測試中,訪問者被隨機分為兩組。A組(控制)提供舊演算法產生的結果,B組(變體)提供新演算法產生的結果。我們分別計算對照組和變異組的平均行為,並進行統計比較。如果新排名的影響非常積極,我們通常會將其推廣給所有訪問者。
然而,在交錯測試中,我們的目標是檢測單個訪問者級別的排名者的偏好,而不是比較看到不同體驗的兩組的平均行為。
為了衡量訪問者更喜歡兩種演算法中的哪一種,交錯透過兩種演算法執行每個搜尋查詢,並同時呈現兩組有序結果,衡量哪個排名器吸引了更多的參與度。為了同時呈現這兩個結果,我們將它們編織在一起,就像一副紙牌的兩半被洗牌一樣。
對於訪問者來說,這不過是一個標準的搜尋結果列表。但是我們會跟蹤哪個結果來自哪個模型,如果訪問者進行了購買,這會給我們一些關於他們偏好的資料。在將這些交錯的搜尋結果呈現給大量訪問者之後,我們瞭解這些偏好跡象是否更頻繁地出現在一個模型上而不是另一個模型上。
在交錯實驗中,我們不會像在 A/B 測試中那樣將訪問者隨機分配到不同的體驗中。然而,我們需要包含一些隨機性,以確保來自一個排名的列表不會獲得優先放置,這可能會扭曲我們的資料。
交錯速度很快
與 A/B 測試相比,交錯的主要好處是它的速度。那些熟悉配對和非配對 t 檢驗之間差異的人可能會在這裡看到概念和速度相關的平行。A/B 測試和非配對 t 檢驗(可用於 A/B 測試)需要較大的樣本量來控制單元間差異並實現組間有用的比較。然而,交織和配對 t 檢驗透過測量單元內的差異、有效地隔離和識別感興趣的影響,顯著減少了這種變化的影響。
在 A/B 和交錯之間的比較中,我們發現交錯實驗的流量減少了 10 到 100 倍,因此可以更快地為同一問題提供 10 到 100 倍的答案。這種改進可以轉化為每年節省的數十個實驗天數,為團隊騰出空間來對原本無法訪問測試流量的模型進行實驗。
然而,交錯並不是 A/B 測試的簡單替代品。有些重要的事情它不能做。我們只能交錯排序的結果集,例如排名演算法。例如,我們不能使用交錯來測試不同顏色背景的影響或通知是否會驅動某種行為。此外,我們無法像使用 A/B 測試那樣測試模型之間的延遲差異。這是因為交錯必須等待較慢的演算法生成結果,然後才能將兩個排序列表編織在一起。
詳細點選標題
相關文章
- 實驗七: 查詢演算法的實現演算法
- 用分支實現交迭
- 基於有限體積法和交錯網格的SIMPLE演算法推導及實現演算法
- MmGetSystemRoutineAddress和MiFindExportedRoutineByName函式的實現程式碼IndexExport函式
- css3實現的漸變線交錯程式碼例項CSSS3
- 04 ML 決策樹入門 ID3 演算法實現演算法
- 使用 Spring Boot 3.2 和 CRaC 實現更快啟動Spring Boot
- 實驗一演算法描述及其程式實現演算法
- 知物由學 | “找茬”不如交給AI演算法,細說文字糾錯的多種實現途徑AI演算法
- SAP 外向交貨的包裝功能實現
- 更快的方式實現 PHP 陣列去重PHP陣列
- 關於 PHP - ML 使用者習慣分析 Laravel 實驗程式碼整理PHPLaravel
- 用CTI實現與Web交談 (轉)Web
- 實驗一--Easy IoT實現mqtt實驗MQQT
- ML-機器學習實踐機器學習
- 演算法實驗二演算法
- KNN演算法實驗KNN演算法
- 03 ML KNN 實現的婚戀網站分類匹配KNN網站
- 使用DQN演算法實現遊戲智慧演算法遊戲
- 使用Matlab實現AHP演算法Matlab演算法
- PaddlePaddle實戰 | KDD Cup Regular ML Track 基線實現解析
- 冷飯新炒:理解Snowflake演算法的實現原理演算法
- 限流器演算法實現(JUC原子類使用實踐)演算法
- 使用javascript實現使用者名稱驗證JavaScript
- 實驗--抽象類的使用抽象
- Java 中使用 Failsafe 實現容錯JavaAI
- WebGL 實現雨水特效實驗Web特效
- 使用Java中的Luhn演算法實現信用卡驗證 - Java2BlogJava演算法
- 實驗9.單臂路由實現Vlan互通實驗路由
- 雪花演算法的實現演算法
- Mahout實現的演算法演算法
- 智慧空間亮相高交會,解析園區的創新與實踐
- Python基礎演算法庫及視覺化庫使用實踐-大資料ML樣本集案例實戰Python演算法視覺化大資料
- golang 中使用 JWT 實現登入驗證GolangJWT
- 如何使用angularjs實現表單驗證AngularJS
- 使用 Spring Validator 介面實現驗證Spring
- 實驗| Pyecharts實現散點圖Echarts
- 機器學習實驗出錯總結機器學習