1. 程式人生 > >AB實驗的高階玩法系列4- 實驗滲透低?使用者未被觸達?CACE/LATE

AB實驗的高階玩法系列4- 實驗滲透低?使用者未被觸達?CACE/LATE

CACE全稱Compiler Average Casual Effect或者Local Average Treatment Effect。在觀測資料中的應用需要和Instrument Variable結合來看,這裡我們只討論CACE的框架給隨機AB實驗提供的一些learning。你碰到過以下低實驗滲透低的情況麼? - 新功能入口很深,多數進組使用者並未真正使用新功能,在只能在使用者層隨機分流的條件下,如何計算新功能的收益 - 觸達策略,在傳送觸達時進行隨機分組,但觸達過程存在損失,真正觸達的使用者佔比很小,如何計算觸達收益 ## 背景 當然如果你的新策略滲透非常低,可能你的策略本身就需要調整。但就一些本身旨在提高少數使用者體驗的策略,或者策略初期試水的情況,CACE可能會比AB組的整體差異(ATE)更合適作為你實驗的衡量指標。因為它可能會告訴你策略對少部分使用者產生了顯著受益,你要做的只是去繼續迭代擴大使用者滲透而已。 **ATE關注的是整個實驗組-對照組的收益,當然也會是策略全量上線後預估能拿到的對全使用者的收益。CACE估計的則是實驗對真正觸達的使用者預估產生的收益。**注意這部分使用者的收益並不能泛化到全使用者,其一實驗對不同使用者的影響不同,其二策略的滲透率天然有限。往往滲透率越低對使用者的選擇性越強,觸達的使用者和整體使用者的差異更大,計算出的CACE更難泛化到全使用者上 ## CACE框架 讓我們回憶下ATE的計算, T是treatment,例如app增加的新功能, Y是outcome,比如使用者app使用時長,實驗效果一般通過ATE估計,因為這會最貼近實驗全量後在全使用者上拿到的最終受益 $$ ATE = E(Y|T =1) - E(Y|T=0) $$ CACE額外加入了變數W實驗滲透,也就是使用者是否真正使用過新功能,CACE估計的是實驗對真正觸達的使用者產生的收益。如果你的實驗滲透100%那CACE=ATE,隨著實驗滲透的降低,理論上CACE會比ATE越來越高,因為部分使用者的收益被全體使用者稀釋。 說了這麼多CACE咋算嘞?別急先來展示2種錯誤卻經常被使用的方法 1. Per-protocol Analysis = 實驗組滲透使用者 - 對照組全使用者 $$ E(Y|Z=1, W(z=1)=1) - E(Y|Z=0) $$ 2. As-treated Analysis = 實驗組滲透使用者 - 實驗組未滲透使用者 $$ E(Y|Z=1, W(z=1)=1) - E(Y|Z=1, W(z=1)=0) $$ 上面兩種方法都同時踩中了一個叫做Selection Bias的坑,也就是功能滲透本身是受到使用者行為/主觀意願影響,因此會存在使用者選擇。從而導致滲透使用者既不能代表全使用者,也會和未滲透使用者存在差異。真要在錯的裡面找個對的出來,Per-protocol一般更好一點。 ## CACE計算 ###使用者定義 CACE把使用者分為4類, compiler, never-taker, always-taker, defier,簡單說compiler是給藥就吃不給就不吃,never-taker是打死也不吃,always-taker是沒事就吃藥,defier是不給我藥我偏要吃。這四類人群可以通過W和Z進行定義如下

### 假設 要想CACE的計算成立,還需要滿足3條假設 **1. Independence** 這個在隨機AB實驗中一定成立,但在觀測資料中需要額外尋找Instrument variable這裡不予討論 $$ Z_i \perp (Y_i(0),Y_i(1),W_i(0),Y_i(1)) $$ **2. Exclusion Restriction** 這個假設即便在隨機AB實驗中也不一定成立,**因此需要基於策略本身進行判斷**,基本原則就是Treatment分組本身對使用者沒有影響,只有確實被Treatment滲透的使用者才受到影響。假設2保證了never-taker,always-taker在實驗組和對照組中的表現一致。 $$ Y(z,w) = Y(z',w) \,\,\, \text{for all z, $z'$,w} $$ 印象中有看到過假設2不成立應該如何計算CACE的paper,不過還沒碰到過類似情況,以後有用到再加上吧。 **3. Monotonicity/No-Defier** 單調假設在絕大多數情況下都成立,也就是T對W是正效應,不存在Defier。 這時W和Z對應的人群會被簡化為以下,never-taker指向人群就是實驗組未滲透人群因此可以直接估計 $$ W_i(1)>W_i(0) $$

### 計算 隨機實驗的假設保證了compiler, always-taker, 和never-taker在對照組和實驗組中的佔比是相同的,因此我們可以直接計算出compiler, always-taker, never-taker在人群中的佔比,如下 $$ \begin{align} \pi_a &= p(W(0)=W(1)=1) = E(W|Z=0)\\ \pi_c &= p(W(0)=0,W(1)=1) = E(W|Z=1) - E(W|Z=0)\\ \pi_n &= P(W(0)=W(1)=0) = 1- E(W|Z=1) \\ \end{align} $$ 因為實驗組中未滲透使用者一定是never-taker, 對照組中滲透使用者一定是always-taker(在一些功能型隨機實驗中並不存在always-taker),因此這部分使用者的表現可以直接拿到 $$ \begin{align} E(Y|W=1,Z=0) &= E(Y(1)|always)\\ E(Y|W=0,Z=1) &= E(Y(0)|never)\\ \end{align} $$ 我們以此為突破口就可以計算得到compiler的CACE,先把對照組和實驗組的人群進行分解如下 $$ \begin{align} E(Y|Z=0) &= \pi_a * E(Y(1)|always) + \pi_n * E(Y(0)|never) + \pi_c * E(Y(0)|compiler) \\ E(Y|Z=1) &= \pi_a * E(Y(1)|always) + \pi_n * E(Y(0)|never) + \pi_c * E(Y(1)|compiler) \\ \end{align} $$ 很顯然AB組的差異只來源於compiler的差異,其實在沒有always taker的情況下, CACE只是按實驗組滲透等比的放大了組間收益而已 $$ \begin{align} CACE &= E(Y(1)|compiler) - E(Y(0)|compiler)\\ &= \frac{E(Y|Z=1)-E(Y|Z=0)}{\pi_c}\\ &= \frac{E(Y|Z=1)-E(Y|Z=0)}{E(W|Z=1) - E(W|Z=0)} \end{align} $$ 對於顯著性的計算,我個人更偏向於只把CACE應用在原始ATE已經顯著的情況下,以避免針對一些沒有意義的波動資料進行分析,CACE只是用於估計滲透使用者的絕對收益。當然如果想要計算CACE的顯著性,可以用Bootstrap來拿到SE。當然因為CACE本身是ratio,也可以用更科學的方法來計算SE,具體細節可以參照Ref4。 用這個方法難免會被問到這部分使用者的收益能否泛化到全體使用者,理論上是不能的,但也不能一錘子打死。一個比較簡單直觀的方法是去比較$E(Y(0)|compiler)$,$E(Y(0)|always)$,$E(Y(0)|never)$之間是否存在顯著差異,差異越大,能泛化的可能一般是越小的。 對AB實驗的高階玩法感興趣?