ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

scorecardpy 介绍

2022-04-24 12:01:08  阅读:351  来源: 互联网

标签:分箱 None 变量 介绍 iv limit sc scorecardpy


前语:平时计算变量Iv值时也有调用过scorecardpy库,不过总体来说使用次数不多,对此功能也不是很熟悉,一般都是使用自己内部的库,但是涉及到去其他公司建模,或者是一个封闭的环境时,常常不能使用自己的东西,这就得使用toad或者scorecardpy,下面简单介绍一下,不过着重点还是一下三点:

(1)计算出了iv(输出是一个字典)转化成pd.df;iv参数的使用;

(2)转换评分卡 ,scorecardpy内置的模型时sklearn 的逻辑回归,如果使用其他的,比如statsmodels.api 的逻辑回归,又该如何应对;

(3)如果使用scorecardpy,整个建模流程是如何。

下面开始本次学习之旅,以及解决上面三个问题。

 

一、导入数据

使用的是scorecardpy内置的数据作为例子

import scorecardpy as sc

# 加载德国信用卡相关数据集
dat = sc.germancredit()
dat.info()

 

 

 

二、计算变量iv

看其他的介绍文档里面,这一步是变量刷选,但是我觉得首先要对变量的整体情况有一定了解,再去刷选变量,所以这一步先计算变量iv 

使用函数是sc.woebin()

sc.woebin??

def woebin(dt, y, x=None, 
           var_skip=None, breaks_list=None, special_values=None, 
           stop_limit=0.1, count_distr_limit=0.05, bin_num_limit=8, 
           # min_perc_fine_bin=0.02, min_perc_coarse_bin=0.05, max_num_bin=8, 
           positive="bad|1", no_cores=None, print_step=0, method="tree",
           ignore_const_cols=True, ignore_datetime_cols=True, 
           check_cate_num=True, replace_blank=True, 
           save_breaks_list=None, **kwargs):

woebin()可针对数值型和类别型变量生成最优分箱结果,方法可选择决策树分箱、卡方分箱或自定义分箱。其他各参数的含义如下:

  • var_skip: 设置需要跳过分箱操作的变量;
  • breaks_list: 切分点列表,默认为空。如果非空,则按设置的切分点进行分箱处理;
  • special_values: 设置需要单独分箱的值,默认为空;
  • count_distr_limit: 设置分箱占比的最小值,一般可接受范围为0.01-0.2,默认值为0.05;
  • stop_limit: 当IV值的增长率小于所设置的stop_limit,或卡方值小于qchisq(1-stoplimit, 1)时,停止分箱。一般可接受范围为0-0.5,默认值为0.1;
  • bin_num_limit: 该参数为整数,代表最大分箱数。
  • positive: 指定样本中正样本对应的标签,默认为"bad|1";
  • no_cores: 设置用于并行计算的 CPU 数目;
  • print_step: 该参数为非负数,默认值为1。若print_step>0,每次迭代会输出变量名。若iteration=0或no_cores>1,不会输出任何信息;
  • method: 设置分箱方法,可设置"tree"(决策树)或"chimerge"(卡方),默认值为"tree";
  • ignore_const_cols: 是否忽略常数列,默认值为True,即忽略常数列;
  • ignore_datetime_cols: 是否忽略日期列,默认值为True,即忽略日期列;
  • check_cate_num: 检查类别变量中枚举值数目是否大于50,默认值为True,即自动进行检查。若枚举值过多,会影响分箱过程的速度;
  • replace_blank: 设置是否将空值填为None,默认为True。

一般设置这三个参数即可,其余的使用默认参数

#如果special_values=-1000,可以这样表示,就会将-1000作为单独的一箱
bins = sc.woebin(dat, y="creditability",count_distr_limit=0.05, bin_num_limit=5)

 

 

 我们需要将dict转为pd.df 

import pandas as pd
iv_data = pd.DataFrame()
for i in dat.columns[0:-1]:
    iv_data = iv_data.append(bins[i])

 

 

 这样就比较好看。且容易分析比较

当然你也可以使用画图的形式(但是图片占用内存过大,且当变量特别多时候,看起来也很困难,因此我一般不使用),就会输出每个变量的分箱图片。

sc.woebin_plot(bins)

 

调箱可以这样处理,breaks_list,参数是dict形式

breaks_adj = {
    'age.in.years': [26, 35, 40],
    'other.debtors.or.guarantors': ["none", "co-applicant%,%guarantor"]
}
bins_adj = sc.woebin(dat, y="creditability", breaks_list=breaks_adj)
bins_adj['age.in.years']

 

 

 

三、划分数据集

sc内置了一个划分数据集的函数,但其实是使用df.sample()函数,里面也2个参数,可以自己设置

train, test = sc.split_df(dat, 'creditability').values()

#def split_df(dt, y=None, ratio=0.7, seed=186)

 

四、刷选变量

先介绍sc里面的用法,var_filter根据IV 值小于0.02,或缺失率大于95%,或同值率(除空值外)大于95% 去剔除变量

def var_filter(dt, y, x=None, iv_limit=0.02, missing_limit=0.95,  
               identical_limit=0.95, var_rm=None, var_kp=None, 
               return_rm_reason=False, positive='bad|1')

其中各参数含义如下:

  • varrm可设置强制保留的变量,默认为空;
  • varkp可设置强制剔除的变量,默认为空;
  • return_rm_reason可设置是否返回剔除原因,默认为不返回(False);
  • positive可设置坏样本对应的值,默认为“bad|1”。
dt_s = sc.var_filter(dat, y="creditability")

其实更建议手动挑选,因为做评分卡需要模型有可解释性,也就是要求模型入模变量符合业务解释,要求单调性等等,单纯的iv可能选择不了最符合的。

不过变量很多时,可以用来做初刷。

 

五、woe转换

 

标签:分箱,None,变量,介绍,iv,limit,sc,scorecardpy
来源: https://www.cnblogs.com/cgmcoding/p/16185168.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有