都說隨機是AB實驗的核心,爲何隨機這麼重要呢?有人說由於隨機因此AB組總體不存在差別,這樣才能準確估計實驗效果(ATE)html
\[ ATE = E(Y_t(1) - Y_c(0)) \]git
那究竟隨機是如何定義的呢? 根據Rubin Causal Model, 想要讓上述估計無偏,隨機實驗須要知足如下兩個條件:github
SUTVA在通常實驗中是假定成立的,線上實驗還好,不少線下實驗很難保證這一點,像滴滴在部分地區投放更多車輛就會致使其餘地區出現運力不足,因此個體間是隱含存在相互影響的。但這個不在本節討論範圍之內。算法
Ignorability在隨機實驗中,經過對樣本隨機採樣得以保證。可是在觀測性實驗或者並未進行徹底隨機的實驗中Ignorability是不成立的。解決辦法就是把同時影響是否實驗和實驗結果的那些變量(Confounding Covariate)考慮進來獲得conditional Ignorability。既函數
\[Y(1),Y(0) \perp Z | X\]ui
理論是如此,但X每每是未知且高維的。尋找X徹底同樣的樣原本估計ATE並不現實,其中一個解決辦法就是下面的Propensity Score Matching。名字很高端~計算較簡單~使用需謹慎~spa
下面我介紹一下核心方法,並用kaggle一個醫學相關數據集簡單比較一下各個方法。3d
Propensity Score的核心方法分紅兩步,score的計算和score的使用。score計算以下:
\[ \text{Propensity Score} = P(Z=\text{treatment assignment}| X \in R^n) \]
一種理解是它經過對影響Z的\(X \in R^N\)進行建模, 提煉全部Confounding Covariate的信息。另外一種理解是把\(P(z|x)\)做爲一種類似度(樣本距離)的度量。我我的傾向於把它看成一種有目標的降維($N \to 1 $),或是聚類(類似樣本)來理解。htm
而後基於score咱們對樣本進行聚合或匹配或加權,使樣本知足上述的conditional Ignorabilityblog
估計自己就是一個經典的二分類問題,基於特徵咱們預測每一個樣本進入實驗組的機率。幾篇經典的paper(2011年以前)都是用LogisticRegression來解決問題,但放在今天xgBoost和LGB等等集合樹算法在特徵兼容和準確率上應該會表現更好。並且樹對於樣本劃分的方式自然保證了葉節點的樣本有相同的打分和類似的特徵。[固然要是你的數據過小LR仍是首選]
這裏說兩個建模時須要注意的點:
這裏的特徵能夠大致被分爲三類
毫無疑問confounder是必需要有的,移除confounding Bias是AB實驗的核心。可是是否加入隻影響treatment和outcome的特徵不一樣論文給出了不一樣的觀點。
結合各方結論,加入對outcome有影響的特徵是okay的,其實結合上一篇AB實驗的高端玩法系列2 - 更敏感的AB實驗, CUPED!,能夠發現加入對outcome有影響的特徵近似於變相使用了CUPED,可能下降實驗覈心指標估計的方差。
加入只對treatment有影響的特徵,可能會致使實驗組和對照組樣本的Propensity score最終分佈重合度變低,致使部分實驗樣本找不到匹配的對照樣本,須要謹慎考慮。
只用AUC,cross-entropy來評價模型的擬合在這裏是不夠的。這涉及到Propensity Score的Balancing性質:
\[ Z \perp X | PropensityScore \]
簡單說就是Score相近的樣本,X也要類似。這裏你能夠直接用可視化boxplot/violinplot來檢驗,也能夠更精確的用T-test等統計手段來檢驗X是否存在差別。
Propensity Score一般有4種用法,咱們逐一簡單介紹一下
一句話說按Propensity給實驗組對照組進行配對。
按score對每個實驗組樣本進行[1/N個][有/無放回]的樣本匹配。這裏的參數選擇除了現實數據量的限制,同樣是Bias-Variance的權衡。所以能夠考慮根據樣本量,在score相差小於閾值的前提下,分別計算1~N個匹配樣本下的ATE,若是結果差別過大(sensitivity),則方法自己須要調整。
也有相應的trim方法旨在剔除score取值極端沒法找到匹配的樣本(eg. \(score \to 0\))。但在一些場景下trim方法會被質疑。( 小明:你扔掉了一些高收入的樣本ROI確定打不平啊怎麼能這麼算呢>_<)
在數據量容許狀況下,我更傾向於Nto1有放回的匹配,由於大多數場景下都是沒法徹底考慮全部Covariate的,意味着Propensity score的估計必定在一些特徵上是有誤差的,這種時候取多個樣本匹配是可能下降誤差的
一句話說按類似Propensity對實驗組對照組進行分組在組內計算ATE再求和。
具體怎麼分組沒有肯定規則,只要保證每組內有足夠的實驗組對照組樣原本計算ATE便可。這裏同樣是Bias-Variace的權衡,分組越多Bias越少方差越大。一般有兩種分位數分桶方法
這裏同樣可使用trim,可是請結合具體業務場景仔細考慮。
一句話說按Propensity score的倒數對樣本進行加權。
一個徹底隨機的AB實驗,Propensity Score應該都在0.5附近,而不徹底隨機的實驗在用Propensity score調整後在計算ATE時Z也會被調整爲等權,以下:
\[ \begin{align} e &= P(Z=1|x) \\ w &= \frac{z}{e} + \frac{1-z}{1-e} \\ ATE & = \frac{1}{n}\sum_{i=1}^n\frac{z_iY_i}{e_i} - \sum_{i=1}^n\frac{(1-z_i)Y_i}{1-e_i} \end{align} \]
我的對這種方法持保留意見,緣由有2: 其一上述matching和stratification雖然使用了score,但本質是使用了score給出的樣本類似度的排序,而並無使用score自己,因此對score估計的準確有必定容忍度。其二拿score作分母很容易碰到\(score \to 0/1\)從而致使的的極端值問題,這就須要人工調整,而調整自己是否合理也會被質疑。
一句話說我沒怎麼接觸過這種方法,也把model-dependency應用在這裏不太感冒 >.<,有興趣的朋友本身探索吧。要是之後發現它好用再加回來
數據來源是Kaggle的開源數據集 Heart Disease UCI[數據連接]
數據自己是根據人們的性別,年齡,是否有過心口痛等醫學指標預測人們患心臟病的機率。
數據量和特徵都不多,如下僅用做方法探索,不對結果置信度作討論
這裏咱們把數據看成一個觀測性實驗的樣本,實驗目的變成女性(sex=0)是否男性(sex=1)更易患上心臟病。數據以下:
直接從數據計算男性比女性患心臟病的機率低30%!WHAT?!
考慮到數據很是小,咱們用LR估計Propensity Score,男女的score分佈以下
我分別嘗試用實驗組和用全樣本找分位點的方式來計算ATE, 用實驗組估計分位點時分3組會有一組對照組樣本太少,因而改爲2組。結果比較類似ATE在-0.15 ~ 0.16。比直接用全樣本估計下降了一半!
這裏stratification分組數的肯定,須要在保證每組有足夠的treatment和control樣本的基礎上,保證每組的Covariate分佈類似
如下結果分別是:有trim & match 1~4 + 無trim & match1~4。最終估計的ATE和上述stratification的結果類似ATE在-0.15~-0.16直接。並且相對穩健匹配數量並無對ATE計算產生過大影響。
咱們發現隨着匹配的樣本上升ATE會愈來愈顯著,因此match的N越大越好?其實並非,由於P值是樣本量的函數,隨着樣本量上升'微小'的變更也會變顯著。因此我的以爲選擇最佳的N這裏並不十分重要,比較ATE對不一樣的N是否穩定可能更有意義。
。。。預料之中,這個結果是比較奇怪的。一方面數據少(100多),另外一方面confonder特徵也少,Score的擬合確定很差。因此獲得的居然是正向的結果。。。
AB實驗的高端玩法系列2 - 更敏感的AB實驗, CUPED!
AB實驗的高端玩法系列1 - 實用HTE(Heterogeneous Treatment Effects) 論文github收藏