一、评价指标

来源:互联网 发布:软件行业目标市场分析 编辑:程序博客网 时间:2024/04/30 02:30

一、准确率、召回率、F1值


二、PR曲线、ROC曲线、AUC

(1)概念

在很多情况下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,

排在最后的则是学习器认为“最不可能”是正例的样本。按此顺序逐个把样本作为整理进行预测,则每次可以计算出当前的查全率、查准率,以P(查准率)为纵轴,R(查全率)为横轴作图,就得到了P-R曲线P-R图直观的显

示出学习器在样本总体上的查全率、查准率,在进行比较时,若一个学习器的P-R曲线被另一个完全包住,则可断言后者优于前者,如图1,A优于C;如果两个学习器的P-R曲线发生了交叉,如A和B,则难以一般性的断言两

者孰优孰劣,只能在具体的P或R条件下进行比较。然而,在很多情形下,人们往往仍希望把学习器A和B比个高低,这时一个比较合理的判断依据是比较曲线下面积的大小,它在一定程度上表征了学习器在P和R上取得相对“双高”的比例,但这个值不太容易估算,因此人们设计了一些综合考虑P和R的度量。平衡点(BEP)就是这样一个度量,是P=R时的取值,基于BEP,可任务A优于B。


图1 P-R曲线

以召回率(真正率)为y轴,以特异性(假正率)为x轴,我们就直接得到了RoC曲线。从召回率和特异性的定义可以理解,召回率越高,特异性越小,我们的模型和算法就越高效。也就是画出来的RoC曲线越靠近左上越好。如下图左图所示。从几何的角度讲,RoC曲线下方的面积越大越大,则模型越优。所以有时候我们用RoC曲线下的面积,即AUC(Area Under Curve)值来作为算法和模型好坏的标准。

(2)如何画ROC曲线

对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值,这又是如何得到的呢?我们先来看一下Wikipedia上对ROC曲线的定义:
In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.
问题在于“as its discrimination threashold is varied”。如何理解这里的“discrimination threashold”呢?我们忽略了分类器的一个重要功能“概率输出”,即表示分类器认为某个样本具有多大的概率属于正样本(或负样本)。通过更深入地了解各个分类器的内部机理,我们总能想办法得到一种概率输出。通常来说,是将一个实数范围通过某个变换映射到(0,1)区间3
假如我们已经得到了所有样本的概率输出(属于正样本的概率),现在的问题是如何改变“discrimination threashold”?我们根据每个测试样本属于正样本的概率值从大到小排序。下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率4

接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:

当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。
其实,我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)。评分越高,表示分类器越肯定地认为这个测试样本是正样本,而且同时使用各个评分值作为threshold。我认为将评分值转化为概率更易于理解一些。

(3)ROC曲线与PR曲线的关系

   ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。

   PR曲线会面临一个问题,当需要获得更高recall时,model需要输出更多的样本,precision可能会伴随出现下降/不变/升高,得到的曲线会出现浮动差异(出现锯齿),无法像ROC一样保证单调性。

   AUC用得比较多的一个重要原因是,实际环境中正负样本极不均衡,PR曲线无法很好反映出分类器性能,而ROC受此影响小。



三、K-S值

ROC曲线及AUC系数主要用来检验模型对客户进行正确排序的能力。ROC曲线描述了在一定累计好客户比例下的累计坏客户的比例,模型的分别能力越强,ROC曲线越往左上角靠近。AUC系数表示ROC曲线下方的面积。AUC系数越高,模型的风险区分能力越强。

KS(Kolmogorov-Smirnov)检验:K-S检验主要是验证模型对违约对象的区分能力,通常是在模型预测全体样本的信用评分后,将全体样本按违约与非违约分为两部分,然后用KS统计量来检验这两组样本信用评分的分布是否有显著差异。
要弄明白ks值和auc值的关系首先要弄懂ROC曲线和K-S曲线是怎么画出来的。ROC曲线是xxx(定义看百度)。以假正率为横坐标、真正率为纵坐标绘制成曲线,曲线下面积越大,准确性越高。在ROC曲线上,最靠近坐标图左上方的点为真正率和假正率均较高的临界值。见下图(a).

到这里其实已经可以计算KS值了,ks=max(TPR-FPR)。但是为什么还要一个KS曲线呢?我个人认为一个原因是搞机器学习和统计的思维不一样大笑,还一个原因是因为KS曲线能一目了然的看出在哪里cut_off,其他原因大神补充。KS曲线见下图。

横坐标是分段,纵坐标有两个,黑色的是TPR,红色曲线是FPR。
从某个角度上来讲ROC曲线和KS曲线是一回事,只是横纵坐标的取法不同而已。拿逻辑回归举例,模型训练完成之后每个样本都会得到一个类概率值(注意是类似的类),把样本按这个类概率值排序后分成10(当然20等份也可以,只要你喜欢就行)等份,每一份单独计算它的真正率和假正率,然后计算累计概率值,用真正率和假正率的累计做为横纵坐标画出来的就是ROC曲线,用10等分做为横坐标,用真正率和假正率的累计值分别做为纵坐标就得到两个曲线,这就是K-S曲线。AUC值就是ROC曲线下方的面积值,而ks值就是ks曲线中两条曲线之间的最大间隔距离。由于ks曲线能直观的找出模型中差异最大的一个分段,因此适合用于cut_off,像评分卡这种就很适合用ks值来评估。但是ks值只能反映出哪个分段是区分最大的,而不能总体反映出所有分段的效果,因果AUC值更能胜任。


原创粉丝点击