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"]