信贷违约风险预测(二)简单的数据探索 – 机器会学习的博客

By sayhello 2019年2月13日

版权摊牌:冠词是视频博客作者的原型文字。,还没博主批准,不得反复无常地转载。。

  记载早已短文绍介过。,客户的违约风险的预测是独身监视研究的官方使命,它次要是对买东西的人停止分类学。,谁能记下记入贷方?,哪个不克不及?,每个求职人可能性违约的概率在0~1暗中。,0、解释求职人可以即时归还记入贷方。,1:求职人将难以按计划归还,将违约。

记载初探

出生于终点的记载 Credit
有8种明确的的记载。:

  • bureau.csv
  • bureau_balance.csv
  • previous_application.csv
  • POS_CASH_BALANCE.csv
  • credit_card_balance.csv
  • installments_payment.scv

运用的Python库:numpy,pandas,sklearn, matplotlib

import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
import warnings
warnings.filterwarnings(疏忽)
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Training data

train_data = (''data/'')
print("范本等于:",[0])
print(特点量(包孕行动[帐单]):,[1])
范本等于: 307511

特点量(包孕行动[帐单] 122
train_data.head()
 

SK_ID_CURR TARGET NAME_CONTRACT_TYPE CODE_GENDER FLAG_OWN_CAR FLAG_OWN_REALTY CNT_CHILDREN AMT_INCOME_TOTAL AMT_CREDIT AMT_ANNUITY FLAG_DOCUMENT_18 FLAG_DOCUMENT_19 FLAG_DOCUMENT_20 FLAG_DOCUMENT_21 AMT_REQ_CREDIT_BUREAU_HOUR AMT_REQ_CREDIT_BUREAU_DAY AMT_REQ_CREDIT_BUREAU_WEEK AMT_REQ_CREDIT_BUREAU_MON AMT_REQ_CREDIT_BUREAU_QRT AMT_REQ_CREDIT_BUREAU_YEAR
0 100002 1 Cash loans M N Y 0 202500.0 406597.5 2470 0 0 0 0 0.0 0.0 0.0 0.0 0.0 1.0
1 100003 0 Cash loans F N N 0 270000.0 129350 35698.5 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
2 100004 0 Revolving loans M Y Y 0 67500.0 135000.0 6750.0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
3 100006 0 Cash loans F N Y 0 135000.0 31268 29686.5 0 0 0 0 NaN NaN NaN NaN NaN NaN
4 100007 0 Cash loans M N Y 0 121500.0 513000.0 21865.5 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0

5 rows × 122 columns

Test data 使有特色(无刻纹)

test_data = (''data/'')
print(测得结果范本数:",[0])
print(测得结果战利品特点(不包孕行动):",[1])

测得结果范本大量: 48744
测得结果战利品特点(不包孕行动): 121

test_data.head()

记载文件 thead 独生子女 th {
text-align: right;
}

记载文件 thead th {
text-align: left;
}

记载文件 tbody tr th {
vertical-align: top;
}

SK_ID_CURR NAME_CONTRACT_TYPE CODE_GENDER FLAG_OWN_CAR FLAG_OWN_REALTY CNT_CHILDREN AMT_INCOME_TOTAL AMT_CREDIT AMT_ANNUITY AMT_GOODS_PRICE FLAG_DOCUMENT_18 FLAG_DOCUMENT_19 FLAG_DOCUMENT_20 FLAG_DOCUMENT_21 AMT_REQ_CREDIT_BUREAU_HOUR AMT_REQ_CREDIT_BUREAU_DAY AMT_REQ_CREDIT_BUREAU_WEEK AMT_REQ_CREDIT_BUREAU_MON AMT_REQ_CREDIT_BUREAU_QRT AMT_REQ_CREDIT_BUREAU_YEAR
0 100001 Cash loans F N Y 0 135000.0 568800.0 2056 450000.0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
1 100005 Cash loans M N Y 0 99000.0 222768.0 17370.0 180000.0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 3.0
2 100013 Cash loans M Y Y 0 202500.0 663264.0 69777.0 630000.0 0 0 0 0 0.0 0.0 0.0 0.0 1.0 4.0
3 100028 Cash loans F N Y 2 315000.0 1575000.0 49018.5 1575000.0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 3.0
4 100038 Cash loans M Y N 1 180000.0 625500.0 32067.0 625500.0 0 0 0 0 NaN NaN NaN NaN NaN NaN

5 rows × 121 columns

Distribution of the TARGET


train_data[目标].value_counts()
0    282686
1     24825
Name: TARGET, D型 int64
train_data[目标].astype(int).()

这里写图片描述

在锻炼中 data中,这可能性是1/10个可以按计划结果的。,独身类型的类失衡成绩。
处置距离失衡成绩的比赛有三种。:

  • 采样是反向移动过度的范本停止的。,会耽搁很多记载。
  • 对大批范本停止过采样。
  • 经过现实当评论员记载的概率,类使负重是用来克复失调骚乱的数量。

Examine Missing Value

count_miss_val = ().sum()

(10)
SK_ID_CURR             0
TARGET                 0
NAME_CONTRACT_TYPE     0
CODE_GENDER            0
FLAG_OWN_CAR           0
FLAG_OWN_REALTY        0
CNT_CHILDREN           0
AMT_INCOME_TOTAL       0
AMT_CREDIT             0
AMT_ANNUITY           12
D型 int64
miss_val_percent = 100 * count_miss_val / [0]

(10)
SK_ID_CURR            0.000000
TARGET                0.000000
NAME_CONTRACT_TYPE    0.000000
CODE_GENDER           0.000000
FLAG_OWN_CAR          0.000000
FLAG_OWN_REALTY       0.000000
CNT_CHILDREN          0.000000
AMT_INCOME_TOTAL      0.000000
AMT_CREDIT            0.000000
AMT_ANNUITY           0.003902
D型 float64

miss_val_table = pd.concat([count_miss_val,
                 miss_val_percent], axis = 1)

new_miss_val_table = (纵队) = {0:"Count",
                          1:"% Percent"})
(10)
Count % Percent
SK_ID_CURR 0 0.000000
TARGET 0 0.000000
NAME_CONTRACT_TYPE 0 0.000000
CODE_GENDER 0 0.000000
FLAG_OWN_CAR 0 0.000000
FLAG_OWN_REALTY 0 0.000000
CNT_CHILDREN 0 0.000000
AMT_INCOME_TOTAL 0 0.000000
AMT_CREDIT 0 0.000000
AMT_ANNUITY 12 0.003902

new_miss_val_table = new_miss_val_table[[:,1] != 0].sort_values(
    "% Percent", ascending = False).round(1)
(20)
 

Count % Percent
COMMONAREA_MEDI 214865 69.9
COMMONAREA_AVG 214865 69.9
COMMONAREA_MODE 214865 69.9
NONLIVINGAPARTMENTS_MEDI 213514 69.4
NONLIVINGAPARTMENTS_MODE 213514 69.4
NONLIVINGAPARTMENTS_AVG 213514 69.4
FONDKAPREMONT_MODE 210295 68.4
LIVINGAPARTMENTS_MODE 210199 68.4
LIVINGAPARTMENTS_MEDI 210199 68.4
LIVINGAPARTMENTS_AVG 210199 68.4
FLOORSMIN_MODE 208642 67.8
FLOORSMIN_MEDI 208642 67.8
FLOORSMIN_AVG 208642 67.8
YEARS_BUILD_MODE 204488 66.5
YEARS_BUILD_MEDI 204488 66.5
YEARS_BUILD_AVG 204488 66.5
OWN_CAR_AGE 202929 66.0
LANDAREA_AVG 182590 59.4
LANDAREA_MEDI 182590 59.4
LANDAREA_MODE 182590 59.4

记载摸索阶段仍在停止中。,不要率先处置缺漏值。,但在发觉机具研究图案时,,反向移动明确的的算法朕可能性要处置这些缺漏值,停止放轻脚步走.假如算法对缺漏值不敏感也可以不必处置.或许直接的终止缺漏定标较高的特点,但如许做可能性会抛弃最有效的特点。,哪独身抛弃,抚养所稍微特点。

Examine features type

反省每个列的记载类型是延续的仍团圆的。,情郎:容纳角色和角色串。

()
float64    65
int64      41
object     16
D型 int64

train_data.select_dtypes(include = [情郎]).apply(pd.Series.nunique, axis = 0)
NAME_CONTRACT_TYPE             2
CODE_GENDER                    3
FLAG_OWN_CAR                   2
FLAG_OWN_REALTY                2
NAME_TYPE_SUITE                7
NAME_INCOME_TYPE               8
NAME_EDUCATION_TYPE            5
NAME_FAMILY_STATUS             6
NAME_HOUSING_TYPE              6
OCCUPATION_TYPE               18
WEEKDAY_APPR_PROCESS_START     7
ORGANIZATION_TYPE             58
FONDKAPREMONT_MODE             4
HOUSETYPE_MODE                 3
WALLSMATERIAL_MODE             7
EMERGENCYSTATE_MODE            2
D型 int64

  许多的图案(要不是LITGBM)不直接的运用这些角色变量。,像这样,朕必要重行计算变量。有两种经用的办法。:
– label 编码:表现独身积分中每个属性的特点值。
这里写图片描述
– One-hot 编码:每个类特点用矢径表现。
这里写图片描述
除了到这两种编码办法,相当多的提议,label encodeing 是敏捷地分将按比例放大每个类的积分值。,当图案运用这些记载时,,可能性会有果酱。,鉴于这些值可能性无法折转这些特点值的固有使负重。,可能性还远没如许。,孤独地两类特点值。,称呼委任帐单 encodeing,突出两个类别运用One HythHead,但独身辣的编码。,也有缺陷。,当特点值好心的较多时,这将致使记载维度的急剧增殖。,可以运用PCA或安心降维技术来紧缩

Label, One-hoe encodeing

运用独身热编码,特点值的类别大于2。,2种运用帐单编码。


le = LabelEncoder()
count = 0for col in train_data:
    if 锻炼记载[科尔] == 情郎:
        if len(list(train_data[col].unique())) <=2:
            (train_data[col])
            train_data[col] = (train_data[col])
            test_data[col] = (test_data[col])
            count = count + 1
print("%d 列特点是帐单编码。伯爵)
3 列特点是帐单编码。

train_data = (train_data)
test_data = (test_data)
print(拖裾诉讼数:%d,特点量(包孕行动):%d"%([0],[1]))
print(测得结果用围住:%d,特点量(不包孕行动):%d"%([0],[1]))
拖裾诉讼数:307511,特点量(包孕行动):243
测得结果用围住:48744,特点量(不包孕行动):239

  锻炼和测得结果用例的特点列明确的,这是鉴于少量的特点列的少量的分类学所做的实在。,为了使结盟记载,这些特点列适宜从锻炼记载中用力打。

train_labels = train_data[目标]

train_data, test_data = (test_data, join = , axis = 1)

train_data[目标] = train_labels
print(拖裾诉讼数:%d,特点量(包孕行动):%d"%([0],[1]))
print(测得结果用围住:%d,特点量(不包孕行动):%d"%([0],[1]))
拖裾诉讼数:307511,特点量(包孕行动):240
测得结果用围住:48744,特点量(不包孕行动):239

如今锻炼,测得结果记载共享协同特点。,接下来,的比较级摸索记载。

Anomalies Data Analysis

  记载探查术快跑中必要注重的另独身成绩。,这执意记载打中失常气象。,破格可能性出生于人工控制或策略毛病。,它也可能性是法线的。,但它代表了独身不寻常的顶点形势,这可能性会致使成绩。,像这样,在锻炼前应扫除这些非常记载。


(train_data[''DAYS_BIRTH'']/ -365).describe()
count    307511.000000
mean         43.936973
std          11.956133
min          217808
25%          34.008219
50%          43.150685
75%          53.923288
max          69.120548
Name: DAYS_BIRTH, D型 float64

(train_data[''DAYS_EMPLOYED''] / -365).describe()
count    307511.000000
mean       -174.835742
std         387.056895
min       -10065753
25%           0.791781
50%           3.323288
75%           7.561644
max          49.073973
Name: DAYS_EMPLOYED, D型 float64

任务工夫如同有些不法线。,1000方法任务?


(train_data[''DAYS_EMPLOYED'']/-365(航向) = 年 Employed 柱状图)
(年_就事)
Text(,年_就事)

这里写图片描述


train_data[''DAYS_EMPLOYED''].value_counts().head()
 365243    55374
-200         156
-224         152
-199         151
-230         151
Name: DAYS_EMPLOYED, D型 int64

anom = train_data[train_data[''DAYS_EMPLOYED''] == 365243]
non_anom = train_data[train_data[''DAYS_EMPLOYED''] != 365243]
print(法线战利品不克不及按计划付还的客户定标:%.2f%%''%(100 * non_anom[目标].mean()))
print(非常战利品不克不及按计划付还的客户定标:%.2f%%''%(100 * anom[目标].mean()))
print(任务工夫非常运用次数:%d''莱恩(阿诺姆)
法线战利品不克不及按计划归还的客户定标:
非常战利品不克不及按计划付还的客户定标:
任务工夫非常运用次数:55374

非常范本的受传唤时未出庭率比法线值低约3%。,方法处置非常?
最复杂最粗犷的办法是,直接的耽搁,除了有不计其数的范本要缩减。,孤僻的点置换,过后添加独身新的列。,在锻炼记载中拉环这些非常范本。


train_data[''DAYS_EMPOLYED_ANOM''] = train_data[''DAYS_EMPLOYED''] == 365243
train_data[''DAYS_EMPLOYED''].replace({365243:}, inplace = True)
(train_data[''DAYS_EMPLOYED'']/-365(航向) = 年 Employment 柱状图)
(年 就事)
Text(,年 就事)

这里写图片描述

 任务工夫的散布如同契合要求的评论。,非常交换,添加了特点拉环记载打中新非常。其次,在孤僻的点,始终抚养记载使结盟。

test_data[''DAYS_EMPLOYED_ANOM''] = test_data[''DAYS_EMPLOYED''] == 365243
test_data[''DAYS_EMPLOYED''].replace({365243: }, inplace = True)
print(测得结果记载中任务工夫非常范本数:%d''%test_data[''DAYS_EMPLOYED_ANOM''].sum())
测得结果记载中任务工夫非常范本数:9274

(test_data[''DAYS_EMPLOYED'']/ -365(航向) = 年 Employment 柱状图)
(年 就事)
Text(,年 就事)

这里写图片描述

Correlations Analysis

  相互相干性辨析,次要行动是找出特点变量与TA暗打中相互相干性。,扶助朕发觉记载暗打中潜在相干。

  • “very weak”
  • “weak”
  • “moderate”
  • “strong”
  • “very strong”

correlations = ()[目标].sort_values()
print(最强相互相干性的10个特点:\n'',(10))
print(最弱相互相干的10个特点:\n'',(10))
最强相互相干性的10个特点:
DAYS_ID_PUBLISH                0.051457
CODE_GENDER_M                  0.054713
DAYS_LAST_PHONE_CHANGE         0.055218
NAME_INCOME_TYPE_Working       0.057481
REGION_RATING_CLIENT           0.058899
REGION_RATING_CLIENT_W_CITY    0.060893
DAYS_EMPLOYED                  0.074958
DAYS_BIRTH                     0.078239
TARGET                         1.000000
DAYS_EMPOLYED_ANOM                  NaN
Name: TARGET, D型 float64
最弱相互相干的10个特点:
EXT_SOURCE_3                           -0.178919
EXT_SOURCE_2                           -0.160472
EXT_SOURCE_1                           -0.155317
NAME_EDUCATION_TYPE_Higher education   -0.056593
CODE_GENDER_F                          -0.054704
NAME_INCOME_TYPE_Pensioner             -6209
ORGANIZATION_TYPE_XNA                  -5987
FLOORSMAX_AVG                          -4003
FLOORSMAX_MEDI                         -3768
FLOORSMAX_MODE                         -3226
Name: TARGET, D型 float64

与靶相互相干性最强的是尼桑。,出生工夫:记载买东西的人在适用前的年岁(天)。,正数记载,等值的越小。,你年岁越大。

Effect of Age on Repayment

的比较级摸索以下,客户年岁对还款压力的使发生


train_data[''DAYS_BIRTH''] = abs(train_data[''DAYS_BIRTH''])
train_data[''DAYS_BIRTH''].corr(train_data[目标])

(train_data[''DAYS_BIRTH'']/365).corr(train_data[目标])

原始正相互相干相干呈负相互相干。,年岁单位替换为年,相互相干系数很小。
年岁散布经过柱状图停止评论。,天数变为年份。


(train_data[''DAYS_BIRTH''] / 365, edgecolor = ''k'', bins = 25)
(年岁 of 客户机)
(年岁 (年))
(伯爵)
倒转术(0),,伯爵)

 这里写图片描述

年岁散布无尖头非常。,上面是由于行动值的内核。 density 评论(KDE)核的密度评论,KDE差错参数评论。,不要添加一点先验知。,它是由于记载亲手的特点。、属性以调停散布。

核密度评论


(figsize = (10, 6))

([train_data[目标] == 0, ''DAYS_BIRTH'']/365, label = 雄蜂 = 0'')

([train_data[目标] == 1, ''DAYS_BIRTH'']/365, label = 雄蜂 = 1'')
(年岁 (年))
(0, )
(密度)
(KDE Distribution of 年头)
Text(,1,KDE Distribution of 年头)

 这里写图片描述

上图,朕可以明确地记录少量的形势。:

  • target = 0,蓝色的弯曲物,代表工夫结果的客户年岁在30-60岁暗中。,平常的年岁高。
  • target = 1,白色的弯曲物,代表无库存客户,30后,随年岁增长,Windows 默认值在减小。

明确的年岁的年岁计算,违约的定标。

age_data = train_data[[目标, ''DAYS_BIRTH'']]
age_data[''YEARS_BIRTH''] = age_data[''DAYS_BIRTH''] / 365
age_data[''YEARS_BINNED''] = (age_data[''YEARS_BIRTH''], bins = (20, 70,num = 11))
(10)
 

TARGET DAYS_BIRTH YEARS_BIRTH YEARS_BINNED
0 1 9461 25.920548 (25.0, 30.0]
1 0 16765 45.931507 (45.0, 50.0]
2 0 19046 52.180822 (50.0, 55.0]
3 0 19005 52.068493 (50.0, 55.0]
4 0 19932 54.608219 (50.0, 55.0]
5 0 16941 46.413699 (45.0, 50.0]
6 0 13778 37.747945 (35.0, 40.0]
7 0 18850 51.643836 (50.0, 55.0]
8 0 20099 55.065753 (55.0, 60.0]
9 0 14469 39.641096 (35.0, 40.0]

age_groups = (''YEARS_BINNED'').mean()
age_groups
 

TARGET DAYS_BIRTH YEARS_BIRTH
YEARS_BINNED
(20.0, 25.0] 0.123036 8532.795625 23.377522
(25.0, 30.0] 0.111436 10155.219250 27.822518
(30.0, 35.0] 0.102814 11854.848377 32.479037
(35.0, 40.0] 0.089414 13707.908253 37.555913
(40.0, 45.0] 0.078491 15497.661233 42.459346
(45.0, 50.0] 0.074171 17323.900441 47.462741
(50.0, 55.0] 0.066968 19196.494791 593136
(55.0, 60.0] 0.055314 20984.262742 57.491131
(60.0, 65.0] 0.052737 227847460 62.412459
(65.0, 70.0] 0.037270 24292.614340 66.555108
(figsize = (10,4))
((STR)), 100 * age_groups[目标])
(旋转) = 45)
(年岁 Group (年))
(落空 to 付还(%))
(落空 to Repay by Age 集合)
Text(,1,落空 to Repay by Age 集合)

 这里写图片描述

 很尖头,违约率非常好的是(20)。, 25)暗中,后来跟随年岁增长客户按计划还款的倡议越来越强了.这是独身很有效的通知.

Exterior Source

行动的三个特点与内涵最负相互相干,EXT_SOURCE_2,ExtXEXCELSTY3。这些记载出生于表面记载的规格化分。,Home 信誉并没称呼委任记载的详细检测出。


ext_data = train_data[[目标, ''EXT_SOURCE_1'', ''EXT_SOURCE_2'', ''EXT_SOURCE_3'', ''DAYS_BIRTH'']]
ext_data_corrs = ()
print(ext_data_corrs)
                TARGET  EXT_SOURCE_1  EXT_SOURCE_2  EXT_SOURCE_3  DAYS_BIRTH
TARGET        1.000000     -0.155317     -0.160472     -0.178919   -0.078239
EXT_SOURCE_1 -0.155317      1.000000      0.213982      0.186846    00610
EXT_SOURCE_2 -0.160472      0.213982      1.000000      0.109167    0.091996
EXT_SOURCE_3 -0.178919      0.186846      0.109167      1.000000    0.205478
DAYS_BIRTH   -0.078239      00610      0.091996      0.205478    1.000000
(figsize = (7,7))
(ext_data_corrs, cmap = plt.cm.RdYlBu_r, vmin = 0.25, annot = True, vmax = )
(相互相干 热图)
Text(,1,相互相干 热图)

这里写图片描述

EXT_SOURCE,KDE,核密度评论

()
 

TARGET EXT_SOURCE_1 EXT_SOURCE_2 EXT_SOURCE_3 DAYS_BIRTH
0 1 0.083037 0.262949 0.139376 9461
1 0 0.311267 22246 NaN 16765
2 0 NaN 55912 0.729567 19046
3 0 NaN 50442 NaN 19005
4 0 NaN 0.322738 NaN 19932
(figsize = (10, 15))
for i, col_name in enumerate([''EXT_SOURCE_1'',''EXT_SOURCE_2'',''EXT_SOURCE_3'']):
    (3, 1, i+1)
    
    ([ext_data[目标] == 0, col_name], label = 雄蜂 = 0'')
    
    ([ext_data[目标] == 1, col_name], label = 雄蜂 = 1'')
    (KDE Distribution of %s by 雄蜂% col_name)
    (''%s'' % col_name)
    (密度)
    (0, 3)

(h_pad = )

这里写图片描述

ExtS源表面规格化评分,详细检测出不明。,但已往相互相干系数矩阵,ExtSouthSouth1和DaysSyBiSH暗打中相互相干系数,像这样KDE弯曲物也有同类的的倾向。,违约的形势跟随EXT_SOURCE_1的增殖在下去.

Pairs Plot

为了的比较级讨论磷的散布暗打中相干,经过塞浦路斯弥补的帕里斯图安排巴黎 Plot,

(3)
TARGET EXT_SOURCE_1 EXT_SOURCE_2 EXT_SOURCE_3 DAYS_BIRTH
0 1 0.083037 0.262949 0.139376 9461
1 0 0.311267 22246 NaN 16765
2 0 NaN 55912 0.729567 19046
(3)
TARGET DAYS_BIRTH YEARS_BIRTH YEARS_BINNED
0 1 9461 25.920548 (25.0, 30.0]
1 0 16765 45.931507 (45.0, 50.0]
2 0 19046 52.180822 (50.0, 55.0]
plot_data = ([''DAYS_BIRTH''], axis = 1).copy()
plot_data[''YEAR_BIRTH''] = age_data[''YEARS_BIRTH'']

plot_data = ().loc[:10000,:]


grid = (记载) = plot_data, size = 3,diag_sharey = False,
                    hue = 目标,
                    vars = [x for x in list() if x != 目标])

()
()
(, cmap = plt.cm.OrRd_r)

(''EXT_SOURCE and Age Pairs 机遇, size = 32, y = )
Text(,,''EXT_SOURCE and Age Pairs 机遇)

这里写图片描述

  白色是指违背和约。,蓝色隐含按计划还款。,YEAR_BIRTH和EXT_SOURCE_1暗中有很强的正相互相干.这时规格化分可能性跟客户的年岁涉及.
记载是缓慢地摸索的。,其次是特点工程。

这里写图片描述

发表评论

电子邮件地址不会被公开。 必填项已用*标注