auc与gauc

博主写的非常好

转自:https://blog.youkuaiyun.com/hnu2012/article/details/87892368

在机器学习算法中,很多情况我们都是把auc当成最常用的一个评价指标,而auc反映整体样本间的排序能力,但是有时候auc这个指标可能并不能完全说明问题,有可能auc并不能真正反映模型的好坏,以CTR预估算法(推荐算法一般把这个作为一个很重要的指标)为例,把用户点击的样本当作正样本,没有点击的样本当作负样本,把这个任务当成一个二分类进行处理,最后模型输出的是样本是否被点击的概率。

 举个很简单的例子,假如有两个用户,分别是甲和乙,一共有5个样本,其中+表示正样本,-表示负样本,我们把5个样本按照模型A预测的score从小到大排序,得到 甲-,甲+,乙-,甲+,乙+. 那么实际的auc应该是 (1+2+2)/(32)=0.833, 那假如有另一个模型B,把这5个样本根据score从小到大排序后,得到 甲-,甲+,甲+,乙-,乙+, 那么该模型预测的auc是(1+1+2)/(32)=0.667.

 那么根据auc的表现来看,模型A的表现优于模型B,但是从实际情况来看,对于用户甲,模型B把其所有的负样本的打分都比正样本低,故,对于用户甲,模型B的auc是1, 同理对于用户乙,模型B的auc也应该是1,同样,对于用户甲和乙,模型A的auc也是1,所以从实际情况来看,模型B的效果和模型A应该是一样好的,这和实际的auc的结果矛盾。

 可能auc这个指标失真了,因为用户广告之间的排序是个性化的,不同用户的排序结果不太好比较,这可能导致全局auc并不能反映真实情况。

 因为auc反映的是整体样本间的一个排序能力,而在计算广告领域,我们实际要衡量的是不同用户对不同广告之间的排序能力, 实际更关注的是同一个用户对不同广告间的排序能力,为此,参考了阿里妈妈团队之前有使用的group auc的评价指标 group auc实际是计算每个用户的auc,然后加权平均,最后得到group auc,这样就能减少不同用户间的排序结果不太好比较这一影响。group auc具体公式如下:

gauc计算公式

 实际处理时权重一般可以设为每个用户view的次数,或click的次数,而且一般计算时,会过滤掉单个用户全是正样本或负样本的情况。

 但是实际上一般还是主要看auc这个指标,但是当发现auc不能很好的反映模型的好坏(比如auc增加了很多,实际效果却变差了),这时候可以看一下gauc这个指标。

gauc计算的代码可以参考:https://github.com/qiaoguan/deep-ctr-prediction/blob/master/DeepCross/metric.py

关于auc为什么这么计算,可以参考:
https://en.wikipedia.org/wiki/Receiver_operating_characteristic

在使用GAUC(Grouped AUC)评估模型时,若发现GAUC提升但整体AUC下降,这种现象可能源于以下几个原因及相应的解决方法: ### 原因分析 1. **用户组间差异性** GAUC的计算方式是针对每个用户计算AUC,然后根据用户的行为(如点击次数或曝光次数)进行加权平均,这使得GAUC更关注于用户内部的排序能力,而整体AUC则关注全局排序效果。如果某些用户组的排序能力显著提升,但其他用户组的排序能力下降,则可能导致GAUC提升而整体AUC下降。 这种现象可能表明模型在某些用户群体上的表现优化过度,而忽略了其他群体的需求 [^2]。 2. **样本分布不均** 如果训练数据中某些用户的行为样本较多,而其他用户的行为样本较少,模型可能对高频用户的学习效果更好,从而提升其对应的GAUC,但整体AUC可能因频用户的排序效果不佳而下降。 这种情况常见于推荐系统中,用户的活跃度差异较大,导致模型在不同用户之间的泛化能力不一致 [^3]。 3. **模型过拟合特定用户行为** 模型可能在训练过程中过度适应某些用户的行为模式,导致在这些用户上的排序能力提升,但在整体数据集上的泛化能力下降。这种过拟合现象会使得GAUC上升,而整体AUC下降 [^1]。 4. **评估指标的偏差** GAUC通过加权平均的方式削弱了不同用户之间排序结果的可比性问题,但它可能掩盖了整体排序质量的变化。如果整体AUC下降,说明全局排序效果变差,而GAUC的提升可能仅反映了部分用户的优化效果 [^3]。 --- ### 解决方法 1. **平衡用户权重** 在计算GAUC时,可以调整权重策略,避免某些用户因行为次数多而主导整体指标。例如,可以引入归一化机制,使得每个用户的权重更加均衡,从而减少对高频用户的过度依赖 [^2]。 2. **引入整体AUC作为辅助指标** 在模型优化过程中,除了关注GAUC外,还应同时监控整体AUC的变化。可以通过多目标优化的方法,使得模型在提升GAUC的同时,不牺牲整体AUC的表现 [^1]。 3. **增强模型泛化能力** 通过引入正则化技术(如L2正则化、Dropout)或数据增强方法,提升模型在不同用户群体上的泛化能力。此外,可以采用负采样策略,使得训练数据更接近真实场景,减少模型对特定用户行为的过拟合 [^3]。 4. **分层评估调优** 将用户按活跃度或行为特征进行分层,分别评估不同层次用户的AUCGAUC变化情况。针对表现较差的用户群体进行针对性优化,从而提升整体AUC [^2]。 5. **引入多样性排序策略** 在推荐或搜索场景中,可以引入多样性排序策略,避免模型过度集中于某些用户的行为模式。例如,使用Exploration-Exploitation策略,在排序中引入一定的随机性,提升模型在全局数据上的适应能力 [^1]。 --- ### 示例代码:GAUC计算逻辑 以下是一个简化的GAUC计算示例: ```python import numpy as np from sklearn.metrics import roc_auc_score def calculate_gauc(y_true, y_score, user_ids): unique_users = np.unique(user_ids) gauc = 0.0 total_weight = 0.0 for user in unique_users: idx = (user_ids == user) y_true_user = y_true[idx] y_score_user = y_score[idx] # 过滤掉全为正样本或负样本的用户 if len(np.unique(y_true_user)) < 2: continue auc = roc_auc_score(y_true_user, y_score_user) weight = np.sum(y_true_user) # 可根据点击次数或曝光次数调整权重 gauc += auc * weight total_weight += weight return gauc / total_weight if total_weight > 0 else 0.0 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值