推荐系统(四)——因果效应uplift model系列模型S-Learner,T-Learner,X-Learner

在之前的文章中我们介绍了使用因果推断中的去除混杂和反事实的相关理论来纠正推荐系统中的偏差问题。在这篇文章中主要和大家分享uplift model相关知识和方法。

例子

小夏的商铺在上次请了明星代言后,销量有所上升,但是他不清楚是不是每个人都对这个明星感冒,有的用户可能没看到广告也打算购买。如果小夏可以给部分用户推送明星代言广告,就可以节约一些成本了(机智的小伙伴可能已经发现了,这里就是一个反事实推断的过程,即如果不展示广告会是什么样呢?)。这里就可以用uplift model来建模。

基础知识

uplift model的作用是去探究因果效应(causal effect),即上述例子中展示与不展示广告的作用有多大。但是一般而言我们是只能得到一方面的数据集,即当前状态下要么是展示了广告,要么是没展示广告。
treatment(T):在对象上进行的干预,即do,展示与不展示广告
variable(X):出treatment之外自带的属性特征,如年龄、性别等,这些属性多半是不受干预影响的,即无论是否展示广告,用户的性别特征都不会改变
ITE:individual treatment effect,单个用户的效应, I T E = Y 1 ( x ) − Y 0 ( x ) ITE=Y_1(x)-Y_0(x) ITE=Y1(x)Y0(x)
ATE:average treatment effect,整体的平均效应, A T E = E ( Y 1 ( x ) − Y 0 ( x ) ) ATE=E(Y_1(x)-Y_0(x)) ATE=E(Y1(x)Y0(x))

S-Learner

在这里插入图片描述

通过现有模型(LR,GBDT,NN等)对干预和不干预的数据进行训练,在预测的时候分别对该用户被干预和不被干预时的P进行预测计算,相减后便是ITE

