首页 > 其他 > 详细

阿里云的金融风控-贷款违约预测

时间:2020-09-11 16:13:50      阅读:81      评论:0      收藏:0      [点我收藏+]

一、赛题数据

数据大家可以到官网去下载:https://tianchi.aliyun.com/competition/entrance/531830/information需要报名后才可以下载数据

赛题以预测用户贷款是否违约为任务,数据集报名后可见并可下载,该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取80万条作为训练集,20万条作为测试集A,20万条作为测试集B,同时会对employmentTitle、purpose、postCode和title等信息进行脱敏。

字段表

FieldDescription
id 为贷款清单分配的唯一信用证标识
loanAmnt 贷款金额
term 贷款期限(year)
interestRate 贷款利率
installment 分期付款金额
grade 贷款等级
subGrade 贷款等级之子级
employmentTitle 就业职称
employmentLength 就业年限(年)
homeOwnership 借款人在登记时提供的房屋所有权状况
annualIncome 年收入
verificationStatus 验证状态
issueDate 贷款发放的月份
purpose 借款人在贷款申请时的贷款用途类别
postCode 借款人在贷款申请中提供的邮政编码的前3位数字
regionCode 地区编码
dti 债务收入比
delinquency_2years 借款人过去2年信用档案中逾期30天以上的违约事件数
ficoRangeLow 借款人在贷款发放时的fico所属的下限范围
ficoRangeHigh 借款人在贷款发放时的fico所属的上限范围
openAcc 借款人信用档案中未结信用额度的数量
pubRec 贬损公共记录的数量
pubRecBankruptcies 公开记录清除的数量
revolBal 信贷周转余额合计
revolUtil 循环额度利用率,或借款人使用的相对于所有可用循环信贷的信贷金额
totalAcc 借款人信用档案中当前的信用额度总数
initialListStatus 贷款的初始列表状态
applicationType 表明贷款是个人申请还是与两个共同借款人的联合申请
earliesCreditLine 借款人最早报告的信用额度开立的月份
title 借款人提供的贷款名称
policyCode 公开可用的策略_代码=1新产品不公开可用的策略_代码=2
n系列匿名特征 匿名特征n0-n14,为一些贷款人行为计数特征的处理

 

二、数据分析

2.1主要内容

  • 数据总体了解:
    • 读取数据集并了解数据集大小,原始特征维度;
    • 通过info熟悉数据类型;
    • 粗略查看数据集中各特征基本统计量;
  • 缺失值和唯一值:
    • 查看数据缺失值情况
    • 查看唯一值特征情况
  • 深入数据-查看数据类型
    • 类别型数据
    • 数值型数据
      • 离散数值型数据
      • 连续数值型数据
  • 数据间相关关系
    • 特征和特征之间关系
    • 特征和目标变量之间关系
  • 用pandas_profiling生成数据报告

2.2 代码示例

2.2.1 导入数据分析及可视化过程需要的库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
import warnings
warnings.filterwarnings(ignore)

2.2.2 读取文件

data_train = pd.read_csv(F:/python/阿里云金融风控-贷款违约预测/train.csv)
data_test_a = pd.read_csv(F:/python/阿里云金融风控-贷款违约预测/testA.csv)

2.2.3 总体了解

data_test_a.shape  #(200000, 48)
data_train.shape  #(800000, 47)
data_train.columns
data_train.info()
data_train.describe()
data_train.head(3).append(data_train.tail(3))

 

 

2.2.4 查看数据集中特征缺失值,唯一值等

print(fThere are {data_train.isnull().any().sum()} columns in train dataset with missing values.)
#There are 22 columns in train dataset with missing values.
# nan可视化
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

技术分享图片

 

 

 查看训练集测试集中特征属性只有一值的特征

one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
one_value_fea_test = [col for col in data_test_a.columns if data_test_a[col].nunique() <= 1]
print(one_value_fea,one_value_fea_test )
#[‘policyCode‘] [‘policyCode‘]
data_train[policyCode].value_counts() 
#1.0    800000
#Name: policyCode, dtype: int64
#可以删除
data_train=data_train.drop([policyCode],axis=1)
data_test_a=data_test_a.drop([policyCode],axis=1)
print(data_train.shape,data_test_a.shape)
data_train.columns,data_test_a.columns

