SQL计算KS、AUC、IV、PSI指标


在公众号「python风控模型」里回复关键字:学习资料
QQ学习群:1026993837 领学习资料
引言
KS、AUC、IV、PSI等指标是信贷风控业务中最为常见的模型指标。在模型开发和监控中都尤为重要。常规计算方案是将数据从数据库下载到本地,再用Python代码来计算,这是一件非常费力的事情。为此,本文介绍了一种Spark-SQL来计算KS、AUC、IV、PSI的方法,供参考。
目录
Part 1. KS的计算方法
Part 2. IV的计算方法
Part 3. AUC的计算方法
Part 4. PSI的计算方法
Part 5. 总结
致谢
版权声明
Part 1. KS的计算方法
在《求是汪在路上:风控模型—区分度评估指标(KS)深入理解应用》这篇中,我们介绍过KS相关知识。另外可作为延伸阅读的一篇论文是《A comparison study of computational methods of Kolmogorov Smirnov statistic in credit scoring》,其摘要如下:

该文章提出了KS的三种计算方法,分别是不分箱法、等频分箱法(equal-size binning)和等距分箱法(equal-width binning),同时从计算值、排序性、几何含义三个维度对比,得出:1)不分箱法能到最大且唯一的值;2)只有等频分箱法能用于评估分数的排序性。
不分箱法。
计算步骤为:
对连续变量(或特指模型分数)排序后,计算累积好人数和累积坏人数;
得到累积好人捕捉率和累积坏人捕捉率
两者相减得到差值,并取绝对值(可用abs方法)。
计算所有绝对值的最大值。
2. 分箱法。
其操作方法是在不分箱法的基础上多了一步分箱,也就是将分数离散化为有限个区间。通常分为10个或20个箱子。
在平时业务分析中,我们习惯于等频分箱法来看,原因是可以看到模型的排序性,以及头部坏人捕捉率等指标,所能传达的信息更为丰富。
等频分箱法的计算方法为:
其输出结果如下:
上述代码在分数分布集中时可能无法做到完全等频,为此可采用以下代码(也更推荐):
其输出结果如下:
如前文所述逻辑,等频分箱法计算KS的代码如下:
如前文所述逻辑,不分箱法计算KS的代码如下:
由于最终算KS的时候加上了绝对值函数abs(),所以窗口函数over()里面无论是asc或者desc,效果都一样。对比等频分箱法和不分箱法,我们发现结果略有差异。不分箱法是最精确的,因为其不受分箱方法的影响,毕竟精度的差异又会影响分箱边界,进而影响分箱内的样本量。
如果需要同时计算多个模型分数的KS,可以对表进行一些调整,如下所示。再把name放在窗口函数over()中。
Part 2. IV的计算方法
在《求是汪在路上:风控模型—WOE与IV指标的深入理解应用》中可参考IV的含义,其衡量自变量对于因变量的信息量。IV越高,说明该自变量对于预测因变量越有效。
在分箱表的基础上,计算IV的代码如下:
Part 3. AUC的计算方法
ROC曲线下方的面积即为AUROC(Area Under ROC),简称AUC。理论上,对于连续分数分布,我们可将计算公式定义为:
其中,
为坏人累积分布,
为好人累积分布。
在实际问题中,我们拥有的样本量总是有限的,因此上述连续积分问题就转变为累加问题。如何计算这个面积呢?这就需要用到微积分的知识,相邻两个坐标点可以组成一个很小的梯形,计算这个小梯形的面积后,我们将整个区间加起来即可得到。

计算AUC的代码如下:
Part 4. PSI的计算方法
在《求是汪在路上:风控模型—群体稳定性指标(PSI)深入理解应用》中可参考PSI相关知识。首先,我们同样对分数进行分箱。
PSI的计算需要指定基准组,用以作为比较的参照。通常在模型监控中,我们会按月份来与基准组比较,因此我们引入了一个分组字段gp。
此时,我们将会得到中间数据如下:
接下来,计算得到最终的PSI结果:
Part 5. 总结
得益于分布式计算,以及简洁的语法,SQL可有效帮助数据从业者节省大量时间。由此,本文介绍了常见风控模型指标的SQL计算方法。
原文链接:https://zhuanlan.zhihu.com/p/402824981/
参考www.tandfonline.com/doi/full/10.1080/03610918.2016.1249883
感谢liaoge所提供的等频分箱的代码
欢迎各位同学了解《python金融风控评分卡模型和数据分析(加强版)》学习更多相关知识
入口1:https://ke.qq.com/course/package/43071
入口2:https://study.163.com/series/1202915601.htm?share=2&shareId=400000000398149
