S-Learner(Single Learner)
S-Learner(Single Learner)是因果推断中用于估计个体处理效应(ITE)或条件平均处理效应(CATE)的一种单模型方法。其核心思想是将处理变量作为特征输入模型,通过预测不同处理状态下的潜在结果差异来量化因果效应。
核心假设
- 无未观测混杂(Unconfoundedness):所有影响处理分配和结果的变量均被观测。
- 重叠性(Overlap):每个个体均有概率被分配到处理组和对照组(即0<P(T=1∣X=x)<1)。
- 模型灵活性:模型需足够复杂以捕捉T 与 X 的交互效应。
算法步骤
- 数据准备:
输入数据:协变量X 、处理变量T 、结果变量Y 。
构造特征:将T 作为特征与X 合并,形成新特征空间[X, T] 。
- 模型训练:
选择模型(如线性回归、随机森林、神经网络等),拟合Y 与 [X, T] 的关系:μ(X,T)=E[Y∣X,T]
- 处理效应预测:
对每个样本x ,分别计算 T=1 和 T=0 时的预测值:Y^(1)=μ(x,1),Y^(0)=μ(x,0)
计算个体处理效应:τ^(x)=Y^(1)–Y^(0)
优缺点分析
优点
- 模型简单:仅需训练单一模型,计算成本低,易于实现。
- 自然捕捉交互效应:将T 作为特征,模型可自动学习处理变量与协变量的交互作用。
- 适用性广:兼容任意预测模型(线性/非线性),灵活性高。
缺点
- 处理效应稀释:若处理变量T 对结果影响较小,模型可能难以有效区分处理效应。
- 偏向主要群体:当处理组和对照组样本量差异大时,模型可能偏向预测主要群体的结果。
- 模型误设风险:若模型未正确建模T 与X 的交互,会导致处理效应估计偏差。
适用场景
- 随机对照试验(RCT)数据:处理组和对照组分布均衡,满足无混杂假设。
- 高维特征与小样本:单模型减少参数数量,降低过拟合风险。
- 明确交互效应:处理变量与某些协变量存在已知的交互作用,需模型自动捕捉。
T-Learner(Two Learner)
T-Learner(Two Learner)是因果推断中用于估计个体处理效应(ITE)或条件平均处理效应(CATE)的一种双模型方法。其核心思想是分别对处理组和对照组训练两个独立的预测模型,通过对比两个模型的预测结果差异来量化因果效应。
建模思想
在处理组(T=1)和对照组(T=0)上分别训练模型μ1(X)和μ0(X),预测潜在结果Y(1)和Y(0)。
处理效应为两模型的预测差值:τ^(x)=μ1(x)–μ0(x)
核心假设
- 无未观测混杂(Unconfoundedness):所有影响处理分配和结果的变量均被观测。
- 重叠性(Overlap):每个个体均有概率被分配到处理组和对照组(即0<P(T=1∣X=x)<1)。
- 模型独立性:处理组和对照组的模型需独立捕捉各自群体的特征与结果关系。
优缺点分析
优点
- 灵活捕捉异质性:处理组和对照组模型独立训练,可更好适应两群体的特征差异(如非线性关系、交互效应)。
- 避免处理效应稀释:与S-Learner不同,T-Learner直接建模两群体的差异,避免处理变量被其他特征主导。
- 兼容复杂模型:可针对处理组和对照组分别选择最优模型(如处理组用神经网络,对照组用随机森林)。
缺点
- 样本利用率低:数据被分割为两部分,单个模型训练样本减少,可能导致过拟合(尤其是小数据场景)。
- 模型不一致性风险:若处理组和对照组模型结构差异大(如一个线性、一个非线性),预测结果可能不可比。
- 处理组-对照组样本量失衡:当两群体样本量差异大时,小样本群体的模型预测准确性下降,影响处理效应估计。
适用场景
- 处理组和对照组差异显著:两群体的特征分布或结果响应模式差异较大(如营销中高价值用户与普通用户)。
- 大样本数据:处理组和对照组均有足够样本支持独立建模。
- 需要高精度处理效应估计:如医疗领域需精准评估不同患者亚群的治疗效果差异。
X-Learner(Cross-Learner)
X-Learner(Cross-Learner)是因果推断中一种结合双模型框架与元学习(Meta-Learning)的方法,旨在更高效地估计条件平均处理效应(CATE)。其核心思想是通过交叉预测(Cross-Prediction)和残差学习(Residual Learning),利用处理组和对照组的信息互补性,提升小样本或非随机数据下的处理效应估计精度。
基本思路
- 三步交叉学习:
基础模型:类似T-Learner,先分别对处理组和对照组训练两个模型,预测潜在结果。
反事实预测与残差计算:利用交叉预测生成反事实结果,并计算残差(实际结果与预测结果的差异)。
元学习器建模:以残差为新的目标变量,训练元模型直接估计处理效应。
- 核心公式:
处理组模型μ1(X) 和对照组模型 μ0(X) 预测潜在结果:Y^1=μ1(X),Y^0=μ0(X)
反事实预测:
处理组的反事实对照结果:Y~0=μ0(XT=1)
对照组的反事实处理结果:Y~1=μ1(XT=0)
- 残差计算:
处理组残差:D1=YT=1–Y~0
对照组残差:D0=Y~1–YT=0
- 元模型训练:
处理效应估计:τ1(X)=D1,τ0(X)=D0
元模型g(X)综合τ1和τ0的加权平均:τ^(x)=g(x)=π(x)τ0(x)+(1−π(x))τ1(x)
π(x):倾向得分(处理概率),用于加权不同群体的残差信息。
算法步骤

