LR制作评分卡

本文介绍了使用逻辑回归(LR)制作评分卡的过程,包括项目背景、数据预处理(如去重、填补缺失值、处理异常值)、样本不均衡处理、连续型变量的离散化与WOE映射,以及模型验证和评分卡建立。讨论了分箱在评分卡中的重要性和优化方法。
摘要由CSDN通过智能技术生成

LR制作评分卡

1.项目背景

评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段,主要是用来衡量向别人借钱的人(受信人,需要融资的公司)不能如期履行合同中的还本付息责任,并让借钱给别人的人(授信人,银行等金融机构)造成经济损失的可能性。一般来说,评分卡打出的分数越高,客户的信用越好,风险越小。
通常有”四张卡“来评判个人的信用程度:A卡,B卡,C卡和F卡。
本项目主要是制作A卡(即申请者评级模型),用来判断金融机构是否应该借钱给一个新用户,如果这个人的风险太高,我们可以拒绝贷款。
数据来源:数据来自Kaggle,下载地址https://www.kaggle.com/c/GiveMeSomeCredit/data

2.模型开发

2.1数据探索与预处理

变量名 描述
SeriousDlqin2yrs 出现 90 天或更长时间的逾期行为,用来定义好坏客户
RevolvingUtilizationOfUnsecuredLines 贷款以及信用卡可用额度与总额度比例
age 借款人借款年龄
NumberOfTime30-59DaysPastDueNotWorse 过去两年内出现35-59天逾期但是没有发展得更坏的次数
DebtRatio 负债比率(每月偿还债务,赡养费,生活费用除以月总收入)
MonthlyIncome 月收入
NumberOfOpenCreditLinesAndLoans 开放式贷款和信贷数量
NumberOfTimes90DaysLate 过去两年内出现90天逾期或更坏的次数
NumberRealEstateLoansOrLines 抵押贷款和房地产贷款数量,包括房屋净值信贷额度
NumberOfTime60-89DaysPastDueNotWorse 过去两年内出现60-89天逾期但是没有发展得更坏的次数
NumberOfDependents 家庭中不包括自身的家属人数(配偶,子女等)
2.1.1去除重复值

可能因人为输入重复,或者系统录入重复,会存在的一个问题就是样本重复,从而必须对数据进行去重处理

#去除重复值并恢复索引
data.drop_duplicates(inplace=True)
data.reset_index(inplace=True)
2.1.2填补缺失值
#探索缺失值
data.info()
data.isna().sum()/data.shape[0]
#发现需要填补的特征是“MonthlyIncome”和“NumberOfDependents”。
#“NumberOfDependents”缺失很少,仅缺失了大约2.5%,可以填补或者删除。
#“MonthlyIncome”缺失了约20%,“MonthlyIncome”是一个对信用评分来说很重要的因素,需要进行填补
#使用均值填补“NumberOfDependents”的缺失值
data["NumberOfDependents"].fillna(int(data["NumberOfDependents"].mean()),inplace=True)
#使用随机森林填补“MonthlyIncome”的缺失值
def RF_fill_na(x,y,fill_col):
    """
    x:特征矩阵
    y:标签
    fill_col:需要填充的列名
    """
     #构造新的特征列和标签列
    df = x.copy()
    label_new = df.loc[:,fill_col]
    df = pd.concat([df.loc[:,df.columns != fill_col], pd.DataFrame(y)],axis=1)
    
    #训练集和测试集
    y_train =  label_new[label_new.notnull()]
    y_test = label_new[label_new.isnull()]
    x_train = df.iloc[y_train.index,:]
    x_test = df.iloc[y_test.index,:]
    
    #填补缺失值
    from sklearn.ensemble import RandomForestRegressor as rfr
    rfr = rfr(n_estimators=100).fit(x_train, y_train)
    y_predict = rfr.predict(x_test)
    return y_predict

x = data.iloc[:,1:]
y = data["SeriousDlqin2yrs"]
y_pred = RF_fill_na(x,y,"MonthlyIncome")
data.loc[data.loc[:,"MonthlyIncome"]
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值