<think>嗯,用户现在问的是,在已经用直接随机抽样分组之后,后续应该如何构建uplift model。首先,我需要回忆一下uplift model的基本概念和常用方法。用户之前的问题是关于如何划分干预组和对照组,现在他们已经完成了分组,接下来需要建模,所以我需要给出具体的步骤和方法。 首先,用户可能对uplift model不太熟悉,可能需要先简单解释一下什么是uplift modelUplift model的核心是估计干预(比如优惠券)对个体用户的处理效应,即预测某个用户如果接受干预会有怎样的效果提升。这和普通的预测模型不同,因为它需要同时考虑干预组和对照组的数据,找出干预带来的增量效果。 接下来,用户已经做了随机抽样分组,说明干预组和对照组在理论上应该是平衡的,没有系统性的差异。这种情况下,构建uplift model的方法可能有哪些呢?常见的比如差分响应模型(Two-Model Approach)、类转换方法(Class Transformation)、基于元学习器的方法(如S-Learner、T-Learner、X-Learner),以及一些树模型因果森林(Causal Forest)。需要选择适合用户当前情况的最简单有效的方法。 考虑到用户之前提到要最简单的方法,可能他们希望步骤不要太复杂,不需要太多编程或复杂的算法。因此,可能需要推荐Two-Model或者S-Learner这种相对简单的方法。同时,要给出具体的步骤,比如数据准备、模型选择、训练、评估和应用。 然后,需要考虑到用户可能需要评估模型的效果,这时候需要介绍一些评估指标,比如Qini系数、AUUC(Area Under the Uplift Curve)等,但可能用户对这些不太熟悉,所以需要用更简单的方式解释,比如使用分组验证的方法,将测试集按预测的uplift分组成十组,然后看高分组和低分组的平均处理效应是否符合预期。 另外,需要注意提醒用户,即使分组是随机的,也需要检查基线特征的平衡性,确保没有混杂变量影响结果。同时,模型的应用场景是什么?比如是否用于选择最有可能受干预影响的用户进行下一次优惠券发放,这时候需要指导用户如何根据预测的uplift值排序,选择高uplift的用户。 可能的误区是用户可能直接比较干预组和对照组的输出,而忽略了个体处理效应的异质性,需要强调uplift model和普通响应模型的区别。此外,样本量是否足够,特征工程是否合理,比如是否包含用户的历史行为、 demographics等特征。 最后,可能需要给出一个简单的示例流程,比如使用Python的sklearn库构建两个模型,或者使用现成的包如CausalML,然后评估模型效果,并应用于实际策略中。但用户可能需要更简化的步骤,所以分点说明,确保他们能一步步操作。</think>以下是构建**Uplift Model**的极简流程(基于随机分组数据),从原理到落地应用分步拆解: --- ### **1. 核心原理** - **目标**:预测用户因干预(如优惠券)带来的增量效果,即: $$ \text{Uplift} = E[Y|T=1] - E[Y|T=0] $$ 其中 $T=1$ 表示干预组,$T=0$ 表示对照组。 - **关键假设**:随机分组已平衡混杂因素(无需调整变量)。 --- ### **2. 极简建模方法(任选其一)** #### **方法一:差分响应模型(Two-Model)** - **步骤**: 1. **训练两个模型**: - 模型 $M_1$:用**干预组数据**预测结果 $Y$(如消费金额)。 - 模型 $M_0$:用**对照组数据**预测结果 $Y$。 2. **计算Uplift**: - 对每个用户,用两个模型分别预测 $\hat{Y}_1$ 和 $\hat{Y}_0$。 - 增量效应:$\text{Uplift} = \hat{Y}_1 - \hat{Y}_0$。 - **代码示例(Python)**: ```python from sklearn.ensemble import RandomForestRegressor # 拆分干预组/对照组 df_treatment = df[df['group'] == 1] df_control = df[df['group'] == 0] # 训练模型 model_treatment = RandomForestRegressor().fit(df_treatment[features], df_treatment['Y']) model_control = RandomForestRegressor().fit(df_control[features], df_control['Y']) # 预测Uplift df['uplift'] = model_treatment.predict(df[features]) - model_control.predict(df[features]) ``` #### **方法二:S-Learner(单模型法)** - **步骤**: 1. **将干预变量 $T$ 作为特征**,与其他特征一起输入模型。 2. **预测反事实**: - 对每个用户,分别预测 $T=1$ 和 $T=0$ 时的 $Y$。 - $\text{Uplift} = \hat{Y}(T=1) - \hat{Y}(T=0)$。 - **优点**:只需训练一个模型,计算量更小。 - **代码示例**: ```python model = RandomForestRegressor().fit(df[features + ['T']], df['Y']) # 复制数据并设置T=1/T=0 df_t1 = df.copy().assign(T=1) df_t0 = df.copy().assign(T=0) df['uplift'] = model.predict(df_t1[features + ['T']]) - model.predict(df_t0[features + ['T']]) ``` --- ### **3. 效果验证(无需复杂指标)** - **步骤**: 1. 将测试集按预测的 `uplift` 从高到低排序,分为10组。 2. 计算**每组的实际干预效应**: $$ \text{实际效应} = \frac{\sum Y|T=1}{N_T=1} - \frac{\sum Y|T=0}{N_T=0} $$ 3. 若模型有效,**高uplift组的实际效应应显著高于低uplift组**。 --- ### **4. 业务落地** - **精准投放**:选择预测Uplift最高的前20%用户发放优惠券。 - **避免资源浪费**:对Uplift为负的用户停止干预(避免反效果)。 --- ### **5. 注意事项** 1. **特征选择**:优先使用干预前可观测的变量(如历史消费、活跃天数)。 2. **避免数据泄漏**:确保特征不包含干预后的信息(如“是否使用优惠券”)。 3. **极简调参**:直接使用默认参数的随机森林或LightGBM即可,无需复杂调优。 --- ### **示例结果解读** | Uplift分组 | 干预组人均消费 | 对照组人均消费 | 实际Uplift | |-----------|---------------|---------------|-----------| | Top 10% | ¥150 | ¥100 | **+¥50** | | Bottom 10%| ¥80 | ¥90 | **-¥10** | 若呈现此模式,说明模型成功识别出高敏感用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值