评分卡项目总结

本文详述了一个信用评分卡的创建过程,包括数据预处理(如缺失值、异常值处理),特征选择(利用WOE和IV值),建模(逻辑回归),评分卡生成以及模型评估。在数据预处理中,针对' MonthlyIncome'和'NumberOfDependents'的缺失值采取不同策略。模型评估通过KS曲线和AUC值,表明模型具有良好的泛化能力。
摘要由CSDN通过智能技术生成

一、分析目的

信用评分A卡制作,判断用户是否违约。

二、数据处理

这一步不仅涉及列名修改、去重、缺失值、异常值等常规处理,还有WOE分箱处理。

2.1、列名格式规范性处理

修改部分列名,比如数据中的‘NumberOfTime60-89DaysPastDueNotWorse’和‘NumberOfTime30-59DaysPastDueNotWorse’两列。由于一些算法或方法,列名中的某些符号会带来问题甚至报错,例如这里的"-",会在回归公式中被认为是减号,所以换成"_"。

train_data.columns=train_data.columns.map(lambda x:x.replace('-','_'))

2.2、重复数据处理

删除重复行数据。重复数据,容易导致回归系数标准误降低,使得对应p值减小。

train_data.drop_duplicates(inplace=True)

2.3、缺失值处理

2.3.1、查看缺失值分布情况

我们使用missingno库的matrix()方法查看各特征缺失值情况。

import missingno as msno
msno.matrix(train_data)
plt.show()

在这里插入图片描述从上图看,‘MonthlyIncome’和‘NumberOfDependents’两列存在缺失值,前者占比最多大于80%,后者占比较少。

2.3.2、缺失值处理逻辑

1、常规的缺失值处理方法是占比超过80%缺失值数据直接删除。对于信用评分卡来说,由于所有变量都需要分箱,故这里缺失值作为单独的箱子即可。
2、对于最后一列‘NumberOfDependents’,缺失值占比只有2.56%,作为单独的箱子信息不够,故做单一值填补,这列表示家庭人口数,有右偏的倾向,且属于计数的数据,故使用中位数填补。

2.3.2、单一值替换缺失值

将最后一列‘NumberOfDependents’的缺失值替换成中位数。

NOD_median=train_data['NumberOfDependents'].median()
train_data['NumberOfDependents'].fillna(NOD_median,inplace=True)

2.4、异常值处理

异常值常见的处理方法有删除所在的行、替换成缺失值(与缺失值一起处理)或盖帽法处理。结合业务逻辑和算法需求判断是否需要处理异常值以及如何处理,一般情况下盖帽法即可,即将极端异常的值改成不那么异常的极值,当然一些算法例如决策树中连续变量的异常值也可以不做处理。我们先定义好盖帽法函数,需要的时候再拿来用。

def block(x,lower=True,upper=True):
# x是输入的Series对象,lower表示是否替换1%分位数,upper表示是否替换99%分位数
    ql=x.quantile(0.01)
    qu=x.quant
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值