当前位置: 首页 > news >正文

风控评分卡模型原理与应用(六):模型评价指标KS和ROC

信贷评分模型的评估指标常见的有P-R曲线、AUC、KS、混淆矩阵、AR、洛伦茨曲线等,这篇文章主要介绍评分卡模型常用的判断指标AUC和KS。

AUC

对于分类问题,我们一般关注的是分类的准确率。信贷评分模型中常用的评估指标为AUC

混淆矩阵(Confuse Matrix)

针对一个二分类问题,即将实例分成正类(positive)或负类(negative),在实际分类中会出现以下四种情况:
(1)若一个实例是正类,并且被预测为正类,即为真正类TP(True Positive )
(2)若一个实例是正类,但是被预测为负类,即为假负类FN(False Negative )
(3)若一个实例是负类,但是被预测为正类,即为假正类FP(False Positive )
(4)若一个实例是负类,并且被预测为负类,即为真负类TN(True Negative )

将上面说的几种情况列出来,就是一个混淆矩阵:

通过混淆矩阵可以大致看出预测正确的数量和预测错误的数量。

ROC曲线和AUC

在正式介绍ROC之前,我们还要再介绍两个指标,这两个指标的选择使得ROC可以无视样本的不平衡。这两个指标分别是:灵敏度(sensitivity)和特异度(specificity),也叫做真正率(TPR)和 真负率(TNR),具体公式如下。

  • 真正率(True Positive Rate , TPR),又称灵敏度:
    TPR=正样本预测正确数正样本总数=TPTP+FNTPR = \frac{正样本预测正确数}{正样本总数} = \frac{TP}{TP+FN}TPR=正样本总数正样本预测正确数=TP+FNTP

  • 假负率(False Negative Rate , FNR) :
    FNR=正样本预测错误数正样本总数=FNTP+FNFNR = \frac{正样本预测错误数}{正样本总数} = \frac{FN}{TP+FN}FNR=正样本总数正样本预测错误数=TP+FNFN

  • 假正率(False Positive Rate , FPR) :
    FPR=负样本预测错误数负样本总数=FPTN+FPFPR = \frac{负样本预测错误数}{负样本总数} = \frac{FP}{TN+FP}FPR=负样本总数负样本预测错误数=TN+FPFP

  • 真负率(True Negative Rate , TNR),又称特异度:
    TNR=负样本预测正确数负样本总数=TNTN+FPTNR = \frac{负样本预测正确数}{负样本总数} = \frac{TN}{TN+FP}TNR=负样本总数负样本预测正确数=TN+FPTN

其中假负率FNR=1−TPR、假正率FPR=1−TNR

ROC

ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。曲线对应的纵坐标是TPR,横坐标是FPR。如下就是一个ROC曲线:

ROC曲线是通过遍历所有阈值来绘制整条曲线的。如果我们不断的遍历所有阈值,预测的正样本和负样本是在不断变化的,相应的在ROC曲线图中也会沿着曲线滑动。

通过计算过程可以知道,ROC 曲线中的坐标(0,0)表示以概率为 1 作为 cutoff 时模型的预测情况,此时模型将所有的样本都预测为负样本,即在混淆矩阵中TP=FP=0,所TPR=FPR=0;坐标(1,1)表示以概率为 0 作为 cutoff 时模型的预测情况,此时模型将所有的样本都预测为正样本即在混淆矩阵中FN=TN=0,所以TPR=FPR=1。

那么如何判断一个模型的ROC曲线是好的呢?这个还是要回归到我们的目的:FPR表示模型对于负样本误判的程度,而TPR表示模型对正样本召回的程度。我们所希望的当然是:负样本误判的越少越好,正样本召回的越多越好。所以总结一下就是TPR越高,同时FPR越低(即ROC曲线在左上部分且越靠近左上角越好),那么模型的性能就越好。

AUC

ROC需要看出才能判断出好坏,因此为了量化这一指标就有了AUC。AUC(Area Under Curve)是处于ROC曲线下方的那部分面积的大小。AUC越大,代表模型的性能越好。

一般AUC大于0.75或者0.8时认为模型效果较好可用,而大于0.95的话要警惕过拟合的风险。

KS

KS与AUC类似,是机器学习中常用于二分类模型的模型效果评估指标.KS全称为Kolmogorov-Smirnov,它的公式定义如下:
s=max(TPR−FPR)s=max(TPR−FPR)s=max(TPRFPR)
其中TPR和FPR就是前面ROC曲线中介绍过的,TPR(True PositiveRate) : 正样本被检查出来的概率 , FPR(False PositiveRate): 负样本被模型错误归为正样本的概率。

按照概率分组(或者以最后的评分卡数值)为x轴,TPR、FPR、(TPR-FPR)为y轴所组成的三条变化曲线,然后标出KS值的所在位置(即TPR与FPR的最大间隔点)

