建模知识2: ROC、AUC、K-S曲线

1、混淆矩阵(confusion matrix)

    一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。

建模知识2: ROC、AUC、K-S曲线_第1张图片

以癌症的诊断为例,1代表癌症,0代表无病。

建模知识2: ROC、AUC、K-S曲线_第2张图片

有以下指标:

(1) TPR(True Postive Rate)真正类率:正类判断成正类,也称命中率,即所有真实的“1”中,有多少被成功选出;

640?wx_fmt=png

(2) TNR(True Negative Rate)真负类率:负类判断成负类。Specificity(特异性)

640?wx_fmt=png

(3) FPR(False Postive Rate)负正类率:负类判断成正类,即所有真实的“0”中,有多少被模型误判为1了。也称误诊率=1-Specificity。

640?wx_fmt=png

2、ROC(Receiver Operating Characteristic),受试者工作特征曲线

        ROC曲线最早是运用在军事上,后来逐渐运用到医学领域。相传在第二次世界大战期间,雷达兵的任务之一就是死死地盯住雷达显示器,观察是否有敌机来袭。理论上讲,只要有敌机来袭,雷达屏幕上就会出现相应的信号,但是实际上,有时如果有飞鸟出现在雷达扫描区域时,雷达屏幕上有时也会出现信号。这种情况令雷达兵烦恼不已:如果过于谨慎,凡是有信号就确定为敌机来袭,显然会增加误报风险;如果过于大胆,凡是信号都认为飞鸟,又会增加漏报的风险。每个雷达兵都竭尽所能地研究飞鸟信号和飞机信号之间的区别,以便增加预报的准确性。但问题在于,每个雷达兵都有自己的判别标准,有的雷达兵比较谨慎,容易出现误报;有的雷达兵则比较胆大,容易出现漏报。

    为了研究每个雷达兵预报的准确性,雷达兵的管理者汇总了所有雷达兵的预报特点,特别是他们漏报和误报的概率,并将这些概率画到一个二维坐标里面。这个二维坐标的纵坐标为敏感性,即在所有敌机来袭的事件中,每个雷达兵准确预报的概率。而横坐标则为误诊率(1-特异性),表示了在所有非敌机来袭信号中,雷达兵预报错误的概率。由于每个雷达兵的预报标准不同,且得到的敏感性和特异性的组合也不同。将这些雷达兵的预报性能进行汇总后,雷达兵管理员发现他们刚好在一条曲线上,这条曲线就是我们经常在医学杂志上看见的ROC曲线。   

横轴:负正类率(false postive rate FPR),FPR越小,误判率越低,预测正类中实际负类越小。

纵轴:真正类率(true postive rate TPR),TPR越大,命中率越高,预测正类中实际正类越多

建模知识2: ROC、AUC、K-S曲线_第3张图片

ROC曲线图中的四个点和一条线。

  • 第一个点,(0,1),即x(FPR)=0,y(TPR)=1,这意味着FN(false negative)=0,并且FP(false positive)=0。最完美的诊断,它将所有的样本都正确分类

  • 第二个点,(1,0),即FPR=1,TPR=0,最糟糕的分类器,因为它成功避开了所有的正确答案。

  • 第三个点,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,所有样本均被预测为负样本(negative)。

  • 第四个点(1,1),所有的样本均被预测为正样本。

最理想的模型,当然是TPR尽量高而FPR尽量低,然而任何模型在提高正确预测概率的同时,也会难以避免地增加误判率

正确选择临界点(cutoff):

1)  TPR越高,漏诊病例越少,而FPR越低,误诊率越少;

2)  在ROC曲线上,想找到一个界值,那就让两个值都取得最好的效果,那我们就往图的左上角寻找,此时越偏离45度对角线

3)  最靠近左上角的那一点为最佳临界点,点上的值即为最佳临界值,因为,此点上敏感度与特异度都较高,假阳性与假阴性也最少。

4)  即约登指数取得最大值的界值。

约登指数=敏感度+特异度-1

ROC曲线作用:

    • 能很容易地查出任意界限值时的对疾病的识别能力

    • 选择最佳的诊断界限值,权衡漏诊与误诊的影响

    • 两种或两种以上不同诊断试验对疾病识别能力的比较。在对同一种疾病的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。亦可通过分别计算各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的AUC最大,则哪一种试验的诊断价值最佳。

把各试验的ROC曲线绘制在同一坐标中,可以直观地比较哪种诊断更有价值,如下图所示:显然绿色代表的诊断价值优于蓝色诊断,红色诊断最弱。

建模知识2: ROC、AUC、K-S曲线_第4张图片

3、AUC(area under the ROC curve)

