IV WOE & 评分卡 & 分箱

 

数据分箱:对连续变量离散化;实际上就是按照属性值划分的子区间,可以简单理解为分段处理(不同的是对特征进行分箱后,需要对分箱的每组进行woe编码进行分箱评估,才能放进模型训练);

意义:

    1.模型更稳定,特征离散化后,起到简化逻辑回归模型的作用,降低过拟合风险;

    2.变量离散化后对异常数据有很强的鲁棒性;

    3.将逻辑回归模型转换为评分卡形式的时候,分箱也是必须的;

分组原则:

    1.组间差异大;

    2.组内差异小;

    3.每组占比不低于5%

    4.必须有1、0两种分类;

 

----------------------------------------------------------------------------------------------

无监督分箱:

    1.等距离(宽度)分箱:每个箱的区间范围是一个常量;

    2.等频度(深度)分箱:每箱具有相同的记录数;

    3.聚类分箱:基于K-means聚类,聚类过程中需要保证分箱的有序性;

    4.用户自定义区间:根据需要自定义区间

 

有监督分箱: 分箱时考虑因变量的取值,使得分箱后达到最小熵最小描述长度

                     最小熵:熵值公式 https://blog.csdn.net/huobanjishijian/article/details/52893357;需要使总熵值最小,也就是使分箱能够最大限度区分因变量的各类别

    1.Best-KS 分箱

        KS衡量好坏样本累计部分之间的差距[评分的K-S值:最大差异];KS越大,越能将1、0样本区分的程度越大;

        计算方式: refer https://blog.csdn.net/hxcaifly/article/details/84593770

        

 

    2.卡方分箱:

        思想:判断相邻的两个区间是否有分布差异,类似类分布则可合并区间,否则分开这两区间;

        判别指标:卡方统计量;衡量区间内样本的频数分布与整体样本的频数分布的差异;

        [卡方值:]

                   卡方分布:若K个独立的随机变量Z1~Zk满足标准正态分布N(0,1),这K个随机变量的平方和服从自由度为k的卡方分布;卡方检验以卡方分布为基础的一种假设检验方法,用于分类变量之间的独立性检验,衡量实际值与理论值的差异程度

                    卡方值计算公式:

                

                     卡方阈值的确定:根据显著性水平和自由度得到卡方值;

                      阈值的意义大于阈值的卡方值说明属性和类不是相互独立的,不能合并;如果阈值选的大,区间合并会进行多次,离散后的区间数量少、区间大(合并的多,区间多样性少)

           分箱步骤:

           (0) 预先设定一个卡方的阈值;(1)初始化:根据要离散的属性对实例进行排序;每个实例属于一个区间;(2)合并区间:1.计算每一对相邻区间的卡方值;2.将卡方值最小的一对区间合并;

            分箱限制: (1)限制最终的分箱个数;  (2)卡方阈值:迭代合并直到最小卡方值超过设定阈值为止;

 

refer : https://www.sohu.com/a/224569101_793685

                    

----------------------------------------------------------------------------------------------

噪声:  一个测量变量中的随机误差和偏差,包括错误值偏离期望的孤立点值

    进行噪声检查后,通常采用分箱、聚类、回归等方法“光滑”数据,去掉数据中的噪声;

对于箱中数据的平滑方法:

    1.按平均值平滑:对同一箱值中的数据求均值,用均值代替该箱子中所有数据

    2.按边界值平滑:用距离较小的边界值代替箱中每一数据;

    3.按中值平滑:取箱子的中值替代箱中所有数据;

----------------------------------------------------------------------------------------------

分箱评估:

IV 信息量  筛选特征

    Information Value: 挑选放进模型的变量,作为一个量化指标衡量变量的预测能力,类似的指标还有信息增益、基尼指数等。

    计算公式(基于WOE):

    N为分组个数;求出每个分组的IV值,将各分组的IV相加得到整个变量的IV值;下式中good指的是模型中预测变量取值为1的个体;

 

 

    根据IV值调整分箱结构重新计算WOE和IV,直至IV达到最大值,此时分箱最好

     

WOE证据权重

    Weight of Evidence:对原始自变量的一种编码方式;对变量进行WOE编码前,需要对变量进行分箱处理;分箱后,对于第i组,WOE的计算公式:

    也有bad占比/good占比计算得到WOE的,其实没影响;因为计算WOE的目的是计算IV从而达到预测的目的;因为后面IV计算中,会通过相减相乘的方式把负号消掉,不影响最终的IV预测结果;

    意义: https://blog.csdn.net/kevin7658/article/details/50780391(也有实例解释)

 

