项目背景:银行的主要盈利业务靠的是贷款,这些客户中的大多数是存款大小不等的责任客户(存款人)。银行拥有不断增长的客户(点击文末“阅读原文”获取完整代码数据)。
该银行希望增加借款人(资产客户),开展更多的贷款业务,并通过贷款利息赚取更多利润。因此,银行希望将负债的客户转换为个人贷款客户。(同时保留他们作为存款人)。该银行去年针对负债客户开展的一项活动显示,成功实现了9%以上的成功转化率。该部门希望建立一个模型,来帮助他们确定购买贷款可能性更高的潜在客户。可以增加成功率,同时降低成本。
相关视频
下面给出的文件包含5000个客户的数据(查看文末了解数据获取方式)。数据包括客户人口统计信息(年龄,收入等),客户与银行的关系(抵押,证券账户等)以及客户对上次个人贷款活动的因变量(个人贷款)。在这5000个客户中,只有480个(= 9.6%)接受了先前活动中提供给他们的个人贷款
data.head()
data.columns
属性可以相应地划分:
二进制类别具有五个变量,如下所示:
数值变量如下:
有序分类变量是:
标称变量是:
data.shape
data.info()
# 文件中没有列有空数据
data.apply(lambda x : sum(x.isnull()))
# 对数据进行目测
data.describe().transpose()
#查看有多少不同数据
data.apply(lambda x: len(x.unique()))
有52条记录经验为负数。在进一步进行之前,我们需要对这些记录进行清理
data\[data\['Experience'\] < 0\]\['Experience'\].count()
52
#清理负数变量
dfExp = data.loc\[data\['Experience'\] >0\]
data.loc\[negExp\]\['ID'\].tolist() # 得到有负数经验的客户ID
有52条负数经验的记录
以下代码执行以下步骤:
Age
column的值Education
column的值data.loc\[np.where(\['ID'\]==id)\]\["Education"\].tolist()\[0\]
df_filtered\['Experience'\].median()
# 检查是否有负数经验的记录
data\[data\['Experience'\] < 0\]\['Experience'\].count()
0
boxplot(x='Education',y='Income',data=data)
观察 :看来教育程度为1的客户收入更高。但是,接受了个人贷款的客户的收入水平相同
点击标题查阅往期内容
01
02
03
04
推论 :从上图可以看出,没有个人贷款的客户和拥有个人贷款的客户的抵押贷款较高。
观察 :大多数没有贷款的客户都有证券账户
观察:家庭人数对个人贷款没有任何影响。但是似乎3岁的家庭更有可能借贷。考虑未来的推广活动时,这可能是一个很好的观察结果。
观察:没有CD帐户的客户,也没有贷款。这似乎占多数。但是几乎所有拥有CD帐户的客户也都有贷款
观察:该图显示有个人贷款的人的信用卡平均费用更高。平均信用卡消费中位数为3800元,表明个人贷款的可能性更高。较低的信用卡支出(中位数为1400元)不太可能获得贷款。这可能是有用的信息。
观察 上图显示与经验和年龄呈正相关。随着经验的增加,年龄也会增加。颜色也显示教育程度。四十多岁之间存在差距,大学以下的人也更多
# 与热图的关联性
corr = data.corr()
plt.figure(figsize=(13,7))
# 创建一个掩码,以便我们只看到一次相关的值
a = sns.heatmap(corr,mask=mask, annot=True, fmt='.2f')
观察
sns.boxplot
看下面的图,收入低于10万的家庭比高收入的家庭更不可能获得贷款。
将数据分为训练集和测试集
train\_labels = train\_set
test\_labels = test\_set
DecisionTreeClassifier(class_weight=None, criterion='entropy', ...)
dt_model.score
0.9773333333333334
dt\_model.predict(test\_set)
预测
array(\[0, 0, 0, 0, 0\])
查看测试集
test_set.head(5)
naive\_model.fit(train\_set, train_labels)
naive_model.score
0.8866666666666667
RandomForestClassifier(max\_depth=2, random\_state=0)
Importance.sort_values
randomforest\_model.score(test\_set,test_labels)
0.8993333333333333
data.drop(\['Experience' ,'ID'\] , axis = 1).drop(labels= "PersonalLoan" , axis = 1)
train\_set\_dep = data\["PersonalLoan"\]
acc = accuracy\_score(Y\_Test, predicted)
print(acc)
0.9106070713809206
for name, model in models:
kfold = model\_selection.KFold(n\_splits=10)
cv\_results = model\_selection.cross\_val\_score(model, X, y, cv, scoring)
# 箱线图算法的比较
plt.figure()
通用银行的目的是将负债客户转变为贷款客户。他们想发起新的营销活动;因此,他们需要有关数据中给出的变量之间的有联系的信息。本研究使用了四种分类算法。从上图可以看出,随机森林 算法似乎 具有最高的精度,我们可以选择它作为最终模型。