即ROC曲线下面积,AUC越大越好,提示该试验的诊断价值越高,模型效果越好。

1) AUC≈1.0:最理想的检查指标

2) AUC在0.7-0.9之间:试验准确性高

3) AUC=0.5:试验无诊断价值

一般来说,AUC达到0.9以上才认为是一个准确性很高的诊断试验,此时的cutoff才有实际意义。

4、K-S曲线,Kolmogorov-Smirnov Test

    K-S曲线与ROC曲线异曲同工。同样是用FPR、TPR为值绘图。横坐标是阈值,纵坐标分别为TPR、FPR,绘制两条折线图。

  ks值计算,ks=max(TPR-FPR),即两条曲线之间最大的间隔距离,也即好客户和坏客户的累积概率差的最大值。当ks为最大值时,同时也是ROC曲线上auc最大的值。

      k-s曲线的最大值为k-s统计量。ks统计量的经验标准:

  • 小于20:模型无鉴别能力

  • 20-40:模型勉强接受

  • 41-50:模型具有区别能力

  • 51-60:模型有很好的区别能力

  • 61-75:有非常好的区别能力

  • 大于75:此模型异常,可能有问题

5、计算案例及曲线绘制

案例1:

假设有20个样本,Class是样本真正的标签(p表示正样本,n表示负样本),Score表示样本被判定为正样本的概率或评分值。样本中共有正样本总数p=10个,负样本总数n=10个。

建模知识2: ROC、AUC、K-S曲线_第5张图片

计算逻辑

1)首先按Score从高到低排列。

2)依次将Score值作为threshold(阈值),分别计算TPR、FPR。

    当样本对应的score大于或等于这个threshold时,系统会把此样本预测为正样本,再与实际值class比较,就可以得出每个threshold实际正预测正的数量,以及实际负预测正的数量。TPR=TP/正样本总数(10),FPR=FP/负样本总数(10),即可得到每个threshold的TPR、FPR。

  1. 如score=0.7时,序列1-3均会被判定为正样本,因只有序号1、2为正样本,因此TRUE Positive=2,False Positive=1。TPR=2/10=0.2,FPR=1/10

  2. 如score=0.51时,序列1-9均会被判定为正样本,因只有序号1、2、4、5、9为正样本,因此TRUE Positive=5,False Positive=4。TPR=4/10=0.2,FPR=4/10。

  3. 依次类推,计算其他的threshold阈值,就可以得到20组FPR和TPR的值

3)以FPR为横轴,TPR为纵轴,绘制散点图,即得ROC曲线

标签为阈值score

建模知识2: ROC、AUC、K-S曲线_第6张图片

    4)绘制K-S曲线

以score为横坐标,以TPR、FPR为纵坐标,绘制两条折线图

建模知识2: ROC、AUC、K-S曲线_第7张图片

案例2:

    下表为逻辑回归得到的结果,样本数按预测概率(score)从大到小排列,并将样本十等分,每个部分含相同数量的样本。总样本数61797,样本中的正样本总数14084,负样本总数47713。

建模知识2: ROC、AUC、K-S曲线_第8张图片

计算逻辑:

1)依次将Percentile作为阈值threshold,计算对应的TPR、FPR。

  1. 如:百分位10%作为阈值,则6180个样本均会被预测成正样本,其中TRUE Positive=4879,而1301则为错判为正样本,即False Positive=1301,TPR=4879/14084=34.6%,FPR=1301/47713=2.7%。

  2. 如:百分位30%作为阈值,则6180*3=18540个样本会被预测成正样本,其中TRUE Positive为9848(4879+2804+2165),False Positive为8692(1301+3376+4015),TPR=9848/14084=69.9%,FPR=8692/47713=18.2%。

  3. 依次类推,计算出10组值的TPR、FPR,并做散点图,如下,标签为阈值

建模知识2: ROC、AUC、K-S曲线_第9张图片

    2)以百分位为阈值,TPR、FPR绘制折线图

建模知识2: ROC、AUC、K-S曲线_第10张图片

5、ROC上机实现

步骤1:导入模块

640?wx_fmt=png

步骤2:导入数据并处理数据

建模知识2: ROC、AUC、K-S曲线_第11张图片

步骤3:建模并预测概率及auc

建模知识2: ROC、AUC、K-S曲线_第12张图片

步骤4:打印结果

640?wx_fmt=png

结果:

建模知识2: ROC、AUC、K-S曲线_第13张图片

建模知识2: ROC、AUC、K-S曲线_第14张图片

附:数据样本下载地址

你可能感兴趣的:(建模知识2: ROC、AUC、K-S曲线)