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種錯誤卻經常被使用的方法
- Per-protocol Analysis = 實驗組滲透用戶 - 對照組全用戶
\[E(Y|Z=1, W(z=1)=1) - E(Y|Z=0) \]
- 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進行定義如下
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)\)之間是否存在顯著差異,差異越大,能泛化的可能一般是越小的,
CACE我們就說這么多,下一節我們探索實驗生效的終極歸因Mediation Analysis
對AB實驗的高端玩法感興趣???這里
AB實驗的高端玩法系列1 - AB實驗人群定向/個體效果差異/HTE 論文github收藏
AB實驗的高端玩法系列2 - 更敏感的AB實驗, CUPED!
AB實驗的高端玩法系列3 - AB組不隨機?觀測驗驗?Propensity Score
歡迎留言或評論~
Ref
- Imbens G. Methods for Estimating Treatment Effects IV: Instrumental Variables and Local Average Treatment Effects. Technical report, Lecture Notes 2, Local Average Treatment Effects, Impact Evaluation Network, Miami; 2010
- Complier average causal effect? Exploring what we learn from an RCT with participants who don't do what they are told. 2017
- http://ec2-184-72-107-21.compute-1.amazonaws.com/_assets/files/events/slides_late
- Schochet, Peter Z. and Hanley Chiang (2009). Estimation and Identification of the Complier Average Causal Effect Parameter in Education RCTs (NCEE 2009-4040).
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/47715.html
標籤:其他
