滴滴數據驅動利器:AB實驗之分組提效

来源:https://www.cnblogs.com/didijishu/archive/2020/05/29/12988734.html
-Advertisement-
Play Games

桔妹導讀:在各大互聯網公司都提倡數據驅動的今天,AB實驗是我們進行決策分析的一個重要利器。一次實驗過程會包含多個環節,今天主要給大家分享滴滴實驗平臺在分組環節推出的一種提升分組均勻性的新方法。本文首先會介紹一下滴滴AB實驗的相關情況,以及在實驗分組環節中遇到的問題。然後介紹目前在實驗對象分組方面的通 ...


桔妹導讀:在各大互聯網公司都提倡數據驅動的今天,AB實驗是我們進行決策分析的一個重要利器。一次實驗過程會包含多個環節,今天主要給大家分享滴滴實驗平臺在分組環節推出的一種提升分組均勻性的新方法。本文首先會介紹一下滴滴AB實驗的相關情況,以及在實驗分組環節中遇到的問題。然後介紹目前在實驗對象分組方面的通用做法,以及我們對分組環節的改進。最後是新方法的效果介紹。

1. AB實驗概述

互聯網公司中,當用戶規模達到一定的量級之後,數據驅動能夠幫助公司更好的決策和發展。在滴滴各個團隊中,我們經常會面臨不同的產品設計方案的選擇或者多個演算法方案的決策,比如頂部導航欄的排序方案一二三,派單演算法一二三等等。傳統的解決方法通常是由該領域經驗豐富的專家來決定,或者由團隊成員討論決定,有時候甚至是隨機選擇一個方案上線。雖然在某些情況下傳統解決辦法也是有效的,但是讓AB實驗後的數據說話,會讓方案選擇更加有信服力。

滴滴Apollo AB實驗平臺,支持了滴滴諸多業務的功能優化、策略優化以及運營活動,提供了線上實驗以及離線實驗的能力,並行實驗數達到 6000+ / 周。在分組方法上提供隨機分組以及時間片分組來應對不同的實驗場景。效果分析方面,我們對基礎指標、率指標、均值指標、留存指標等多種類型的指標提供了均值檢驗、VCM、Bootstrap等多種分析手段。

2. 分組的問題

一次完整的AB實驗可以分為以下幾步:

第一步:
設計實驗方案,包括確定實驗對象,劃分實驗組,確定實驗提升目標等。

第二步:
進行人群分組,一般是一個空白組加一個或多個實驗組

第三步:
將需要實驗的策略,方案或者功能施加到各個組,收集數據

第四步:
對實驗關心的指標進行分析觀察

本文主要討論其中第二步的實現。業界在進行實驗對象分組的時候,最常用的是隨機分組方式。這也是滴滴諸多實驗中占比最大的分組方式。隨機分組的做法可以實現為對實驗對象的某個ID欄位進行哈希後對100取模,根據結果值進入不同的桶,多個不同的組分別占有一定比例的桶。實驗對象在哈希取模之後,會得到0 ~ 99的一個數,即為該實驗對象落入的桶。這個桶所屬的組就是該實驗對象的組。

上述的這種分組方式稱為CR(Complete Randomization)完全隨機分組。進行一次CR,能將一批實驗對象分成對應比例的組。但是由於完全隨機的不確定性,分完組後,各個組的實驗對象在某些指標特性上可能天然就分佈不均。均值,標準差等差異較大。如果分組不均,則將會影響到第四步的實驗效果分析的進行,可能遮蓋或者誇大實驗的效果。

待分流的個體具備一定的內在特點,比如就GMV這個指標來說,人群中會存在高GMV,中等GMV,低GMV等不同層次的用戶。如下圖所示,對於實驗人群進行完全隨機分流的方式,存在一定概率的不均勻,比如高GMV人群在某個組中的分配比例偏高,導致兩個組的GMV相對差異較大。比如一次實驗中,希望提升北京市的GMV 1%,在進行分組之後,實驗組的人群GMV天然就比對照組的人群GMV高2%。這樣實驗進行的結果就變的無法比較。如果沒有註意到實驗前的組間不均情況,甚至可能驗證出錯誤的結論。

