模型优劣的评价有完整的评价指标,通过这些指标我们可以评判出该模型的性能,同时可以比对不同模型进行择优,下面我们从混淆模型开始,学习通过ROC曲线、AUC以及GAUC来对普通分类模型以及推荐模型的评判。
一、分类任务和混淆矩阵
在分类任务当中,存在四种情况:真正类、真负类、假正类、假负类
通过混淆矩阵我们可以一目了然
真实正 | 真实负 | |
---|---|---|
预测正 | TP | FP |
预测负 | FN | TN |
- True/False代表预测的正确/错误; Positive/Negative代表预测值为1/0.
- 真阳率(召回率):,正样本被预测为1的概率,反映真实值当中被召回的概率。比如:真的好瓜当中有多少被预测为好瓜。
- 假阳率:,负样本被预测为1的概率,同上反映了真的坏瓜当中有多少被预测为坏瓜。
二、ROC曲线
在对样本进行预测时,一般会出现以下的情况。绿色代表真实为正,褐色代表真实为负,每一个样本的预测结果都是一个比例x(0-1之间),我们通常规定当x>0.5时预测为正,x<=0.5时预测为负(这个0.5被称为阈值)。
但实际我们会发现,不同的阈值直接影响了最终的分类结果:
- threshold=0.35:正样本全预测正确,负样本有两个预测错误
- threshold=0.50:正样本有一个预测错误,负样本有一个预测错误
- threshold=0.65:正样本有两个预测错误,负样本全预测正确
我们设想,如果存在一个理想化模型(如下图左侧),通过一个阈值能够直接将所有的正负样本分割开,那么这个模型就是我们认为的好模型。而如果通过某个阈值不能很好的将正负样本分开,那么这个模型就不是好模型(如下图右侧)
思考如何能将两个图像很好的反映到一个指标上呢?即通过一个指标我们能区分出好模型与坏模型,ROC曲线呼之欲出。
我们查看下图,通过阈值的变化,能不同程度的将正样本和负样本分离出来,即我们只要能找到反映阈值变化的指标就能用来反映模型分离的优劣。
接着上方的阈值讨论,阈值的变化能通过TPR和FPR这两个指标反映出来,当阈值设定较小,我们能很好的把正样本分离出来,阈值设定较大,我们能很好的把负样本分离处理出来,那么我们就通过TPR和FPR这两个指标作为纵轴和横轴建立坐标系,这就是ROC曲线(ROC曲线本质是离散的,为观察方便一般进行平滑处理)。
三、AUC
为了方便比较不同模型ROC曲线之间的优劣(有时会存在交叉),我们引入AUC,AUC是ROC曲线与FPR围成的面积占TPR与FPR组成面积的比例,也就是ROC对FPR的积分占总积分的比例,通过这个指标能更清晰的对模型进行对比。
再来仔细理解一下这个积分
ROC对FPR的积分:每个预测为正的样本,能比多少个负样本大
总积分:正样本数∗负样本数
因此这里我们可用通过这种方式重新计算第一节中的AUC
第一节中,原始有五个正样本:
p=0.9的真实正样本,它在所有5个负样本前面,因此记为5
p=0.8的真实正样本,它在所有5个负样本前面,因此记为5
p=0.7的真实正样本,它在所有5个负样本前面,因此记为5
p=0.6的真实正样本,它在4个负样本前面,因此记为4
p=0.4的真实正样本,它在3个负样本前面,因此记为3
交叉区域记为5*5=25
因此最终的AUC记为:
四、GAUC
auc在传统的机器学习二分类中还是很能打的,但是有一种场景,虽然是分类模型,但是却不适用auc,即广告推荐领域。
推荐领域使用的CTR(点击率)来作为最终的商用指标,但是在训练推荐模型时,却不用这个指标,用的是GAUC,为什么呢,
因为推荐模型目前比较成熟的模式是训练分类模型,这个分类模型的任务是预测用户是否会点击给定的商品,因此,推荐系统的核心,仍然是一个二分类问题,但是是更细粒度的二分类。
例如给定一下题目:我们准备训练一个模型用来预测用户A和用户B购买iphone、华为和小米的可能性,我们训练了模型α
对于所有出现的概率值:我们可以计算得到AUC为 (2+2+1) /23 = 0.833,(讲解:比0.5小的负样本有2个,比0.4小的负样本有2个,比0.2小的负样本有一个,正负样本乘积为32)。
但是,如果对每个用户查看AUC,则有:
- 用户A auc: 1/1*1 = 1
- 用户B auc:(1+1)/1*2 = 1
明显能更好的反映出单个用户的预测效果
auc反映的是整体样本间的一个排序能力,而在计算广告领域,我们实际要衡量的是不同用户对不同广告之间的排序能力,因此实际应该更关注的是同一个用户对不同广告间的排序能力。
GAUC(group auc)实际是计算每个用户的auc,然后加权平均,最后得到group auc,这样就能减少不同用户间的排序结果不太好比较这一影响。
group auc具体公式如下:
实际处理时权重一般可以设为每个用户view或click的次数,而且会过滤掉单个用户全是正样本或负样本的情况。