2.2.5 查看特征的数值类型有哪些,对象类型有哪些

  • 特征一般都是由类别型特征和数值型特征组成
  • 类别型特征有时具有非数值关系,有时也具有数值关系。比如‘grade’中的等级A,B,C等,是否只是单纯的分类,还是A优于其他要结合业务判断。
  • 数值型特征本是可以直接入模的,但往往风控人员要对其做分箱,转化为WOE编码进而做标准评分卡等操作。从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定
data_train.info()
numerical_fea = list(data_train.select_dtypes(exclude=[object]).columns)
category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))

 

[‘id‘,
 ‘loanAmnt‘,
 ‘term‘,
 ‘interestRate‘,
 ‘installment‘,
 ‘employmentTitle‘,
 ‘homeOwnership‘,
 ‘annualIncome‘,
 ‘verificationStatus‘,
 ‘isDefault‘,
 ‘purpose‘,
 ‘postCode‘,
 ‘regionCode‘,
 ‘dti‘,
 ‘delinquency_2years‘,
 ‘ficoRangeLow‘,
 ‘ficoRangeHigh‘,
 ‘openAcc‘,
 ‘pubRec‘,
 ‘pubRecBankruptcies‘,
 ‘revolBal‘,
 ‘revolUtil‘,
 ‘totalAcc‘,
 ‘initialListStatus‘,
 ‘applicationType‘,
 ‘title‘,
 ‘n0‘,
 ‘n1‘,
 ‘n2‘,
 ‘n2.1‘,
 ‘n4‘,
 ‘n5‘,
 ‘n6‘,
 ‘n7‘,
 ‘n8‘,
 ‘n9‘,
 ‘n10‘,
 ‘n11‘,
 ‘n12‘,
 ‘n13‘,
 ‘n14‘]
[‘grade‘, ‘subGrade‘, ‘employmentLength‘, ‘issueDate‘, ‘earliesCreditLine‘]

数值型变量分析,数值型肯定是包括连续型变量和离散型变量的,找出来

#过滤数值型类别特征
def get_numerical_serial_fea(data,feas):
    ‘‘‘
    目的:划分数值型变量中的连续变量和分类变量
    data:需要划分的数据集
    feas:需要区分的特征的名称
    返回:连续变量和分类变量 的list集合
    ‘‘‘
    numerical_serial_fea = []
    numerical_noserial_fea = []
    for fea in feas:
        temp = data[fea].nunique()
        if temp <= 10:
            numerical_noserial_fea.append(fea)
            continue
        numerical_serial_fea.append(fea)
    return numerical_serial_fea,numerical_noserial_fea
numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(data_train,numerical_fea)
numerical_serial_fea,numerical_noserial_fea

 

([‘id‘,
  ‘loanAmnt‘,
  ‘interestRate‘,
  ‘installment‘,
  ‘employmentTitle‘,
  ‘annualIncome‘,
  ‘purpose‘,
  ‘postCode‘,
  ‘regionCode‘,
  ‘dti‘,
  ‘delinquency_2years‘,
  ‘ficoRangeLow‘,
  ‘ficoRangeHigh‘,
  ‘openAcc‘,
  ‘pubRec‘,
  ‘pubRecBankruptcies‘,
  ‘revolBal‘,
  ‘revolUtil‘,
  ‘totalAcc‘,
  ‘title‘,
  ‘n0‘,
  ‘n1‘,
  ‘n2‘,
  ‘n2.1‘,
  ‘n4‘,
  ‘n5‘,
  ‘n6‘,
  ‘n7‘,
  ‘n8‘,
  ‘n9‘,
  ‘n10‘,
  ‘n13‘,
  ‘n14‘],
 [‘term‘,
  ‘homeOwnership‘,
  ‘verificationStatus‘,
  ‘isDefault‘,
  ‘initialListStatus‘,
  ‘applicationType‘,
  ‘n11‘,
  ‘n12‘])

在仔细查看每个数值型的类别变量

 

阿里云的金融风控-贷款违约预测

原文:https://www.cnblogs.com/cgmcoding/p/13651921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!