基於CR的風險較大的情況,一般會對CR進行簡單的一步優化,即進行RR(Rerandomization)。RR是在每次跑CR之後,驗證CR的分組結果組間的差異是否小於實驗設定的閾值。當各組的觀察指標小於閾值或者重新分組次數大於最大允許分組次數後,停止分組。

相比於CR,RR通過犧牲計算時間,能在一定概率上得到符合要求的分組。重分組次數與輸入的實驗對象樣本大小相關。樣本量越大,需要進行重分的次數一般較少。但是RR分組能得到符合要求的分組有一定的概率,且需要花更多的時間。所以,我們希望通過對分組演算法的改進,在一次分組過程中分出觀察指標均勻的分組結果,如下圖所示。

3. 自適應分組

Apollo實驗平臺實現了滴滴AI LAB團隊設計的Adaptive(自適應)分組演算法。Adaptive分組方法可以在只分組一次的情況下,讓選定的觀測指標在分組後每組分佈基本一致,可以極大的縮小相對誤差。相比於傳統的CR分組,Adaptive分組的演算法更加複雜,在遍歷人群進行分組的同時,每個組都需要記錄目前為止已經分配的樣本數,以及已經分配的樣本在選定的觀測指標上的分佈情況。從分流人群中拿到下一個要分的對象後。會對實驗的各個組進行計算,計算該對象如果分配到本組。本組的觀測指標分佈得分情況。然後綜合各個組的預分配得分情況,得到最終各個組對於該實驗對象的分配概率。

4. 系統設計

系統交互流程如下:

Adaptive分組方案的設計與實現復用了Apollo AB實驗已有離線分組架構的能力。用戶在實驗平臺通過API介面或者頁面創建完Adaptive實驗之後,實驗平臺會將分組需求發送到分組任務管理系統,生成分組任務存入資料庫中。Adaptive分組執行分為以下幾個步驟:

首先分組任務管理系統從資料庫中獲取需要進行分組的任務。然後根據任務類型調用不同的分組服務。Adaptive分組服務從資料庫中獲取實驗對應的計算信息。根據實驗計算信息中的觀察指標,從HIVE中獲取指標數據,根據人群信息的地址獲取人群數據。執行完分組演算法之後,將分組結果寫入HDFS。

5. 演算法介紹

樣本打亂&隨機分配

將人群shuffle打亂之後,對於人群的前2 * K(K是組數)的人進行隨機分組,保證每個組中至少有兩個樣本之後再開始進行Adaptive分組。

組參數初始化

根據實驗的組以及每個組的人群比例計算出各個組的直接分配概率和間接分配概率。每個組上的直接分配概率和間接分配概率,分別表示了在直接分配以及間接分配情況下,選中該組後,樣本分配到各個組的概率。根據已經分配的樣本數據,初始化觀測指標分佈情況。

判斷直接或間接分配

計算各組已分配樣本數和組所占比例之間的關係,得到各個組的平衡繫數BS,如果各個組的比例平衡繫數相差較大,則進行直接分配。選用BS最小的組的直接分配概率來分配接下來的一個樣本。通過直接分配來粗粒度的調整各組的分配比例。如果平衡繫數相差不大,則走接下來的指標分佈計算,來決定使用哪個組的間接分配概率。

計算各組預分配得分

計算將要分配的一個樣本,如果分配到組k後,組k的指標分佈得分MS k,MS是根據ANOVA模型計算出來的每個組在各個觀察指標上的均值,方差情況。通過比較各組的MS,選出向下偏離平均水平的組,以該組的間接分配概率作為各個組本樣本的分配概率。

更新指標分佈

通過上述的流程,無論使用直接分配還是間接分配,最終得到一個樣本的實際分組後。用這個樣本在各個觀測指標上的數據更新分配到的組的指標分佈數據。如此遍歷,直到分配完所有樣本。

6. 方案效果

使用Adaptive分組之後,1次分組得到符合要求的分組概率超過95%。

而不同演算法間對於組間差異的實際優化情況不僅是與演算法有關,也和進行分組的人群的大小,人群的分佈特性相關。一般來說,人群大小越大,分佈越均勻,使用隨機分組的分組結果就會越好。組間差異會越小。下麵進行測試的數據人群規模不大,所以直接隨機分組的差異會顯得比較大,並不代表所有情況。

