乐趣区

关于算法:Python决策树随机森林朴素贝叶斯KNNK最近邻居分析银行拉新活动挖掘潜在贷款客户

原文链接: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 机器学习分类预测银行客户散失

退出移动版