好久没有更新了,emm…
之前给大家分享过卡方分箱,想了解的可以点击下面链接。
卡方分箱
那么,今天给大家分享在评分卡中另外一种常见的分箱方法best-ks,首先我们先来了解一下,best-ks是如何分箱的。
1.分箱逻辑:
步骤:
将变量排序后,计算出ks最大的值,即为切点,将数据分成2部分,分别对这2部分数据继续计算ks,找切点,直至达到箱子上限数
分箱后的KS值<=分箱前的KS值
2.实现代码:
################################### 计算ks值
def cal_ks(regroup,min_samples):
'''
args:
regroup:统计每个值的好、坏数,df
min_samples:最小样本数
return:
ks_dict:
ks_range:区间范围
max_ks_cutoff:ks值最大的切点
max_ks_value:最大的ks值
'''
ks_range = str(regroup['feature_name'].agg(['min','max']).values.tolist()) # 最小值、最大值
if (len(regroup) == 1) or (regroup['CntRec'].sum() < min_samples) or (regroup['CntBad'].sum()==0) or (regroup['CntGood'].sum()==0):
# 出现以下四种情况将不进行分箱:只有一种值、总样本数较少、坏样本数为0、好样本数为0
ks_dict = {
ks_range:[-999999,-999999]}
else