廣義隨機森林
瞭解causal forest之前,需要先了解其forest實現的載體:GENERALIZED RANDOM FORESTS[6](GRF)
其是隨機森林的一種推廣, 經典的隨機森林只能去估計label Y,不能用於估計複雜的目標,比如causal effect,Causal Tree、Cauasl Forest的同一個作者對其進行了改良。先定義一下矩估計參數列達式:
其中,\(\psi\) 是score function,也就是measure metric,\(\theta\) 是我們不得不去計算的引數,比如tree裡面的各項引數如特徵threshold,葉子節點估計值..etc, \(\upsilon\)
則是一個可選引數。\(O\) 表示和計算相關的值,比如監督訊號。像response類的模型,\(O_i={Y_i}\), 像causal 模型,\(O_i={Y_i, W_i}\) \(W\) 表示某種treatment。
該式在實際最佳化引數的時候,等價於最小化:
其中,\(\alpha\) 是一種權重,當然,這裡也可以理解為樹的權重,假設總共需要學習\(B\) 棵樹:
其中,\(L_b(x)\) 表示葉子節點裡的樣本。本質上,這個權重表示的是:訓練樣本和推理或者測試樣本的相似度,因為如果某個樣本\(x_i\)落入葉子\(L_b\) ,且我們可以認為葉子節點內的樣本同質的情況下,那麼可以認為這個樣本和當前落入的tree有相似性。
當然,按照這個公式,如果\(L_b\) 很大,說明進入這個葉子的訓練樣本很多,意味著沒劃分完全,異質性低,則最後分配給這棵樹的權重就低,反之亦然。
分裂準則框架
對於每棵樹,父節點\(P\) 透過最最佳化下式進行分裂:
其中,\(\mathcal{J}\) 表示train set,分裂後形成的2個子節點標準為:透過最小化估計值與真實值間的誤差平方:
等價於最大化節點間的異質性:
但是\(\theta\) 引數比較難最佳化,交給梯度下降:
其中,\(\hat \theta_P\) 透過 (2) 式獲得, \(A_p\) 為score function的梯度
梯度計算部分包含2個step:
- step1:labeling-step 得到一個pseudo-outcomes
- step2:迴歸階段,用這個pseudo-outcomes 作為訊號,傳遞給split函式, 最終是最大化下式指導節點分割
以下是GRF的幾種Applications:
Causal Forest
以Casual-Tree為base,不做任何估計量的改變
與單棵 tree 淨化到 ensemble 一樣,causal forest[7] 沿用了經典bagging系的隨機森林,將一顆causal tree 擴充到多棵:
其中,每科子樹\(\hat \tau\) 為一顆Casual Tree。使用隨機森林作為擴充的好處之一是不需要對causal tree做任何的變換,這一點比boosing系的GBM顯然成本也更低。
不過這個隨機森林使用的是廣義隨機森林 , 經典的隨機森林只能去估計label Y,不能用於估計複雜的目標,比如causal effect,Causal Tree、Cauasl Forest的同一個作者對其進行了改良,放在後面再講。
在實現上,不考慮GRF,單機可以直接套用sklearn的forest子類,重寫fit方法即可。分散式可以直接套用spark ml的forest。
self._estimator = CausalTreeRegressor(
control_name=control_name,
criterion=criterion,
groups_cnt=groups_cnt)
trees = [self._make_estimator(append=False, random_state=random_state)
for i in range(n_more_estimators)]
trees = Parallel(
n_jobs=self.n_jobs,
verbose=self.verbose,
**_joblib_parallel_args,
)(
delayed(_parallel_build_trees)(
t,
self,
X,
y,
sample_weight,
i,
len(trees),
verbose=self.verbose,
class_weight=self.class_weight,
n_samples_bootstrap=n_samples_bootstrap,
)
for i, t in enumerate(trees)
)
self.estimators_.extend(trees)
CAPE: 適用連續treatment 的 causal effect預估
Conditional Average Partial Effects(CAPE)
GRF給定了一種框架:輸入任意的score-function,能夠指導最大化異質節點的方向持續分裂子樹,和response類的模型一樣,同樣我們需要一些估計值(比如gini index、entropy)來計算分裂前後的score-function變化,計算估計值需要估計量,定義連續treatment的估計量為:
估計量參與指導分裂計算,但最終,葉子節點儲存的依然是outcome的期望。
此處的motivation來源於工具變數和線性迴歸:
此處我們假設\(x\)是treatment,y是outcome, \(w\) 作為一個引數簡單的描述了施加treatment對結果的直接影響,要尋找到引數我們需要一個指標衡量引數好壞, 也就是loss, 和casual tree一樣,通常使用mse:
為了最快的找到這個w,當然是往函式梯度的方向, 我們對loss求偏導並令其為0:
(2) 代入 (1) 式可得:
可簡化得引數w是關於treatment和outcome的協方差/方差。至於\(\xi\) , 似乎影響不大。
refs
- https://hwcoder.top/Uplift-1
- 工具: scikit-uplift
- Meta-learners for Estimating Heterogeneous Treatment Effects using Machine Learning
- Athey, Susan, and Guido Imbens. "Recursive partitioning for heterogeneous causal effects." Proceedings of the National Academy of Sciences 113.27 (2016): 7353-7360.
- https://zhuanlan.zhihu.com/p/115223013
- Athey, Susan, Julie Tibshirani, and Stefan Wager. "Generalized random forests." (2019): 1148-1178.
- Wager, Stefan, and Susan Athey. "Estimation and inference of heterogeneous treatment effects using random forests." Journal of the American Statistical Association 113.523 (2018): 1228-1242.
- Rzepakowski, P., & Jaroszewicz, S. (2012). Decision trees for uplift modeling with single and multiple treatments. Knowledge and Information Systems, 32, 303-327.
- annik Rößler, Richard Guse, and Detlef Schoder. The best of two worlds: using recent advances from uplift modeling and heterogeneous treatment effects to optimize targeting policies. International Conference on Information Systems, 2022.