You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
11 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 20 | 模型性能评估从信用评分产品看什么是KS、AUC
你好,我是海丰。
上节课我们学习了混淆矩阵以及准确率、精确率和召回率这3个基础指标的计算。这节课我们依然会借助上节课的信用评估模型来学习二分类模型中常用的两个综合性指标KS和AUC。
## 构建KS和AUC的基础TPR和FPR
首先我们来看两个基础指标TPR和FPR它们是计算KS和AUC的基础指标。
在信用评分模型中TPRTrue Positive Rate代表模型找到真坏人对应混淆矩阵中的TP占实际坏人TP+FN的比例它的计算公式为TPR=TP/(TP+FN)。一般来说,这个指标被称为:真正率、真阳率,用来评估模型正确预测的能力。不过,因为它的计算公式和召回率是一样的,所以为了方便我们也经常叫它召回率。
FPRFalse Positive Rate代表模型误伤认为是坏人实际是好人的人占总体好人的比例它的计算公式为FPR=FP/(FP+TN)。一般来说,这个指标被称为:假正率、假阳率,它用来评估模型误判的比率或者误伤的比率,为了方便我们也叫它误伤率。
那这两个指标是怎么构建KS和AUC的呢别着急我们慢慢往下看。
## ROC曲线绘制和AUC的计算
在实际工作中我们最希望的模型一定是找到的坏人足够多并且误伤的好人足够少也就是TPR尽量高、FPR尽量低。为了形象地表达它们之间的关系我们引入了ROC曲线。
那么ROC曲线具体是怎么得到呢
这里,我们先来回顾一下上节课的信用评分模型,这个模型的分数范围是\[0,100\]。算法团队给出的参考阈值60分我们根据它对模型进行了简单的划分得到了混淆矩阵以及相应的召回率等指标。
如果我们没有这个阈值呢实际上我们在模型分数的每一个点上都可以做这样的划分也就是把每一个分数点都当作是一个阈值这样就可以得到一连串的指标。想想都知道对所有分数进行划分会非常麻烦。虽然不能对所有分数进行划分但是我们可以对分数进行分段处理。比如说我们的打分人数有5000人我们按照每10分进行一个分段就能得到下面这张图。
![](https://static001.geekbang.org/resource/image/00/da/006b4yy8cb018f3849ea091c602c45da.jpeg)
结合上面的图我们可以分3种情况进行讨论。
**第一种情况是一种极端情况阈值定在0分上小于0的是坏人大于0的是好人。** 这个时候虽然0分以下没有任何人但是我们仍然可以得到相应的混淆矩阵也就可以得到对应的TPR和FPR。
这个时候的TPR是多少呢我们不需要计算根据定义思考一下就知道了。因为模型只有\[0,100\]没有人的打分是小于0的这也就意味着模型没有分辨出任何一个坏人所有人都是好人找坏人的能力TPR就是0。
那么FPR是多少呢同样的因为模型认为没有人是坏人所以它没有产生任何一个误伤误伤率FPR就是0。
**第二种情况也是一个极端的情况阈值定在100分小于100分都是坏人大于100分都是好人。** 这个时候模型会认为所有人都是坏人所以模型能找到所有的坏人TPR=1。同理模型把所有人都当成了坏人就相当于误伤了所有的好人所以FPR=1。
**第三种情况是正常情况阈值定在一个非0分和非100分的分数上如60分。** 那么TPR和FPR分别会得到一个在0-1范围内的值如TPR=0.8FPR=0.2。
同样的我们也可以把这个阈值分别定在10分、20分、30分这些点位上就会得到一连串的TPR和FPR。如果我们把FPR做横轴TPR做纵轴一个TPR和FPR就对应了一个点。当把这些点都连起来之后我们就可以得到如下一条蓝色的曲线
![](https://static001.geekbang.org/resource/image/ea/5a/ea7faff3a280bd83a7dbf5194222d35a.jpeg)
**总的来说ROC曲线就是在没有准确阈值的情况下对所有分数进行分段处理计算每一个切分点对应的TPR和FPR以FPR做横轴、TPR做纵轴绘制出的一条曲线。**
除了蓝线我们看到图中还有一条红线它是一条随机线这条随机线上的每一个切分点的FPR和FPR都是相等的。它表示模型每次切分时抓到坏人的概率和误伤好人的概率都是一样的。这和我们随机猜测的概率相同所以模型的ROC曲线越贴近这条随机线模型的分类效果就越差。甚至如果ROC曲线在随机线下面就说明模型预测结果和我们预期结果是反的而当ROC曲线越偏离随机线并且靠近左上方(0,1)点的时候说明模型分类效果越好因为这个时候模型的TPR=1FPR=0。
虽然我们通过ROC曲线可以区分模型的好坏但这还不够直观而且和业务方沟通时候我们也不能直接让他们去看这张图。
因此我们想到是不是可以把曲线右下方和横坐标轴闭合起来的面积作为一个评估指标。这个面积就是我们图上蓝色的阴影部分它就是AUC指标。一般来说AUC都在0.5到1之间AUC越高代表模型的区分能力越好。如果AUC=0.5那ROC曲线与图中红线重合表示模型没有区分能力它的结果等于随机猜测如果AUC小于0.5,说明这个模型大概率很差。
## KS的计算
现在我们知道了AUC是什么那么KS又是什么呢其实KS曲线和ROC曲线的本质和数据的来源都是一致的。只不过**ROC代表的是模型召回率和误伤率之间的变化关系KS代表的是在某一点上模型召回率最大并且误伤率最小**。
因此我们在绘制ROC曲线的时候是用召回率和误伤率来做纵轴和横轴而在绘制KS曲线的时候我们把召回率和误伤率都作为纵轴把切分的分数点作为横轴。这个时候一个切分点会同时得到TPR和FPR两个值所以我们可以画出来两条曲线。具体是怎么操作的呢
我们还是以\[0,100\]的模型分数范围为例每10分做一个分段如0分是一个切分点10分是一个切分点20分是一个切分点....在每一个切分点上我们都可以得到一对TPR和FPR。
对于得到的TPR和FPR我们也可以和刚才一样分三种情况讨论。
第一种情况切分点在0。这个时候模型认为没有任何人是坏人所以TPR = 0FPR也是0。因此在横坐标0这个点上我们得到了两个数值相同的点也就是图上左下角蓝色的点。
第二种情况切分点在100。这个时候TPR和FPR都是1所以得到右上角橘色的点。
第三种情况切分点非0、非100。假设我们还是以60分作为切分点也会得到一对TPR和FPR。
就这样等我们把所有切分点遍历之后就能得到所有切分点的TPR和FPR值。然后我们把它们放到坐标系中把得到的TPR和FPR的值分别连接起来就能得到两条曲线。这个坐标系的横轴就是我们对信用评分的切分点如果我们信用分是\[0,100\]范围那它就是从0到100的数值。
如下图所示红色线是我们在不同的切分点得到的所有TPR的曲线绿色线是相应的FPR曲线。它们在001001这两个点相交。
![](https://static001.geekbang.org/resource/image/ff/8e/ff8d60a16e075809a759a955e4747b8e.jpeg)
**由于KS代表的是在某一点上模型召回率最大同时误伤率最小所以KS就是图中红色线和绿色线间隔最大时候的距离。**
如图TPR和FPR在切分点为40的时候距离最大这就意味着当我们拒绝给40分以下的人进行贷款同时通过40分以上的人的信贷请求时业务的收益最大。这是因为我们拒绝了足够多的坏人同时误伤了足够少的好人。那么KS就是在这个点上TPR-FPR的数值了。
具体到图中KS = 0.7- 0.1=0.6所以我们这个模型的KS就是0.6。在实际业务中也有人会说“我们KS是60”这也是正常的。
那么对于信用评分产品来说KS指标是多少才合适呢对于用于贷前审批的信用评分申请评分卡模型来说一般业内会分为4种情况
* KS<20:欠拟合,模型基本不具备可用性
* KS>20&KS<30:模型可用
* KS>30&KS<40:模型预测能力优秀
* KS>40模型的区分度很高。但同时我们也要对这个结果持怀疑态度进一步去分析入模变量中是否有一些滞后变量来确认结果的准确性
总的来说如果模型的KS或者AUC值很高不一定是一件好事情。我们需要了解背后的原因这有可能是数据不准确导致的。比如在贷前信用评分场景下KS值大于50或者AUC大于80时我们就需要注意一下数据的准确性了。
## 小结
这节课我们讲了分类模型评估的进阶指标KS和AUC它们是我们在模型评估中用得比较多的指标。围绕它们的构建我们又讲了TPR、FPR和ROC曲线为了方便你记忆和对比我把它们的核心概念、公式适用场景都总结在了下面的表格中你可以看看。
![](https://static001.geekbang.org/resource/image/ca/2e/ca30edacf5ec38201yy01197ef3e212e.jpeg)
这两节课我们以一个信用评估模型的例子讲完了分类模型的评估。总的来说不同类型和不同公司的AI产品经理需要掌握的评估能力可能不同。
比如说应用层的AI产品经理可能只需要知道召回率、精确率这些就可以了。但是B端做金融风控模型的产品经理就需要知道KS是什么它是怎么来的甚至要学会看不同测试集下面的KS是否合理。
就像我之前遇到一个情况OOT测试的KS是40测试集的KS是39训练集的KS是35。虽然我们用的都是真实数据但结果依然不合理如果我把这样的结果交付给客户客户不只会质疑我的专业程度更有可能怀疑我们公司的技术能力。
因此我们只有确定好自己要努力的目标才能知道这些内容自己要掌握哪些掌握到什么程度比如做互联网应用的产品经理一般掌握召回率、准确率、AUC 这些指标就可以完成大部分的工作了。当然如果你想全面系统化地学习AI技术那么尽可能地拓展自己的知识面总没有错。
## 课后讨论
在这里我想请你尝试手动计算一下KS值。虽然实际工作中我们不需要手工计算但是我希望你可以通过本次课后题加深对KS的理解。
下面是我们一个信用评分产品的测试数据我已经将分数做好了分箱我这里使用了等频分箱并且得到了好、坏用户的数量goods,bads请你计算这个产品的KS值是多少。
![](https://static001.geekbang.org/resource/image/29/57/2949b315b69517ffdce9c0f14a7ea157.jpeg)
期待在留言区看到你的分享和答案,我们下节课见!