机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)
案例介绍
由于不良或缺少信用记录,很多人难以获得贷款。Home Credit
是一家金融服务机构,致力于向无银行账户的人群提供积极且安全的借贷经历。Home Credit利用多种来源的数据,例如,电话费、消费交易信息,预测客户的偿还能力。本案例使用Home Credit提供的客户借贷历史数据,预测该申请人是否有能力还贷,从而决定是否向他发放贷款。这是一个标准的有监督分类问题。
-
有监督:训练数据带有类标签,目标任务是训练一个模型预测特征的标签。
-
分类:标签是0-1二值变量。1代表重新放贷有困难;0代表按时重新放贷。
数据描述
该案例包括7个不同来源的数据文件:
-
application_train/application_test: 包括每一笔贷款的信息,每行包括一笔贷款,由特征
SK_ID_CURR
识别。训练集的TARGET
是二值变量,1表示不能放贷;0表示能放贷。 -
bureau: 客户以前的信用情况。每一行表示以前的一次贷款,在
application
数据里的每一个贷款申请可能有多个以前的信贷记录。 -
bureau_balance:
bureau
里以前贷款的月数据。每行表示以前贷款的月记录,所以一笔以前的贷款可能有多行记录。 -
previous_application:
Home Credit
客户以前的贷款申请记录。每一笔当前的申请都有多个以前的贷款。每一笔以前的申请由特征SK_ID_PREV
标识。 -
POS_CASH_BALANCE: 以前的销售或现金贷款客户的月数据。
-
credit_card_balance: 以前的信用卡客户月余额。
-
installments_payment: Home Credit客户以前贷款的支付历史,每一行对应一笔支付记录。
我们用一张图表示这些数据集的关系。
首先,我们导入一个数据科学任务必需的4个Python库:numpy
, pandas
, sklearn
, matplotlib
.
# numpy and pandas for data manipulation
import numpy as np
import pandas as pd
# sklearn preprocessing for dealing with categorical variables
from sklearn.preprocessing import LabelEncoder
# File system manangement
import os
# Suppress warnings
import warnings
warnings.filterwarnings('ignore')
# matplotlib and seaborn for plotting
import matplotlib.pyplot as plt
import seaborn as sns
我们列出所有可用的9个数据文件:一个训练集(with target), 一个检验集(without target), 一个例子提交文件,6个贷款信息文件。
# List files available
print(os.listdir("../input/"))
# Training data
app_train = pd.read_csv('../input/application_train.csv')
print('Training data shape: ', app_train.shape)
app_train.head()
训练集有307511行(每行对应一笔贷款),122个特征(包括预测变量target
)。再看看检验集。
# Testing data features
app_test = pd.read_csv('../input/application_test.csv')
print('Testing data shape: ', app_test.shape)
app_test.head()
Testing data shape: (48744, 121)
探索性数据分析
在这个阶段,我们计算统计量、作图显示数据的结构、趋势、变量间的关系。EDA
对下面的建模有指示性的作用,例如,提示我们选用哪些变量。
Target的分布
预测变量target
取0, 1两个值。0表示按时放贷,1表示客户有还款困难。我们先看看这两类的个数,并用频数直方图表示。
print(app_train['TARGET'].value_counts())
0 282686
1 24825
Name: TARGET, dtype: int64
app_train['TARGET'].astype(int).plot.hist()
plt.show()
1值明显少于0值,这是一个不平衡类问题。我们将考虑复杂的机器学习模型,给类赋予权值反映这种不平衡性。