【Uplift】评估方法篇

https://zhuanlan.zhihu.com/p/363082639


和标准的预测方法不同,由于”反事实“的存在,并没有真实的uplift标签,因此uplift模型无法在样本维度上进行评估。但如果有随机试验采集的数据,则可以用平均水平来评估uplift模型的效果。

本文将分为线上评估和离线评估两部分介绍,其中线上评估主要是AB策略;离线评估是AUUC、Qini等。

线上评估方法

最好的验证模型或策略效果的方法就是做线上的AB实验。在设计AB实验对比时,要小心处理目标的数据范围,在什么节点进行分流。

如果我们想知道的是全局的策略效果,则要在一开始就分流;而如果想知道策略生效部分的效果,则要在策略判定之后,对判定生效的部分进行分流,其中A桶原样返回,B桶生效返回。

下面是腾讯广告做uplift分析的流程图示例,通过线上AB试验的方式给出增量效果。

在这里插入图片描述

离线评估方法

线上评估虽然准确,但我们也需要具备离线评估的能力,避免浪费线上流量。与线上评估看整体的增量不同,离线评估需要能支持模型的效果对比。

离线评估方法有很多种,都需要对数据做分组(或累积)。将所有样本按照模型给出的uplift得分降序排列,按照等比分为K组(bins),后续的效果评估则通过对比相应组内Treatment组和Control组的得分差异实现。

Uplift decile charts

用第k组内Treatment和Control样本的 y ˉ \bar{y} yˉ之差表示,如下图表示按照uplift得分降序排列后,前50%的样本Treatment是正效果的,而后50%是负效果。

该方法虽然直观,但很难用于进行模型间的对比,如难以说明下面两个模型的优劣。

在这里插入图片描述

Cumulative uplift/gain

Cumulative uplift:通过计算topK组内Treatment和Control组的 y ˉ \bar{y} yˉ差值,可以表达在topK组得分的数据内,增量效果如何。如左图。

Cumulative gain:一些场景中,我们需要的不只是按照”uplift“选中部分的效果,而需要的是根据”uplift“来决策是Treat还是Control之后,能够带来的增量绝对量有多少。如右图,此时选择最高点即为最佳效果,再往后的实际是Control组优于Treatment组的部分。

公式如下, Y Y Y表示分组正例数量, N N N表示分组总量, ⋅ T \cdot^T T表示Treatment组, ⋅ C \cdot^C C表示Control组。
( Y T N T − Y C N C ) ( N T + N C ) \left(\frac{Y^{T}}{N^{T}}-\frac{Y^{C}}{N^{C}}\right)\left(N^{T}+N^{C}\right) (NTYTN

### Uplift 模型中基尼系数的计算 在 uplift 模型评估过程中,Qini 系数是一个重要的指标,该系数基于 Qini 曲线下的面积 (AUUC, Area Under the Uplift Curve),用于衡量模型的效果。具体而言,Qini 系数越大,则表明模型表现越佳[^2]。 为了计算基尼系数,通常遵循以下过程: #### 数据准备 首先准备好经过 uplift 模型预测后的样本集,其中应包含每个个体的实际响应结果以及对应的 uplift 预测值。 #### 排序与分桶 按照 uplift 分数值对所有观测对象进行降序排列,并将其划分为若干个相等大小的小桶(bucket)。这一步骤旨在模拟不同阈值条件下实施干预措施可能带来的影响变化趋势。 #### 构建Qini曲线 构建 Qini 曲线时,横坐标表示累计处理比例;纵坐标则代表累积净收益率。随着处理比例增加,绘制出对应点并连接形成一条连续上升的趋势线——即所谓的“Qini 曲线”。 #### 计算曲线下方面积(AUUC) 最后,通过积分法或其他近似算法求得此条曲线所包围区域总面积作为 AUUC 的度量标准。这一数值可以直接反映给定 uplift 模型相对于随机猜测所能提供额外价值的程度。 ```python import numpy as np from sklearn.utils import check_random_state def compute_qini_coefficient(y_true, y_score, treatment): """ Compute the qini coefficient. Parameters: y_true : array-like of shape (n_samples,) True binary labels or binary outcomes. y_score : array-like of shape (n_samples,) Predicted probabilities from an uplift model. treatment : array-like of shape (n_samples,) Treatment indicators (0 for control and 1 for treated). Returns: float: The computed qini coefficient value. """ # Sort by predicted uplift scores in descending order sorted_indices = np.argsort(-y_score) n_total = len(treatment) n_treated = sum(treatment) cum_gain_control = [] cum_gain_treat = [] rng = check_random_state(None) for i in range(1, n_total + 1): idx = sorted_indices[:i] treat_idx = idx[treatment[idx] == 1] ctrl_idx = idx[treatment[idx] == 0] if len(ctrl_idx) > 0: gain_ctrl = sum((y_true[ctrl_idx]) / max(len(ctrl_idx), 1)) else: gain_ctrl = 0 if len(treat_idx) > 0: gain_trtmnt = sum((y_true[treat_idx]) / max(len(treat_idx), 1)) else: gain_trtmnt = 0 net_effect = ((gain_trtmnt * min(i, n_treated)) - (gain_ctrl * min(i, n_total - n_treated))) / n_total cum_gain_control.append(gain_ctrl) cum_gain_treat.append(net_effect) area_under_curve = abs(np.trapz(cum_gain_treat)) return area_under_curve ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值