基础版本
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组个体,训练分类器PC
(2.)对于treatment组个体,利用PC获得预测值PC(X),作为补充特征和X一起喂入模型,训练分类器PT
(3.)由此,增益值就是二者的差值
显然,第二个分类器就是学习个体在treatment组相比在control组的增益。 详细步骤参考下图公式,上述过程是先学习PC后学习PT,类似地,也可以先学习PT后学习PC。
公众号原文: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类增益模型实战的内容基本介绍完了,对相关主题感兴趣的读者欢迎留言交流讨论。感谢你看到这里,你的支持是我持续创作的动力~更多优质内容请关注公众号: