原文链接:http://tecdat.cn/?p=23518
我的项目背景:银行的次要盈利业务靠的是贷款,这些客户中的大多数是贷款大小不等的责任客户(存款人)。银行领有一直增长的客户。该银行心愿减少借款人(资产客户),发展更多的贷款业务,并通过贷款利息赚取更多利润。因而,银行心愿将负债的客户转换为集体贷款客户。(同时保留他们作为存款人)。该银行去年针对负债客户发展的一项流动显示,胜利实现了 9%以上的胜利转化率。该部门心愿建设一个模型,来帮忙他们确定购买贷款可能性更高的潜在客户。能够减少成功率,同时降低成本。
数据集
上面给出的文件蕴含 5000 个客户的数据。数据包含客户人口统计信息(年龄,支出等),客户与银行的关系(抵押,证券账户等)以及客户对上次集体贷款流动的因变量(集体贷款)。在这 5000 个客户中,只有 480 个(= 9.6%)承受了先前流动中提供给他们的集体贷款
data.head()
data.columns
属性信息
属性能够相应地划分:
- 变量 ID 一个人的客户 ID 与贷款之间没有关联,也无奈为未来的潜在贷款客户提供任何一般性论断。咱们能够疏忽此信息进行模型预测。
二进制类别具备五个变量,如下所示:
- 集体贷款 - 该客户是否承受上一个广告系列提供的集体贷款?这是咱们的指标变量
- 证券帐户 - 客户在银行是否有证券帐户?
- CD 帐户 - 客户在银行是否有贷款证实(CD)帐户?
- 网上银行 - 客户是否应用网上银行?
- 信用卡 - 客户是否应用银行发行的信用卡?
数值变量如下:
- 年龄 - 客户的年龄
- 工作教训
- 支出 - 年收入(元)
- CCAvg- 均匀信用卡生产
- 抵押 - 屋宇抵押价值
有序分类变量是:
- 家庭 - 客户的家庭人数
- 教育水平 - 客户的教育水平
标称变量是:
- ID
- 邮政编码
data.shape
data.info()
# 文件中没有列有空数据
data.apply(lambda x : sum(x.isnull()))
# 对数据进行目测
data.describe().transpose()
# 查看有多少不同数据
data.apply(lambda x: len(x.unique()))
两两变量散点图
- 年龄 特色通常是散布的,大多数客户年龄在 30 岁到 60 岁之间。
- 教训 大多散布在 8 年以上教训的客户。这里的 平均值 等于中 位数。有正数。这可能是数据输出谬误,因为通常无奈掂量负面的工作教训。咱们能够删除这些值,因为样本中有 3 或 4 条记录。
- 支出呈现 正偏斜。大多数客户的支出在 45,000 到 55K 之间。咱们能够通过说 平均值 大于 中位数 来确认这一点
- CCAvg 也是一个正偏变量,均匀收入在 0K 到 10K 之间,大多数收入不到 2.5K
- 抵押 70%的人的抵押贷款少于 4 万。然而最大值为 635K
- 家庭和教育变量是序数变量。家庭散布平均
有 52 条记录教训为正数。在进一步进行之前,咱们须要对这些记录进行清理
data\[data\['Experience'\] < 0\]\['Experience'\].count()
52
# 清理正数变量
dfExp = data.loc\[data\['Experience'\] >0\]
data.loc\[negExp\]\['ID'\].tolist() # 失去有正数教训的客户 ID
有 52 条负面教训的记录
以下代码执行以下步骤:
- 对于具备 ID 的记录,获取
Age
column 的值 - 对于具备 ID 的记录,获取
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 的客户支出更高。然而,承受了集体贷款的客户的收入水平雷同
推论:从上图能够看出,没有集体贷款的客户和领有集体贷款的客户的抵押贷款较高。
察看:大多数没有贷款的客户都有证券账户
察看:家庭人数对集体贷款没有任何影响。然而仿佛 3 岁的家庭更有可能借贷。思考将来的推广流动时,这可能是一个很好的察看后果。
察看:没有 CD 帐户的客户,也没有贷款。这仿佛占多数。然而简直所有领有 CD 帐户的客户也都有贷款
察看:该图显示有集体贷款的人的信用卡均匀费用更高。均匀信用卡生产中位数为 3800 元,表明集体贷款的可能性更高。较低的信用卡收入(中位数为 1400 元)不太可能取得贷款。这可能是有用的信息。
察看 上图显示与教训和年龄呈正相干。随着教训的减少,年龄也会减少。色彩也显示教育水平。四十多岁之间存在差距,大学以下的人也更多
# 与热图的关联性
corr = data.corr()
plt.figure(figsize=(13,7))
# 创立一个掩码,以便咱们只看到一次相干的值
a = sns.heatmap(corr,mask=mask, annot=True, fmt='.2f')
察看
- 支出和 CCAvg 呈中等相干。
- 年龄和工作教训高度相干
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
KNN(K- 最近街坊)
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()
论断
通用银行的目标是将负债客户转变为贷款客户。他们想发动新的营销流动;因而,他们须要无关数据中给出的变量之间的有分割的信息。本钻研应用了四种分类算法。从上图能够看出,随机森林 算法仿佛 具备最高的精度,咱们可
最受欢迎的见解
1.从决策树模型看员工为什么到职
2. R 语言基于树的办法:决策树,随机森林
3.python 中应用 scikit-learn 和 pandas 决策树
4.机器学习:在 SAS 中运行随机森林数据分析报告
5. R 语言用随机森林和文本开掘进步航空公司客户满意度
6.机器学习助推快时尚精准销售工夫序列
7.用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用
8.python 机器学习:举荐零碎实现(以矩阵合成来协同过滤)
9.python 中用 pytorch 机器学习分类预测银行客户散失