基于python的k-s值计算

做评分卡模型时(假设有多个自变量,因变量即是否违约。)通常需要筛选变量。

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值:

原文地址:https://www.cnblogs.com/andylhc/p/10673030.html