这篇文章中,我们将通过集成学习家族中的重要武器——随机森林算法来预测银行客户是否会流失。
该项目的具体需求是根据已知的一批客户数据来预测某个银行的客户是否会流失。通过学习历史数据,如果机器能够判断出哪些客户很有可能在未来两年内结束在该银行的业务(这当然是银行所不希望看到的),那么银行的工作人员就可以采取相应的、有针对性的措施来挽留这些高流失风险的客户。其实这个问题本质上是二分类问题,我们看看如何用随机森林来解决这类问题有何优势。
数据集下载链接:https://www.kaggle.com/tohuangjia/bank-customer
随机森林,其实是通过拟合多颗决策树来进行集成学习。集成学习为什么好,就是它通过组合一些比较简单的算法,以保留这些算法方差低的优势;在此基础之上,它又能引入复杂的模型,来扩展简单算法的预测空间,这样一来你就理解了为何集成学习是同时减少方差和偏差的大招。
01 – 开始实战:先用普通的逻辑回归算法
下面开始实战,打开这个文件观察一下这个数据集的话,我们会发现里面主要是客户的个人资料以及在该银行的历史交易信息,如信用评级等等。具体包括:
这些信息对于客户是否会流失是具有指向性的。
首先读取文件:
import numpy as np #导入NumPy数学工具箱
import pandas as pd #导入Pandas数据处理工具箱
dataframe = pd.read_csv("../input/BankCustomer.csv") # 读取文件
dataframe.head() # 显示文件前5行
显示一下数据的分布状况:
import matplotlib.pyplot as plt #导入matplotlib画图工具箱
import seaborn as sns #导入seaborn画图工具箱
# 显示不同特征的分布情况
features=[ 'City', 'Gender','Age','Tenure',
'ProductsNo', 'HasCard', 'ActiveMember', 'Exited']
fig=plt.subplots(figsize=(15,15))
for i, j in enumerate(features):
plt.subplot(4, 2, i+1)
plt.subplots_adjust(hspace = 1.0)
sns.countplot(x=j,data = dataframe)
plt.title("No. of costumers")
大概看得出,北京的客户最多,男女客户比例大概一致,年龄和客户数量呈现正态分布(钟形曲线,中间高两边低)。这个数据集还有一个显著的特点,就是流失和非流失客户的比例是不平衡的。
对这个数据集,我们主要做三方面清理工作:
- 性别,是二元类别特征,需要转换为0/1代码格式进行读取处理。(机器学习中的文本格式数据都要转换为数字代码)。
- 所在城市,这是一个多元类别特征,应把它转换成多个二元类别哑变量,这个技术在