---为什么使用IV值判断,而不直接使用WOE判断呢?

    1.IV值是非负的(WOE对数存在负数情况);

    2.IV体现出当前分组中个体的数量占整体数量的比例;

 

----------------------------------------------------------------------------------------------

                        

数据变换:

    光滑(去掉噪声)

    属性构造(特征提取)

    聚集(描述性特征:求和)

    标准化

    离散化

 

数据预处理:

   A.缺省字段的处理:

        1、缺失很多:直接丢弃

        2、离散量缺失量适中:将Nan作为一个新类别加到特征中

        3、连续量缺失量适中:给一个step(比如年龄,考虑每隔2/3岁为一个步长),然后进行离散化,再将Nan作为一个新类别加到特征中

        4、缺失很少:可用均值、中位数、众数等填充;

    B.异常值处理

        离群值检测:单变量离群值检测(可采用箱线图)、局部离群值因子检测、基于聚类方法的离群值检测

 

EDA:

        分析各变量对输出结果的影响:单变量分析、多变量分析(比如python中的corr( )函数计算各变量间的相关性;

----------------------------------------------------------------------------------------------

评分卡:

    常使用LR模型[LR借助WOE转变为标准评分卡格式]、决策树;

定义:

    1.以分数的形式衡量风险几率的方式;

    2.对未来一段时间内违约、逾期、失联概率的预测

    3.评分越高越安全

    4.在信贷场景中,不同的评分卡分为:反欺诈评分卡、申请评分卡、行为评分卡、催收评分卡【四种类型定义:refer https://blog.csdn.net/lll1528238733/article/details/76602006

计算方式:

    odds=good/bad=good/(1-good)

    score=A+B*In(odds)

    若odds是 坏客户概率/好客户概率 ,odds应取倒数,再经过ln转换则B前面是减号。所以有的地方此公式B前为负号。这里的坏客户、好客户定义为是否违约,违约为坏客户

    这里的In(odds)实际上就是WOE值;

    如何求解A\B:

            给出特定odds时的score值S0、该特定odds值翻倍时Score增加值PD0带入公式得到A、B;

 

分值分配:

    计算各个变量的各分箱对应的分值;

    refer   https://blog.csdn.net/lll1528238733/article/details/76601897

    

    得到每个变量对应分配到的分数,接着把每个变量对应的分数分别乘以变量中每个分箱的WOE,得到每个分箱的评分结果;

 

    

 

refer  https://blog.csdn.net/gxhzoe/article/details/80428560

    

 

 

 

  • 3
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分箱评分是用于信用评分模型开发中常见的技术手段。在Python中,有多种库可以用来进行分箱评分的构建,比如pandas、numpy和scikit-learn等。 下面是一个使用pandas进行分箱的示例代码: ```python import pandas as pd # 假设有一个信用评分数据集,包含了一些特征变量和目标变量 data = pd.read_csv("credit_data.csv") # 对连续变量进行分箱 data['bin_age'] = pd.cut(data['age'], bins=[0, 18, 30, 40, 50, 60, 100], labels=False) data['bin_income'] = pd.qcut(data['income'], q=5, labels=False) # 对离散变量进行分箱 data['bin_education'] = data['education'].map({'Primary': 0, 'Secondary': 1, 'Tertiary': 2}) # 构建评分 score_card = pd.DataFrame() # 计算每个箱的一些统计指标,比如坏账率、好账率等 score_card['bin_age'] = data.groupby('bin_age')['target_variable'].mean() score_card['bin_income'] = data.groupby('bin_income')['target_variable'].mean() score_card['bin_education'] = data.groupby('bin_education')['target_variable'].mean() # 计算各个箱的WOE(Weight of Evidence)和IV(Information Value) score_card['WOE'] = np.log(score_card['bin_good_rate'] / score_card['bin_bad_rate']) score_card['IV'] = (score_card['bin_good_rate'] - score_card['bin_bad_rate']) * score_card['WOE'] # 根据IV值进行变量选择和分数分配 score_card['score'] = (score_card['WOE'] * (np.log(1 / 0.01))) * 10 + 500 print(score_card) ``` 上述代码中,我们首先使用pd.cut和pd.qcut对连续变量进行分箱,然后使用map函数对离散变量进行分箱。接下来,我们通过groupby计算每个箱的一些统计指标,如坏账率和好账率等。最后,根据WOEIV值计算每个箱的评分,并打印出评分。 当然,这只是一个简单的示例,实际应用中可能还需要考虑到缺失值处理、异常值处理等问题。此外,还可以使用其他库和方法来完成分箱评分的构建,具体选择则取决于实际需求和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值