KS 值反应了模型对好坏样本的区分能力,KS 值越大表示对好坏样本的区分能力越强。

python调用sklearn的roc_curve函数计算KS和绘制KS曲线的代码如下:

fromsklearn.metricsimportroc_curveimportpandasaspdimportmatplotlib.pyplotaspltimportnumpyasnp# -----------数据生成----------------------------score_dict={'score':[0.71,0.612,0.127,0.330,0.428,0.889,0.188,0.229,0.889,0.022,0.43,0.952,0.622,0.11,0.22,0.33,0.44,0.55,0.66,0.77,0.88,0.99],'label':[1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1]}# score与labeldf=pd.DataFrame(score_dict)# 将数据转为df# -------------计算ks-----------------------------fpr,tpr,thresholds=roc_curve(df.label,df.score)# 计算fpr, tprks_value=max(abs(fpr-tpr))# 计算KS: abs(fpr-tpr)最大者就是KS# ----------画KS曲线-------------------------------thresholds[0]=max(df['score'])+0.01# 修正thresholds的最大值plt.figure(figsize=(10,5))# 设置图片的大小plt.plot(thresholds,fpr,label='fpr')# 标示fprplt.plot(thresholds,tpr,label='tpr')# 标示tprplt.plot(thresholds,abs(fpr-tpr),label='fpr-tpr')# 标示fpr-tprplt.xlabel('thresholds')# 标示x坐标轴# 标记ksidx=np.argwhere(abs(fpr-tpr)==ks_value)[0,0]ks_thresholds=thresholds[idx]plt.plot((ks_thresholds,ks_thresholds),(fpr[idx],tpr[idx]),label='ks - {:.2f}'.format(ks_value),color='r',marker='o',markerfacecolor='r',markersize=5)plt.scatter((ks_thresholds,ks_thresholds),(fpr[idx],tpr[idx]),color='r')plt.legend()plt.show()print('阈值:',ks_thresholds)print('KS:',ks_value)


参考文章:
https://geekdaxue.co/read/yingtaoxiang@hello/gutcdg
https://www.bbbdata.com/text/25

http://www.jsqmd.com/news/1204913/

相关文章:

  • PostgreSQL源码编译安装的工程化实践:从可运行到可运维
  • 鸿蒙应用开发实战【60】— 关于页AboutPage开发
  • 别把发酵罐当CDMO——当概念跑在能力前面
  • Docker 容器 + Docker Compose单机部署理发店系统
  • 跨越天际:从智能汽车到 eVTOL 的适航与系统级开发44——DAL A 级飞控计算机的非相似硬件与非相似软件设计体系
  • STM32 PWM蓝牙无线调光实战:从原理到物联网应用
  • 天津爱彼回收价格查询及靠谱回收平台实测排行(2026年7月最新数据) - 尊奢回收二奢平台
  • 2026年7月最新南宁格拉苏蒂官方售后客服电话及服务网点地址查询 - 亨得利钟表维修中心
  • OpenHarmony UART驱动开发实战与Hi3516DV300应用
  • Hyper-V与PowerShell高效管理虚拟机指南
  • C++二维数组实战:从遍历到优化,手把手实现方阵对角线求和
  • 【论文阅读】Agent 记忆机制(1):A-Mem——让 Agent 记忆从“存储”走向“自进化”
  • 厦门欧米茄回收价格查询与靠谱回收平台实测排行(2026年7月最新) - 嘉价奢侈品回收平台
  • Ollama-Python本地大模型调用:从安装到流式处理的完整指南
  • 写小说卡文、没灵感?实测 12 款能帮你“日更过万”的 AI 写小说软件大汇总(2025年终版)
  • RFID 资产标签批量生成技术落地实践 —— 机房资产管理配套打印方案
  • 编译原理:算符优先分析法
  • 鸿蒙应用开发实战【61】— 卡号颜色主题系统CardColor枚举映射
  • 大模型与知识库结合的自动化代码审查实践
  • Cesium 实战 36 - 地图鼠标移动事件功能
  • 【超详细】STM32F407ZGT6 + HAL库 手把手移植RT-Thread
  • 2026年7月最新万国北京双桥万达广场维修保养服务电话 - 万国中国官方服务中心
  • LVGL 9.5.0 嵌入式32位mcu的 ram/rom 精简
  • C++高性能IO架构:从Reactor模式到微秒级响应优化实战
  • 全平台QQ数据库逆向解密:原理、工具与实战指南
  • 华为OD机试C卷“记票统计”题解:双数据结构实现高效映射与顺序输出
  • Python编译安装SSL模块缺失问题深度解析与解决方案
  • fastadmin 最新版本V1.6.5.20260602记录
  • python数据可视化技巧的100个练习 -- 21. 网站流量数据的流图
  • SpringBoot通过Moquette集成MQTT Broker快速实现设备管理消息订阅与发布