Kaggle简单的信用评分的机器学习
信用评分的机器学习银行在市场经济中扮演着至关重要的角色。他们决定谁可以得到资金,以什么条件,可以作出或不作出投资决定。为了使市场和社会发挥作用,个人和公司需要获得信贷。信用评分算法是银行用来判断是否应该发放贷款的方法,它对违约概率进行猜测。这项竞赛要求参赛者通过预测某人在未来两年内遭遇财务困境的可能性,提高信用评分的水平数据集属性信息:变量名称描述类型严重违约2年逾期90天或更严重的人是/否撤销未
信用评分的机器学习
银行在市场经济中扮演着至关重要的角色。他们决定谁可以得到资金,以什么条件,可以作出或不作出投资决定。为了使市场和社会发挥作用,个人和公司需要获得信贷。
信用评分算法是银行用来判断是否应该发放贷款的方法,它对违约概率进行猜测。这项竞赛要求参赛者通过预测某人在未来两年内遭遇财务困境的可能性,提高信用评分的水平数据集
属性信息:
| 变量名称 | 描述 | 类型 |
|---|---|---|
| 严重违约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
更多推荐



所有评论(0)