- 基础模型训练
处理组模型𝜇1(𝑋):用处理组数据(XT=1,YT=1)
处理组模型𝜇0(𝑋):用处理组数据(XT=0,YT=0)
- 交叉预测与残差生成
对处理组样本,用𝜇0(𝑋_{𝑇=1})预测反事实对照结果Y0^,计算残差D1=YT=1–Y0^。
对对照组样本,用𝜇0(𝑋_{𝑇=0})预测反事实对照结果Y1^,计算残差D2=Y1^−YT=0
这一步是解决模型误差的问题。
- 元模型训练:
处理组元模型𝜏1(𝑋):用处理组数据(XT=1,D1)训练。
对照组元模型𝜏0(𝑋):用对照组数据(XT=0,D0)训练。
倾向得分估计𝜋(𝑋):通过逻辑回归或机器学习模型预测𝑃(𝑇=1|𝑋)。
- 加权集成处理效应:
最终CATE估计:𝜏̂ (𝑥)=𝜋(𝑥)⋅𝜏0(𝑥)+(1−𝜋(𝑥))⋅𝜏1(𝑥)
倾向得分作用:在非随机数据中,高倾向得分样本更可能属于处理组,因此更信任对照组元模型的估计。
这一步是解决选择偏差的问题的。
优缺点分析
优点
- 高效利用小样本:通过交叉预测,同时利用处理组和对照组的数据训练元模型,缓解样本不足问题。
- 适应非随机数据:倾向得分加权可校正选择偏差,提升非随机实验中的估计无偏性。
- 鲁棒的异质性捕捉:元模型直接建模处理效应,而非潜在结果,更聚焦于效应异质性。
缺点
- 计算复杂度高:需训练四个模型(2个基础模型 + 2个元模型 + 倾向得分模型),计算成本显著增加。
- 依赖倾向得分精度:若倾向得分估计不准确,加权集成可能引入偏差。
- 模型链式误差累积:基础模型的预测误差会传递到元模型,影响最终CATE估计。
R-Learner(Robust-Learner)
R-Learner(Robust-Learner)是因果推断中一种基于双重机器学习(Double Machine Learning)和正交化(Orthogonalization)的方法,旨在通过分离倾向得分建模与结果建模,提升处理效应估计的鲁棒性。其核心思想是通过残差学习消除混杂变量影响,从而在模型误设或高维特征下仍能保持无偏估计(R-Learner的思路是通过做某种变换,把因果效应问题转化为一个Loss优化问题,这样的话就可以用大家早已擅长的Machine Learning的手段去优化了。)。
基本思路
第一阶段:分别估计倾向得分π^(X)=P(T=1∣X)和结果模型μ^0(X)=E[Y∣T=0,X],μ^1(X)=E[Y∣T=1,X]。
第二阶段:通过残差正交化,消除混杂变量对处理效应估计的干扰。
结果残差:Y^i=Yi–(Tiμ1(Xi)+(1−Ti)μ0(Xi))
处理残差:T^i=Ti–π(Xi)
处理效应估计:通过回归𝑌̃ 对𝑇̃ 的条件均值,直接估计CATE.
τ^(X)=arg mini=1∑n(Y^i−τ(x)T^i)2
其中τ^(X) 就是CATE
核心假设
无未观测混杂:所有影响处理分配和结果的变量均被观测。
Neyman正交性:估计方程对倾向得分和结果模型的误设具有鲁棒性(通过正交化实现)。
交叉拟合(Cross-fitting):避免过拟合,提升泛化能力。
推理过程可以看这篇文章 R-Learner
优缺点分析
优点
- 对模型误设鲁棒:正交化使估计量对倾向得分和结果模型的误设具有双鲁棒性(只要两者中一个正确即可)。
- 适应高维数据:可结合Lasso、随机森林等高维模型处理大量特征。
- 无偏性保障:在交叉拟合下,即使使用黑箱模型,仍能保证渐近无偏性。
缺点
- 计算复杂度高:需多次训练模型(交叉拟合)和残差计算,耗时较长。
- 小样本表现不稳定:数据量不足时,残差估计可能波动较大。
- 依赖交叉拟合实现:未正确应用交叉拟合时,可能导致过拟合。
适用场景
高维混杂变量:特征维度高(如基因数据、用户行为数据),需正则化模型。
观测性研究(非随机数据):存在复杂选择偏差,需双重去偏。
模型鲁棒性要求高:无法确保倾向得分或结果模型完全正确时。
代码实现
import numpy as np
from sklearn.model_selection import KFold
from sklearn.linear_model import LogisticRegression, Lasso
from sklearn.ensemble import GradientBoostingRegressor
from econml.dml import LinearDML
# 假设数据已加载:X为特征,T为处理变量(连续或二元),Y为结果
# 使用EconML库实现R-Learner(基于LinearDML)
model = LinearDML(
model_y=GradientBoostingRegressor(), # 结果模型
model_t=LogisticRegression(), # 倾向得分模型(若T为二元)
discrete_treatment=True, # 处理变量是否为离散
cv=5 # 交叉拟合折数
)
model.fit(Y, T, X=X)
# 估计CATE
cate = model.effect(X)
# 自定义实现(简化版)
kf = KFold(n_splits=5)
cate_estimates = []
for train_idx, test_idx in kf.split(X):
X_train, X_test = X[train_idx], X[test_idx]
T_train, T_test = T[train_idx], T[test_idx]
Y_train, Y_test = Y[train_idx], Y[test_idx]
# 训练倾向得分模型
ps_model = LogisticRegression().fit(X_train, T_train)
pi_hat = ps_model.predict_proba(X_test)[:, 1]
# 训练结果模型
y_model = Lasso().fit(X_train, Y_train)
mu_hat = y_model.predict(X_test)
# 计算残差
Y_tilde = Y_test - mu_hat
T_tilde = T_test - pi_hat
# 拟合CATE模型
tau_model = GradientBoostingRegressor().fit(X_test, Y_tilde / T_tilde)
cate_estimates.append(tau_model.predict(X_test))
# 合并交叉拟合结果
cate = np.concatenate(cate_estimates)