Uplift Model:T-Learner类增益模型实战

以下内容梳理了潜在结果框架的常用算法和原理,并依据相关论文推理,结合案例做了代码实现:
潜在结果框架:因果推断世界里的平行时空
Uplift Model:S-Learner类增益模型实战
Uplift Model:T-Learner类增益模型实战
Class Transformation Model增益模型
Uplift Tree Model:增益树模型原理
Uplift模型评估指标AUUC

T-Learner增益模型原理

基础版本
T-Learner增益模型方法,也就是Two models approach。python的scikit-uplift包实现了相应sklift.models.TwoModels算法类,基础版本是vanilla方法。
在这里插入图片描述

具体步骤参考上图公式:训练时,利用treatment组个体,训练treatment模型,利用control组个体,训练control模型;预估时,将测试个体特征分别喂入treatment模型和control模型,得到两个预测概率做差,即是这组个体的uplift。该方法的主要缺点是treatment组和control组分别训练响应模型,是间接建模增益uplift,存在较大的误差。
本文内容参考公众号原文: Uplift Model:T-Learner类增益模型实战

升级版本
此外,参考多分类问题的链式分类器方法,scikit-uplift包实现了T-Learner类增益模型的升级版本,即sklift.models.TwoModels类的ddr_control方法。该方法的主要思想如下:如果训练的是L分类问题,就训练L个分类器,每个分类器都是二分类的;训练时,第i个分类器 会使用前i-1个分类器的预估值作为特征,这样做可以建模第i类和前i-1类之间的依赖性。基于该思想的增益模型建模方法就是“两阶段增益建模方法”。
对于二元干预二分类响应变量的情况,具体步骤如下:
(1.)基于control组个体,训练分类器 P C P_C PC
P C = P ( Y = 1 ∣ X , W = 0 ) P^C=P(Y=1|X,W=0) PC=P(Y=1∣X,W=0)
(2.)对于treatment组个体,利用 P C P_C PC获得预测值 P C ( X ) P_C(X) PC(X),作为补充特征 X X X一起喂入模型,训练分类器 P T P_T PT
P T = P ( Y = 1 ∣ X , P C ( X ) , W = 1 ) P^T=P(Y=1|X,P_C(X),W=1) PT=P(Y=1∣X,PC(X),W=1)
(3.)由此,增益值就是二者的差值
u p l i f t ( x i ) = P T ( x i , P C ( x i ) ) − P C ( x i ) uplift(x_i)=P^T(x_i, P_C(x_i))-P^C(x_i) uplift(xi)=PT(xi,PC(xi))PC(xi)
显然,第二个分类器就是学习个体在treatment组相比在control组的增益。详细步骤参考下图公式,上述过程是先学习 后学习 ,类似地,也可以先学习 后学习 。
在这里插入图片描述

Scikit-uplift包TwoModels类源码

在scikit-uplift包TwoModels类是实现T-Learner类增益模型的源码,如下代码片段是拟合样本数据的fit()函数核心实现部分,self.method取值vanilla,对应T-Learner基础版本,就是控制组和干预组各自的样本训练各自的模型;self.method取值ddr_control,对应T-Learner升级版本,先基于控制组样本 训练控制模型;再利用控制模型 预测干预组样本,得到预测概率;将该概率与干预组样本特征拼接,一起用于 训练干预模型;self.method取值ddr_treatment,与ddr_control类似,仅仅是控制组模型和干预组模型的训练顺序调换。

if self.method == 'vanilla':   # T-Learner基础版本,控制组和干预组各自的样本 训练各自的模型
    self.estimator_ctrl.fit(
        X_ctrl, y_ctrl, **estimator_ctrl_fit_params
    )
    self.estimator_trmnt.fit(
        X_trmnt, y_trmnt, **estimator_trmnt_fit_params
    )
if self.method == 'ddr_control':   # T-Learner升级版本
    self.estimator_ctrl.fit(   # 先基于控制组样本 训练控制模型
        X_ctrl, y_ctrl, **estimator_ctrl_fit_params
    )
    if self._type_of_target == 'binary':   # 利用控制模型 预测干预组样本,得到预测概率
        ddr_control = self.estimator_ctrl.predict_proba(X_trmnt)[:, 1]
    else:
        ddr_control = self.estimator_ctrl.predict(X_trmnt)
    if isinstance(X_trmnt, np.ndarray):   # 将该概率与干预组样本特征拼接,一起用于 训练干预模型
        X_trmnt_mod = np.column_stack((X_trmnt, ddr_control))
    elif isinstance(X_trmnt, pd.DataFrame):
        X_trmnt_mod = X_trmnt.assign(ddr_control=ddr_control)
    else:
        raise TypeError("Expected numpy.ndarray or pandas.DataFrame, got %s" % type(X_trmnt))
    self.estimator_trmnt.fit(
        X_trmnt_mod, y_trmnt, **estimator_trmnt_fit_params
    )

T-Learner增益模型实战案例

更多内容参考公众号原文: Uplift Model:T-Learner类增益模型实战

更多内容欢迎关注微信公众号:瑞行AI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值