做评分卡模型时(假设有多个自变量,因变量即是否违约。)通常需要筛选变量。
k-s值的作用类似于AUC,它期初是用来评价模型(变量)对是否违约事件的区分程度的。
# -*- coding: utf-8 -*- """ Created on Mon Apr 8 17:04:37 2019 @author: Administrator ks计算 """ import pandas as pd import numpy as np data_test_2 = {'y30':[1,1,1,1,1,1,0,0,0,0,0,0,0],'a':[1,2,0,2,2,7,4,5,4,0,4,18,np.nan]} data_test_2 = pd.DataFrame(data_test_2) def ks_calc_cross(data,var_col,y_col): ''' 功能: 计算KS值,输出对应分割点和累计分布 输入值:- 输出值: 'ks': KS值,'crossdens': 好坏人累积概率分布以及其差值gap ''' ks_df1 = pd.crosstab(data[var_col],data[y_col]) ks_df2 = ks_df1.cumsum(axis=0) / ks_df1.sum() ks_df2['gap'] = abs(ks_df2[0] - ks_df2[1]) ks = ks_df2['gap'].max() return ks,crossdens ks_value,ks_df2 = ks_calc_cross(data_test_2, 'a', 'y30') print(ks_value,' ',ks_df2)
ks检验介绍<转载>
笔者刚入门机器学习开始做的例子就是金融场景下风控模型。那时评价模型的好坏就用传统的机器学习评价标准,比如说准确率、精确率和AUC,对风控模型的ks指标还一无所知,倒是作为统计科班出身的童鞋,第一次见到ks想到的就是数理统计中的Kolmogorov-Smirnov检验(柯尔莫哥洛夫-斯米尔洛夫)。后来实习过程中,发现老板们在看风控模型结果最关注的结果就是ks指标,才开始对ks指标逐渐重视起来。在衡量模型效果时,对评分卡或者机器学习模型给出的违约概率和y值计算ks值,给出模型效果来确定模型的好坏(一般0.3左右可以使用,0.4以上模型效果较高,超过0.7,可能模型有问题,这时候需要去debug一下是不是出现了特征信息泄露以及一些其他的问题)。笔者在实际应用中,发现市面上关于ks系统介绍的文章比较少,本文就系统的介绍一下ks的前世今生,以及在在风控模型下的多种实现。
参考:《风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)》
https://blog.csdn.net/qq_38984677/article/details/85632268
《分类模型的评价指标--混淆矩阵,ROC,AUC,KS,Lift,Gain》
注意:对名义变量不适合用k-s值。一下证明了变量值的排序影响最终的ks值: