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

357 阅读3分钟

基础版本

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

image.png

具体步骤参考上图公式:训练时,利用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组个体,训练分类器PC

PC=P(Y=1X,W=0)P^C=P(Y=1|X,W=0)

(2.)对于treatment组个体,利用PC获得预测值PC(X),作为补充特征和X一起喂入模型,训练分类器PT

PT=P(Y=1X,PC(X),W=1)P^T=P(Y=1|X,P_C(X),W=1)

(3.)由此,增益值就是二者的差值

uplift(xi)=PT(xi,PC(xi))PC(xi)uplift(x_i)=P^T(x_i,P_C(x_i))-P^C(x_i)

显然,第二个分类器就是学习个体在treatment组相比在control组的增益。 详细步骤参考下图公式,上述过程是先学习PC后学习PT,类似地,也可以先学习PT后学习PC。

image.png

公众号原文:Uplift Model:T-Learner类增益模型实战

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    )

公众号原文:Uplift Model:T-Learner类增益模型实战

T-Learner增益模型实战案例

数据集预处理

参考前面的公众号文章:Uplift Model:S-Learner类增益模型实战

T-Learner模型训练

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

关于Uplift Model:T-Learner类增益模型实战的内容基本介绍完了,对相关主题感兴趣的读者欢迎留言交流讨论。感谢你看到这里,你的支持是我持续创作的动力~更多优质内容请关注公众号:

小.jpg