使用信用卡数据开发信贷评分卡

通过分析信用卡数据,运用逻辑回归模型进行信贷风险评估,最终构建的评分卡模型达到0.94188的高准确率。
摘要由CSDN通过智能技术生成
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn import metrics
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
pd.options.display.max_columns = None
# 拆分列
def split_column(df, y="y"):
    try:
        X = df.drop(y, axis=1)
    except KeyError:
        raise KeyError("请在拆分列的参数中选择数据中有的字段")
    y = pd.DataFrame(df[y], columns=[y])
    return X, y

# 自定义函数
def check_nan(df_var):
    print("列数:{},行数:{}".format(*df_var.shape))
    nan_result = df_var.isnull().sum(axis=0)
    col_name_list = df_var.columns.values
    result_dict = {
   k: v for k, v in zip(col_name_list, list(nan_result))}

    total = df_var.shape[0]
    
    nan_dict = dict()
    for rd in result_dict.items():
        print("{}: {}%".format(rd[0], round((rd[1]/total)*100, 2)))
        nan_dict[rd[0]] = round((rd[1]/total)*100, 2)

    return nan_dict
# 导入数据
df = pd.read_csv('zh/cs-training.csv')
df.head(15)

在这里插入图片描述

# 查看各字段数量和类型
df.info()

在这里插入图片描述

# 检查缺失值
_ = check_nan(df)

在这里插入图片描述

# 查看数据基本情况
df.describe()

在这里插入图片描述

# 填充缺失值:月收入使用平均值填充
df=df.fillna({
   '月收入':df['月收入'].mean()})
# 删除缺失值:家属数量缺失 2.62% 直接删掉有缺失的行
df=df.dropna()
# 删除与训练无关的变量
df = df.drop(["Unnamed: 0", "ID"], axis=1)
df.shape
# 结果填充、删除操作后,查看数据情况
df1 = df
df.head(15)

在这里插入图片描述

# 再次确认缺失值情况
_ = check_nan(df)

在这里插入图片描述

# 异常值分析
x1=df['可用额度比值']
x2=df['负债率']
x3=df1["年龄"]
x4=df1["逾期30-59天笔数"]
x5=df1["逾期60-89天笔数"]
x6=df1["逾期90天笔数"]
x7=df1["信贷数量"]
x8=df1["固定资产贷款量"]
fig=plt.figure(figsize=(20,15))
ax1=fig.add_subplot(221)
ax2=fig.add_subplot(222)
ax3=fig.add_subplot(223)
ax4=fig.add_subplot(224)
ax1.boxplot([x1,x2])
ax1.set_xticklabels(["可用额度比值","负债率"], fontsize=20)
ax2.boxplot(x3)
ax2.set_xticklabels("年龄", fontsize=20)
ax3.boxplot([x4,x5,x6])
ax3.set_xticklabels(["逾期30-59天笔数","逾期60-89天笔数","逾期90天笔数"], fontsize=20)
ax4.boxplot([x7,x8])
ax4.set_xticklabels(["信贷数量","固定资产贷款量"], fontsize=20)
plt.show()
# 异常值处理:消除不合逻辑的数据和超级离群的数据
# 可用额度比值应该小于1,
# 年龄为0的是异常值,
# 逾期天数笔数大于80的是超级离群数据,
# 固定资产贷款量大于50的是超级离群数据

在这里插入图片描述

# 处理异常值:过滤离群值,筛选出剩余部分数据
df1=df1[df1['可用额度比值']<1]
df1=df1[df1['年龄']>0]
df1=df1[df1['逾期30-59天笔数']<80]
df1=df1[df1['逾期60-89天笔数']<80]
df1=df1[df1['逾期90天笔数']<80]
df1=df1[df1['固定资产贷款量']<50]
df1.shape
# 计算变量之间的相关系数
# 如果变量之间相关系数大于0.6,说明两个变量有较高的正相关性,
# 这种情况训练的模型会使模型失真,可以选择去掉其中一个变量
corr = df1.corr(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值