使用决策树进行个人信用风险评估代码

使用决策树进行个人信用风险评估

第一步,导入csv文件的数据集

使用UCI上的德国信用数据集。该数据集包含了1000个贷款信息,每一个贷款有20个自变量和一个类变量记录该笔贷款是否违约。

我们将使用该数据集构建模型来预测贷款是否违约。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

credit = pd.read_csv("data/german_credit.csv")

第二步,观察数据集

可根据一些函数来观察数据集的特征和大小。

第三步,划分训练集和测试集

在正式建模之前,我们需要将数据集分为训练集和测试集两部分。其中训练集用来构建决策树模型,测试集用来评估模型性能。

我们将使用70%数据作为训练数据,30%作为测试数据。

from sklearn import model_selection

y = credit['default']
X  = credit.loc[:,'account_check_status':'foreign_worker']
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.3, random_state=1)

第四步,模型训练

我们将使用Scikit-learn中的DecisionTreeClassifier算法来训练决策树模型。

DecisionTreeClassifier算法位于sklearn.tree包,首先将其导入,然后调用fit()方法进行模型训练。

from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
credit_model = DecisionTreeClassifier(min_samples_leaf = 6,random_state=1)
credit_model.fit(X_train, y_train)

第五步,模型性能评估

为了将我们训练好的决策树模型应用于测试数据,我们使用predict()函数,代码如下:

credit_pred = credit_model.predict(X_test)

第六步,优化模型性能评估

在实际应用中,模型的预测正确率不高,很难将其应用到实时的信贷评审过程。

在本案例中,如果一个模型将所有的贷款都预测为“未违约”,此时模型的正确率将为72%,而该模型是一个完全无用的模型。

上节中我们建立的模型,正确率为70%,但是对于违约贷款的识别性能很差。

我们可以通过创建一个代价矩阵定义模型犯不同错误时的代价。

假设我们认为一个贷款违约者给银行带来的损失是银行错过一个不违约的贷款带来损失的4倍,则未违约和违约的代价权重可以定义为:

class_weights = {0:1, 1:4}
credit_model_cost = DecisionTreeClassifier(max_depth=6,class_weight = class_weights)
credit_model_cost.fit(X_train, y_train)
credit_pred_cost = credit_model_cost.predict(X_test)

print (metrics.classification_report(y_test, credit_pred_cost))
print (metrics.confusion_matrix(y_test, credit_pred_cost))

你可能感兴趣的:(实操笔记,机器学习,西瓜书,决策树,sklearn,机器学习)