AB實驗的高階玩法系列3 - AB組不隨機?觀測試驗?Propensity Score
阿新 • • 發佈:2019-11-05
## 背景
都說隨機是AB實驗的核心,為什麼隨機這麼重要呢?有人說因為隨機所以AB組整體不存在差異,這樣才能準確估計實驗效果(ATE)
$$
ATE = E(Y_t(1) - Y_c(0))
$$
那究竟隨機是如何定義的呢? 根據Rubin Causal Model, 想要讓上述估計無偏,隨機實驗需要滿足以下兩個條件:
1. **SUTVA**
- 實驗個體間不相互影響
- 實驗個體間的treatment可比
2. **Ignorability(Unconfoundness是更強的假設)**
是否受到實驗干預和實驗結果無關,從因果圖的角度就是不存在同時影響treatment和outcome的其他變數
$$Y(1),Y(0) \perp Z $$
SUTVA在一般實驗中是假定成立的,線上實驗還好,很多線下實驗很難保證這一點,像滴滴在部分地區投放更多車輛就會導致其他地區出現運力不足,所以個體間是隱含存在相互影響的。但這個不在本節討論範圍以內。
Ignorability在隨機實驗中,通過對樣本隨機取樣得以保證。但是在觀測性實驗或者並未進行完全隨機的實驗中Ignorability是不成立的。解決辦法就是把同時影響是否實驗和實驗結果的那些變數(Confounding Covariate)考慮進來得到conditional Ignorability。既
$$Y(1),Y(0) \perp Z | X$$
理論是如此,但X往往是未知且高維的。尋找X完全一樣的樣本來估計ATE並不現實,其中一個解決辦法就是下面的Propensity Score Matching。名字很高階~計算較簡單~使用需謹慎~
下面我介紹一下核心方法,並用kaggle一個醫學相關資料集簡單比較一下各個方法。
## 核心方法
### 原理
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 $),或是聚類(相似樣本)來理解。
然後基於score我們對樣本進行聚合或匹配或加權,使樣本滿足上述的**conditional Ignorability**
### Propensity Score 估計
估計本身就是一個經典的二分類問題,基於特徵我們預測每個樣本進入實驗組的概率。幾篇經典的paper(2011年之前)都是用LogisticRegression來解決問題,但放在今天xgBoost和LGB等等集合樹演算法在特徵相容和準確率上應該會表現更好。而且樹對於樣本劃分的方式天然保證了葉節點的樣本有相同的打分和相似的特徵。[當然要是你的資料太小LR還是首選]
這裡說兩個建模時需要注意的點:
#### 1. 特徵選擇
這裡的特徵可以大體被分為三類
- 影響treatment
- 影響outcome
- 同時影響treatment和outcome的confounder
毫無疑問confounder是必須要有的,移除confounding Bias是AB實驗的核心。但是是否加入隻影響treatment和outcome的特徵不同論文給出了不同的觀點。
結合各方結論,加入對outcome有影響的特徵是okay的,其實結合上一篇[AB實驗的高階玩法系列2 - 更敏感的AB實驗, CUPED!][1],可以發現加入對outcome有影響的特徵近似於變相使用了CUPED,可能降低實驗核心指標估計的方差。
加入只對treatment有影響的特徵,可能會導致實驗組和對照組樣本的Propensity score最終分佈重合度變低,導致部分實驗樣本找不到匹配的對照樣本,需要謹慎考慮。
#### 2. 模型檢驗
只用AUC,cross-entropy來評價模型的擬合在這裡是不夠的。這涉及到Propensity Score的Balancing性質:
$$
Z \perp X | PropensityScore
$$
簡單說就是Score相近的樣本,X也要相似。這裡你可以直接用視覺化boxplot/violinplot來檢驗,也可以更精確的用T-test等統計手段來檢驗X是否存在差異。
### Score使用
Propensity Score通常有4種用法,我們逐一簡單介紹一下
#### matching
一句話說按Propensity給實驗組對照組進行配對。
按score對每一個實驗組樣本進行[1/N個][有/無放回]的樣本匹配。這裡的引數選擇除了現實資料量的限制,一樣是Bias-Variance的權衡。因此可以考慮根據樣本量,在score相差小於閾值的前提下,分別計算1~N個匹配樣本下的ATE,如果結果差異過大(sensitivity),則方法本身需要調整。
也有相應的trim方法旨在剔除score取值極端無法找到匹配的樣本(eg. $score \to 0$)。但在一些場景下trim方法會被質疑。( 小明:你扔掉了一些高收入的樣本ROI肯定打不平啊怎麼能這麼算呢>_<)
> 在資料量允許情況下,我更傾向於Nto1有放回的匹配,因為大多數場景下都是無法完全考慮所有Covariate的,意味著Propensity score的估計一定在一些特徵上是有偏差的,這種時候取多個樣本匹配是可能降低偏差的
#### stratification
一句話說按相似Propensity對實驗組對照組進行分組在組內計算ATE再求和。
具體怎麼分組沒有確定規則,只要保證每組內有足夠的實驗組對照組樣本來計算ATE即可。這裡一樣是Bias-Variace的權衡,分組越多Bias越少方差越大。通常有兩種分位數分桶方法
- 對全樣本propensity score按人數等比例分組
- 對人數較少(通常是實驗組)按人數確定分組邊界
這裡一樣可以使用trim,但是請結合具體業務場景仔細考慮。
#### Inverse probability of treatment weighting(IPTW)
一句話說按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$從而導致的的極端值問題,這就需要人工調整,而調整本身是否合理也會被質疑。
#### Covariate adjusted
一句話說我沒怎麼接觸過這種方法,也把model-dependency應用在這裡不太感冒 >.<,有興趣的朋友自己探索吧。要是以後發現它好用再加回來
## 應用示例
資料來源是Kaggle的開源資料集 Heart Disease UCI[\[資料鏈接\]][2]
資料本身是根據人們的性別,年齡,是否有過心口痛等醫學指標預測人們患心臟病的概率。
**資料量和特徵都很少,以下僅用作方法探索,不對結果置信度做討論**
這裡我們把資料當作一個觀測性實驗的樣本,實驗目的變成女性(sex=0)是否男性(sex=1)更易患上心臟病。資料如下:
### PSM差不多就說這麼多,歡迎各種反饋各種評論~下一節我們討論實驗滲透低/效果稀釋該怎麼辦? 對這個系列感興趣的的盆友,
直接從資料計算男性比女性患心臟病的概率低30%!WHAT?! 考慮到資料非常小,我們用LR估計Propensity Score,男女的score分佈如下
下面我分別使用了stratification,matching和IPTW來估計ATE ### stratification 我分別嘗試用實驗組和用全樣本找分位點的方式來計算ATE, 用實驗組估計分位點時分3組會有一組對照組樣本太少,於是改成2組。結果比較相似ATE在-0.15 ~ 0.16。比直接用全樣本估計降低了一半! >這裡stratification分組數的確定,需要在保證每組有足夠的treatment和control樣本的基礎上,保證每組的Covariate分佈相似
### PSM差不多就說這麼多,歡迎各種反饋各種評論~下一節我們討論實驗滲透低/效果稀釋該怎麼辦? 對這個系列感興趣的的盆友,