这是一份kaggle上的银行的数据集,研究该数据集可以预测客户是否认购定期存款y。这里包含20个特征。
1. 分析框架
![ab54dfda-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dCAZbIOAAEiHflKaUI342.png)
2. 数据读取,数据清洗
#导入相关包
importnumpyasnp
importpandasaspd
#读取数据
data=pd.read_csv('./1bank-additional-full.csv')
#查看表的行列数
data.shape
输出:
![ab69c184-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGAf-aiAAACgW5i48E004.png)
![ab7ee2a8-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGAHZ_tAAD3P_OvdC8858.png)
这里只有nr.employed这列有丢失数据,查看下:
data['nr.employed'].value_counts()
![ab8febf2-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGAP7yhAAAGoXMV5Wg367.png)
这里只有5191.0这个值,没有其他的,且只有7763条数据,这里直接将这列当做异常值,直接将这列直接删除了。
#data.drop('nr.employed',axis=1,inplace=True)
3. 探索性数据分析
3.1查看各年龄段的人数的分布
这里可以看出该银行的主要用户主要集中在23-60岁这个年龄层,其中29-39这个年龄段的人数相对其他年龄段多。
importmatplotlib.pyplotasplt
importseabornassns
plt.rcParams['font.sans-serif']='SimHei'
plt.figure(figsize=(20,8),dpi=256)
sns.countplot(x='age',data=data)
plt.title("各年龄段的人数")
![aba1f54a-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGAeN58AAB8DhK6fk8592.png)
3.2 其他特征的一些分布
plt.figure(figsize=(18,16),dpi=512)
plt.subplot(221)
sns.countplot(x='contact',data=data)
plt.title("contact分布情况")
plt.subplot(222)
sns.countplot(x='day_of_week',data=data)
plt.title("day_of_week分布情况")
plt.subplot(223)
sns.countplot(x='default',data=data)
plt.title("default分布情况")
plt.subplot(224)
sns.countplot(x='education',data=data)
plt.xticks(rotation=70)
plt.title("education分布情况")
plt.savefig('./1.png')
![abaf93a8-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGAIOxwAACswUim33s902.png)
plt.figure(figsize=(18,16),dpi=512)
plt.subplot(221)
sns.countplot(x='housing',data=data)
plt.title("housing分布情况")
plt.subplot(222)
sns.countplot(x='job',data=data)
plt.xticks(rotation=70)
plt.title("job分布情况")
plt.subplot(223)
sns.countplot(x='loan',data=data)
plt.title("loan分布情况")
plt.subplot(224)
sns.countplot(x='marital',data=data)
plt.xticks(rotation=70)
plt.title("marital分布情况")
plt.savefig('./2.png')
![ac1c1ffa-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGAJLeJAAC06vOUiZk299.png)
plt.figure(figsize=(18,8),dpi=512)
plt.subplot(221)
sns.countplot(x='month',data=data)
plt.xticks(rotation=30)
plt.subplot(222)
sns.countplot(x='poutcome',data=data)
plt.xticks(rotation=30)
plt.savefig('./3.png')
![ac34c794-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGALAZeAABf2bJp-z8002.png)
3.3 各特征的相关性
plt.figure(figsize=(10,8),dpi=256)
plt.rcParams['axes.unicode_minus']=False
sns.heatmap(data.corr(),annot=True)
plt.savefig('./4.png')
![ac414b4a-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dGARfsmAAHM3TZjTWA803.png)
4. 特征规范化
4.1 将自变量的特征值转换成标签类型
#特征化数据
fromsklearn.preprocessingimportLabelEncoder
features=['contact','day_of_week','default','education','housing',
'job','loan','marital','month','poutcome']
le_x=LabelEncoder()
forfeatureinfeatures:
data[feature]=le_x.fit_transform(data[feature])
4.2 将结果y值转换成0、1
defparse_y(x):
if(x=='no'):
return0
else:
return1
data['y']=data['y'].apply(parse_y)
data['y']=data['y'].astype(int)
4.3 数据规范化
#数据规范化到正态分布的数据
#测试数据和训练数据的分割
fromsklearn.preprocessingimportStandardScaler
fromsklearn.model_selectionimporttrain_test_split
ss=StandardScaler()
train_x,test_x,train_y,test_y=train_test_split(data.iloc[:,:-1],
data['y'],
test_size=0.3)
train_x=ss.fit_transform(train_x)
test_x=ss.transform(test_x)
5. 模型训练
5.1 AdaBoost分类器
fromsklearn.ensembleimportAdaBoostClassifier
fromsklearn.metricsimportaccuracy_score
ada=AdaBoostClassifier()
ada.fit(train_x,train_y)
predict_y=ada.predict(test_x)
print("准确率:",accuracy_score(test_y,predict_y))
![ac766c58-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKASZvoAAAOVXPycso921.png)
5.2 SVC分类器
fromsklearn.svmimportSVC
svc=SVC()
svc.fit(train_x,train_y)
predict_y=svc.predict(test_x)
print("准确率:",accuracy_score(test_y,predict_y))
![ac8cedf2-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKAW-4bAAAO2jKm_iw918.png)
5.3 K邻近值分类器
fromsklearn.neighborsimportKNeighborsClassifier
knn=KNeighborsClassifier()
knn.fit(train_x,train_y)
predict_y=knn.predict(test_x)
print("准确率:",accuracy_score(test_y,predict_y))
![aca7deb4-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKAc2AeAAAObEHGx18157.png)
5.4 决策树分类器
fromsklearn.treeimportDecisionTreeClassifier
dtc=DecisionTreeClassifier()
dtc.fit(train_x,train_y)
predict_y=dtc.predict(test_x)
print("准确率:",accuracy_score(test_y,predict_y))
![acbbf70a-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKANkt0AAAO-r3X_3k829.png)
6 模型评价
6.1 AdaBoost分类器
fromsklearn.metricsimportroc_curve
fromsklearn.metricsimportauc
plt.figure(figsize=(8,6))
fpr1,tpr1,threshoulds1=roc_curve(test_y,ada.predict(test_x))
plt.stackplot(fpr1,tpr1,color='steelblue',alpha=0.5,edgecolor='black')
plt.plot(fpr1,tpr1,linewidth=2,color='black')
plt.plot([0,1],[0,1],ls='-',color='red')
plt.text(0.5,0.4,auc(fpr1,tpr1))
plt.title('AdaBoost分类器的ROC曲线')
![acd2f4a0-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKAdsUUAABrSDUalEc897.png)
6.2 SVC分类器
plt.figure(figsize=(8,6))
fpr2,tpr2,threshoulds2=roc_curve(test_y,svc.predict(test_x))
plt.stackplot(fpr2,tpr2,alpha=0.5)
plt.plot(fpr2,tpr2,linewidth=2,color='black')
plt.plot([0,1],[0,1],ls='-',color='red')
plt.text(0.5,0.4,auc(fpr2,tpr2))
plt.title('SVD的ROC曲线')
![ace52328-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKAeEPTAABlX7tc-Tk356.png)
6.3 K邻近值分类器
plt.figure(figsize=(8,6))
fpr3,tpr3,threshoulds3=roc_curve(test_y,knn.predict(test_x))
plt.stackplot(fpr3,tpr3,alpha=0.5)
plt.plot(fpr3,tpr3,linewidth=2,color='black')
plt.plot([0,1],[0,1],ls='-',color='red')
plt.text(0.5,0.4,auc(fpr3,tpr3))
plt.title('K邻近值的ROC曲线')
![ad0006ac-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKAZRQWAABgfF67tBI269.png)
6.4 决策树分类器
plt.figure(figsize=(8,6))
fpr4,tpr4,threshoulds4=roc_curve(test_y,dtc.predict(test_x))
plt.stackplot(fpr4,tpr4,alpha=0.5)
plt.plot(fpr4,tpr4,linewidth=2,color='black')
plt.plot([0,1],[0,1],ls='-',color='red')
plt.text(0.5,0.4,auc(fpr4,tpr4))
plt.title('决策树的ROC曲线')
![ad123c96-55b5-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A1/F9/wKgaomTt8dKAVWKZAABk4UfORcg818.png)
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
算法
+关注
关注
23文章
4478浏览量
91295 -
数据分析
+关注
关注
2文章
1372浏览量
33801 -
python
+关注
关注
53文章
4701浏览量
83700
原文标题:用 Python 算法预测客户行为案例!
文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
SCG客户应用ZETA预测性维护方案,精准发现设备故障
故障,从而提升工厂运营效率,降低管理成本。其中,SCG的一个客户通过采用ZETA预测性维护方案精准提前发现了机器故障,为工厂设备预测性维护树立了行业标杆。
![SCG<b class='flag-5'>客户</b>应用ZETA<b class='flag-5'>预测</b>性维护方案,精准发现设备故障](https://file1.elecfans.com//web2/M00/BD/E4/wKgZomWvJryAVs6TAAB3DMOojTo20.webp)
传感器数据融合算法python代码
的原理和应用,并给出一些使用Python编程语言实现传感器数据融合算法的示例代码。 首先,让我们来了解传感器数据融合算法的原理。传感器数据融合算法的一个关键概念是通过多个传感器的数据来
如何用python实现RFM建模
今天给大家分享的是如何用python实现RFM建模。 RFM模型的含义 RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是
![如何用<b class='flag-5'>python</b>实现RFM建模](https://file1.elecfans.com/web2/M00/AD/CC/wKgZomVDCvKAcEvOAAC3MMTWRwA588.jpg)
Bulbea:用于股票市场预测和建模的Python库
Bulbea 是一个基于深度学习开发的,用于股票市场预测和建模的Python库。 Bulbea 自带了不少可用于股票深度学习训练及测试的API,并且易于对数据进行扩展和延申,构建属于我们自己的数据
![Bulbea:用于股票市场<b class='flag-5'>预测</b>和建模的<b class='flag-5'>Python</b>库](https://file1.elecfans.com/web2/M00/A8/95/wKgaomUt-LmAJI55AAG_KPR1KSw740.jpg)
基于贪婪算法的配电网网格负荷预测与规划
u3000针对配电网网格化分层负荷预测横向收集数据繁杂、可操作性低等问题,设计无后效性的贪婪算法。该算法采用自顶而下的人机合作方式进行贪婪选择,使用土地综合分类法重新划分用地类型,确定最佳分配因子
发表于 09-22 08:15
不可错过!人工神经网络算法、PID算法、Python人工智能学习等资料包分享(附源代码)
为了方便大家查找技术资料,电子发烧友小编为大家整理一些精华资料,让大家可以参考学习,希望对广大电子爱好者有所帮助。
1.人工神经网络算法的学习方法与应用实例(pdf彩版)
人工神经 网络
发表于 09-13 16:41
如何在biquads 1.0版中使用CMSIS-DSP的Python包装
本指南提供了一个简单的示例,说明如何使用CMSIS-DSP Python包装器以及如何用Python语言表示CMSIS-DSPAPI。
嵌入式系统上的信号处理算法通常通过使用在科学计算环境中开发
发表于 08-28 06:30
Excel新功能要逆天 微软把Python加入Excel
Excel新功能要逆天 微软把Python加入Excel Excel新功能要逆天了,比如你可以在Excel里快速实现机器学习天气预测模型,可以根据已有的天气数据来预测未来的天气。 因为微软
卷积神经网络python代码
的卷积操作,将不同层次的特征进行提取,从而通过反向传播算法不断优化网络权重,最终实现分类和预测等任务。 在本文中,我们将介绍如何使用Python实现卷积神经网络,并详细说明每一个步骤及其原理。 第一步:导入必要的库 在开始编写代
python数据挖掘案例
Python数据挖掘的强大功能。 一、金融领域 1.股票价格预测 股票市场是一个复杂的系统,而股票价格的预测对于投资者来说常常是至关重要的。Python数据挖掘可以分析股票价格的历史数
Iris Python调试脚本用户指南
调试是使用CADI实现的到Fast Models的一个Python客户端接口。
在Fast Models 11.10及更高版本中不建议使用该选项。
要继续在Fast Models中使用Python
发表于 08-09 06:21
Python实现OpenCV的安装与使用
本文实例讲述了 Python 实现 OpenCV 的安装与使用。分享给大家供 大家参考,具体如下: 由于下一步要开始研究下深度学习,而深度学习领域很多的算法和应 用都是用 Python 来实现
发表于 07-20 11:46
•7次下载
评论