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

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).()

这里写图片描述

在锻炼中 通知中间物,这能够是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当中有很强的正互插.这时统一分能够跟客户的陈化使关心.
通知是不费力地摸索的。,其次是特点工程。

这里写图片描述

发表评论

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