在风控中,我们常用KS指标来评估模型的区分度(discrimination)。这也是风控模型同学最为追求的指标之一。那么,有多少人真正理解KS背后的内涵?本文将从区分度的概念、KS的计算方法、业务指导意义、几何解释、数学思想等多个维度展开分析,以期对KS指标有更为深入的理解认知。
在探索性数据分析(EDA)中,若想大致判断自变量x对于因变量y有没有区分度,我们常会分正负样本群体来观察该变量的分布差异,如图1所示。那么,如何判断自变量是有用的?直观理解,如果这两个分布的重叠部分越小,代表正负样本的差异性越大,自变量就能把正负样本更好地区分开。
打个比方,想象这个变量就是一双手,把这两个分布往两边拉开。这双手的力量越大,两个概率分布间隔就越远,说明变量区分性就越好。
图 1 – 正负样本变量分布差异对比
KS(Kolmogorov-Smirnov)统计量由两位苏联数学家A.N. Kolmogorov和N.V. Smirnov提出。在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力(ranking ability)越强。
KS统计量是基于经验累积分布函数(Empirical Cumulative Distribution Function,ECDF) 建立的,一般定义为:
ks = max{|cum(bad_rate) – cum(good_rate)|} tag{1}
很多博客文章告诉我们,计算KS的常见方法是这样的:
为帮助大家理解,现以具体数据(非业务数据)展示这一过程,如图2所示。其中,total是每个分数区间里的样本量,total_rate为样本量占比;bad代表逾期,bad_rate为每个分数区间里的坏样本占比。
图 2 – KS计算过程表
那么,分析这张表我们可以得到哪些信息呢?
KS值的取值范围是[0,1],一般习惯乘以100%。通常来说,KS越大,表明正负样本区分程度越好。KS的业务评价标准如图3所示。由于理解因人而异,不一定完全合理,仅供参考。
图 3 – KS的评价标准(供参考)
需要指出的是,KS是在放贷样本上评估的,放贷样本相对于全量申贷样本永远是有偏的。如果风控系统处于裸奔状态(相当于不生效,随机拒绝),那么这个偏差就会很小;反之,如果风控系统做得越好,偏差就会越大。因此,KS不仅仅只是一个数值指标,其背后蕴藏着很多原因,值得我们结合业务去认真分析。
当KS不佳时,为了达到KS的预期目标,我们可以从哪些方面着手去优化呢?一般建议如下:
若将表2数据可视化,就可以得到我们平时常见的KS曲线图(也叫鱼眼图 ),其中横坐标为模型概率分数(0~1),纵坐标为百分比(0~100%)。红色曲线代表累计坏账户占比,绿色曲线代表累计好账户占比,蓝色曲线代表KS曲线。
图 4 – KS曲线
至此,我们已经基本了解KS的计算流程、评价标准、业务指导意义和优化思路。接下来,再给大家留下几个思考题 :
风控建模时,我们常把样本标签分为GBIX四类,其中:G = Good(好人,标记为0),B = Bad(坏人,标记为1),I = Indeterminate (不定,未进入表现期),X = Exclusion(排斥,异常样本)。
需要指出的是,Good和Bad之间的定义往往是模糊、连续的,依赖于实际业务需求。这里举两个例子或许能帮助大家理解:
例1:模糊性对于12期信贷产品,如果设定表现期为前6期,S6D15(前6期中任意一期逾期超过15天)就是1,否则为0;但是后来如果把表现期调整为前3期,那么对于“前3期都正常还款,但4~6期才发生逾期并超过15天“的这部分样本而言,原本所定义的label就从1就变成0了。因此,业务需求的不同,导致标签定义不是绝对的。 例2:连续性定义首期逾期超过30天为1,否则为0。但是,逾期29天和逾期31天的用户之间其实并没有不可跨越的硬间隔,逾期29天的用户可能会进一步恶化为逾期31天。由于逾期的严重程度定义本身就带有一定的主观性,我们很难说逾期天数差几天有多少本质的差异,所以哪怕我们为了转化为分类问题做了硬性的1和0的界限定义,但在业务上理解还是一个连续问题。
因此在风控中,y的定义并不是非黑即白(离散型),而用概率分布(连续型)来衡量或许更合理。
我们通常用概率分布来描述这种模糊的软间隔概念,也倾向于使用LR这种概率模型,而不是SVM这种以边界距离作为优化目标的模型。
那为什么选择KS指标呢?——KS指标倾向于从概率角度衡量正负样本分布之间的差异。正是因为正负样本之间的模糊性和连续性,所以KS也是一条连续曲线。但最终为什么取一个最大值,主要原因是提取KS曲线中的一个显著特征,从而便于相互比较。
在风控场景中,样本不均衡问题非常普遍,一般正负样本比都能达到1:100甚至更低。此时,评估模型的准确率是不可靠的。因为只要全部预测为负样本,就能达到很高的准确率。例如,如果数据集中有95个猫和5个狗,分类器会简单的将其都分为猫,此时准确率是95%。
因此,我们更倾向于用混淆矩阵来评估模型分类效果。
图 5 – 混淆矩阵
为简化考虑,我们的风控系统只有一个信用评分模型,那么高于分数阈值就预测为good,反之为bad,予以拒绝。我们一般追求更高的TPR,也就是"抓对了";以及更低的FPR,也就是"抓错了"。抓对了和抓错了——是在模型决策的一念之间(不同的分数阈值),因此我们会设置不同的阈值来观察这种变化规律。
在建立混淆矩阵的概念后,接下来介绍ROC曲线的绘制方法(后面将会以ROC曲线来辅助我们理解KS曲线)。
由于低于T,预测为bad(红色区域),反之预测为good(绿色区域)。红色区域内有样本的真实bad和good标签,我们统计以下2个指标:
因此,可以把TPR理解为累积正样本率(cum_bad_rate),FPR理解为累积负样本率(cum_good_rate)。
图 6 – TPR曲线绘制过程
图 7 – ROC曲线
我们该如何理解ROC曲线?
ks = max (|TPR-FPR|) tag{2}
为了更加直观展示KS和ROC曲线的关系,我们将添加以下辅助线,从而得到图8,其中包含4张子图。
图 8 – 左上—TPR,右上—ROC,左下—KS,右下—FPR
在添加辅助线后,可以得到以下关键数据点的坐标信息:
为什么要在R点加上一条切线? 这是因为KS = |TPR – FPR|,如果添加辅助线TPR = FPR + KS,那么这条直线的截距就是KS值。当与ROC曲线相切时,截距最大,也就对应max_ks。
从几何意义上,KS曲线和ROC曲线的映射关系如下:
另外可以从图中得出这些信息:
在理解KS和ROC曲线的关系后,我们也就更容易理解——为什么通常认为KS在高于75%时就不可靠?我们可以想象,如果KS达到80%以上,此时ROC曲线就会变得很畸形,如图9所示。
另一个更重要的可能原因是,为了便于制定策略,模型评分在放贷样本上一般要求服从正态分布。现实中不太可能出现如此完美的分类器,如果出现这种明显的双峰分布,反而就不合常理,我们就有理由怀疑其可靠性。( 值得一起探讨)
图 9 – 不同分布下的ROC曲线
KS检验(Kolmogorov-Smirnov Test)是一种根据样本来推断总体是否服从某种分布的方法,因此也可以用来检验两个经验分布是否服从同一总体分布。
我们可以定义以下假设检验命题:
如果得到的p-value比指定的显著水平(假设为5%)小,那么我们就可以拒绝原假设,认为两个分布不服从同一总体分布。
def ks_compute(proba_arr, target_arr):
'''
----------------------------------------------------------------------
功能:利用scipy库函数计算ks指标
----------------------------------------------------------------------
:param proba_arr: numpy array of shape (1,), 预测为1的概率.
:param target_arr: numpy array of shape (1,), 取值为0或1.
----------------------------------------------------------------------
:return ks_value: float, ks score estimation
----------------------------------------------------------------------
示例:
>>> ks_compute(proba_arr=df['score'], target_arr=df[target])
>>> 0.5262199213881699
----------------------------------------------------------------------
'''
from scipy.stats import ks_2samp
get_ks = lambda proba_arr, target_arr: ks_2samp(proba_arr[target_arr == 1],
proba_arr[target_arr == 0]).statistic
ks_value = get_ks(proba_arr, target_arr)
return ks_value
<< · Back Index ·>>
下一篇