如上圖所示,是對一個大小為10000的司機人群進行分組測試,並觀察分組後的結果在7日GMV,7日線上時長,全兼職三個指標上的分佈情況,並取每次分組結果中三個指標上差異最大百分比作為本次分組的差異。其中CR(Complete Randomization)是指一次隨機分組,RR(每次是跑CR100次,取最優結果得到),CAR(Covariates Adaptive Randomization)是指一次Adaptive分組。圖中的縱坐標是該區間的次數,橫坐標是差異的百分比。

每種方式均執行了400次,統計指標的組間最大差異。CR方式的差異最大,最大差異可能達到14%以上。RR在CR的基礎上,通過時間換準確性,較大的降低了組間差異,最大組間差異能在2.7%以下,但是這個差異依然在實驗中不能被接受。CAR通過演算法的優化,進一步降低了組間的差異。95%的情況下能把差異控制在0.8%以下。

7. 總結

通過提供Adaptive自適應分組能力,我們極大的提高了隨機分組實驗的數據精度。降低了無效實驗的概率,縮短了實驗周期。然而,對於已經通過CR方式完成的隨機分流實驗,用上述的這一套方案已經無法重新均衡。如何從這種已經完成的實驗分組中抽取分佈平衡的樣本進行效果評估是一個更大的挑戰,目前正在設計中,歡迎大家在本文留言,提寶貴意見,一起探討實驗相關問題。


團隊介紹

滴滴工程效能團隊肩負通過工程技術持續提升組織效能的使命,致力於建設世界一流的工程能力體系。為工程師提供極致的工作體驗,打造高效能研發組織。

作者介紹

2018年北郵碩士畢業加入滴滴。在工程效能團隊Apollo AB實驗項目組,從事實驗效果評估相關工作,負責實驗科學性相關的研究。

歡迎關註滴滴技術公眾號!

本文由博客群發一文多發等運營工具平臺 OpenWrite 發佈


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux 下如果我們進入到了一個比較長的路徑,比如: /home/alvin/projects/blogdemos/linux-system-programming/thread /home/alvin/projects/blogdemos/diff /home/harry/study/亞洲文化/ ...
  • linux命令tr: (Translate/ Text Replacer):可以對來自標準輸入的內容進行字元替換,字元刪除,以及重覆字元壓縮。 ***只從stdin標準輸入接收數據: 格式:tr [options] set1 set2 將輸入按照位置從set1映射到set2,然後將輸出寫到stdou ...
  • chronyd時間伺服器,和之前NTP的功能一樣,提供時間的。基礎概念我就不說了,不擅長。chronyd是NTP之後誕生的。最近下載了最新的Centos Linux 8.1,發現裡面沒有ntp服務了,百度一搜發現改為了Chronyd,這篇文章就是部署一個伺服器+客戶端測試。1、伺服器端Centos ... ...
  • 有人說安卓就是 Linux,也有人說安卓是安卓、Linux 是 Linux,兩者沒什麼關係,還有人說安卓用的是 Linux 的內核,那麼它們之間到底是什麼關係呢。要想得到這個問題的答案,我們要先弄清楚幾個概念。 Linux 與 Linux 內核 Linux 與 Linux 內核其實是不一樣的,關於這 ...
  • 當我對Docker技術還是一知半解的時候,我發現理解Docker的命令非常困難。於是,我花了幾周的時間來學習Docker的工作原理,更確切地說,是關於Docker統一文件系統(the union file system)的知識,然後回過頭來再看Docker的命令,一切變得順理成章,簡單極了。 題外話 ...
  • 1、環境準備,安裝sqlite3軟體 sudo apt-get install sqlite3 2、編寫sql執行腳本(更新操作),每條sql語句以分號結束,sql.sql文件內容: ALTER TABLE "GameDeviceInfo" ADD "Delay" INTEGER NOT NULL ...
  • https://blog.csdn.net/youngbit007/article/details/54288603 groupbyimport pandas as pddf = pd.DataFrame({'key1':list('aabba'), 'key2': ['one','two','on ...
  • 原文地址:https://mysqlserverteam.com/mysql-explain-analyze/ MySQL 8.0.18剛剛發佈(譯者註:原文發表時間為October 17, 2019),它包含了一個全新的特性來分析和理解查詢是如何執行的:explain analyze。 expla ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...