信用评分的机器学习

银行在市场经济中扮演着至关重要的角色。他们决定谁可以得到资金,以什么条件,可以作出或不作出投资决定。为了使市场和社会发挥作用,个人和公司需要获得信贷。
信用评分算法是银行用来判断是否应该发放贷款的方法,它对违约概率进行猜测。这项竞赛要求参赛者通过预测某人在未来两年内遭遇财务困境的可能性,提高信用评分的水平数据集
属性信息:

变量名称 描述 类型
严重违约2年 逾期90天或更严重的人 是/否
撤销未治愈线路的利用率 信贷总余额除以信贷限额之和 百分比
年龄 借款人年龄(以年计) 整数
NumberOfTime30-59天逾期未还 借款人逾期30-59天的次数 整数
负债率 每月债务支付 百分比
月收入 月收入 实际
未清信用额度和贷款数 未清贷款数 整数
NumberOfTimes90DaysLate 借款人逾期90天或以上的次数。 整数
NumberAlestateLoansorLines 抵押贷款和房地产贷款的数量 整数
NumberOfTime60-89天逾期未还 借款人逾期60-89天的次数 整数
NumberOfDependents 家庭中的受抚养人数量 整数
import pandas as pd
pd.set_option('display.max_columns', 500)
import zipfile
with zipfile.ZipFile('KaggleCredit2.csv.zip', 'r') as z:   ##读取zip里的文件
    f = z.open('KaggleCredit2.csv')
    data = pd.read_csv(f, index_col=0)
data.head()

在这里插入图片描述

data.shape
 #(112915, 11)

data.dropna(inplace=True)   ##去掉为空的数据
data.shape #(108648, 11)

创建X和y

y = data['SeriousDlqin2yrs']
X = data.drop('SeriousDlqin2yrs', axis=1)
y.mean() ##求取均值

练习1

把数据切分成训练集和测试集

from sklearn import model_selection
x_tran,x_test,y_tran,y_test=model_selection.train_test_split(X,y,test_size=0.2)
print(x_test.shape)
(21730, 10)

练习2

使用logistic regression/决策树/SVM/KNN…等sklearn分类算法进行分类,尝试查sklearn API了解模型参数含义,调整不同的参数。

from sklearn.linear_model import LogisticRegression
## https://blog.csdn.net/sun_shengyun/article/details/53811483
lr=LogisticRegression(multi_class='ovr',solver='sag',class_weight='balanced')
lr.fit(x_tran,y_tran)
score=lr.score(x_tran,y_tran)
print(score) ##最好的分数是1
0.9323730412572769


/usr/local/lib/python3.5/dist-packages/sklearn/linear_model/sag.py:326: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge
  "the coef_ did not converge", ConvergenceWarning)

练习3

在测试集上进行预测,计算准确度

from sklearn.metrics import accuracy_score
## https://blog.csdn.net/qq_16095417/article/details/79590455
train_score=accuracy_score(y_tran,lr.predict(x_tran))
test_score=lr.score(x_test,y_test)
print('训练集准确率:',train_score)
print('测试集准确率:',test_score)
训练集准确率: 0.9323730412572769
测试集准确率: 0.9332719742291763

练习4

查看sklearn的官方说明,了解分类问题的评估标准,并对此例进行评估。

##召回率
from sklearn.metrics import recall_score
train_recall=recall_score(y_tran,lr.predict(x_tran),average='macro')
test_recall=recall_score(y_test,lr.predict(x_test),average='macro')
print('训练集召回率:',train_recall)
print('测试集召回率:',test_recall)
训练集召回率: 0.4999938302834368
测试集召回率: 0.4999753463833144

练习5

银行通常会有更严格的要求,因为fraud带来的后果通常比较严重,一般我们会调整模型的标准。

比如在logistic regression当中,一般我们的概率判定边界为0.5,但是我们可以把阈值设定低一些,来提高模型的“敏感度”,试试看把阈值设定为0.3,再看看这时的评估指标(主要是准确率和召回率)。

tips:sklearn的很多分类模型,predict_prob可以拿到预估的概率,可以根据它和设定的阈值大小去判断最终结果(分类类别)

import numpy as np
y_pro=lr.predict_proba(x_test) ##获取预测概率值
y_prd2 = [list(p>=0.3).index(1) for i,p in enumerate(y_pro)]   ##设定0.3阈值,把大于0.3的看成1分类。
train_score=accuracy_score(y_test,y_prd2)
print(train_score)
0.9333179935572941
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