这是一份kaggle上的银行的数据集,研究该数据集可以预测客户是否认购定期存款y。这里包含20个特征。
1. 分析框架
2. 数据读取,数据清洗
#导入相关包
importnumpyasnp
importpandasaspd
#读取数据
data=pd.read_csv('./1bank-additional-full.csv')
#查看表的行列数
data.shape
输出:
这里只有nr.employed这列有丢失数据,查看下:
data['nr.employed'].value_counts()
这里只有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("各年龄段的人数")
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')
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')
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')
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')
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))
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))
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))
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))
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曲线')
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曲线')
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曲线')
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曲线')
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
算法
+关注
关注
23文章
4599浏览量
92617 -
数据分析
+关注
关注
2文章
1427浏览量
34006 -
python
+关注
关注
55文章
4778浏览量
84439
原文标题:用 Python 算法预测客户行为案例!
文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
电梯按需维保——“故障预测”算法模型数据分析
梯云物联的智能AI终端在故障预测算法模型数据分析中扮演着核心角色,其工作流程涵盖了数据采集、特征提取、模型构建、故障预测与预警等多个环节,形成了一套完整的电梯故障预测解决方案。
Python建模算法与应用
上成为理想的脚本语言,特别适用于快速的应用程序开发。本文将详细介绍Python在建模算法中的应用,包括常见的建模算法、Python在建模中的优势、常用库以及实际案例。
如何实现Python复制文件操作
Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在这篇文章中,你将会看到一些用 Python 实现文件复制的特殊方法。下面我们开始学习这九种不同的方法来实现
matlab预测模型怎么用
MATLAB预测模型是一种基于统计和数学方法的预测工具,广泛应用于各种领域,如金融、气象、生物医学等。本文将介绍MATLAB预测模型的使用方法。 数据预处理 数据预处理是预测模型建立的
python做bp神经网络预测数据
BP神经网络(Backpropagation Neural Network)是一种多层前馈神经网络,通过反向传播算法进行训练。它在许多领域,如模式识别、数据挖掘、预测分析等,都有广泛的应用。本文将
用pycharm进行python爬虫的步骤
以下是使用PyCharm进行Python爬虫的步骤: 安装PyCharm和Python 首先,您需要安装PyCharm和Python。PyCharm是一个流行的Python集成开发环境
AI行为识别视频监控系统 Python
AI行为识别视频监控系统来自机器视觉技术的革新。机器视觉技术应用是人工智能技术分析的一个支系。它可以在图形和图象具体内容叙述中间创建投射关联,使电脑可以根据图像处理和剖析比较,进而熟悉视频图象中
神经网络的基本原理及Python编程实现
神经网络作为深度学习算法的基本构建模块,模拟了人脑的行为,通过互相连接的节点(也称为“神经元”)实现对输入数据的处理、模式识别和结果预测等功能。本文将深入探讨神经网络的基本原理,并结合Pyth
传感器数据融合算法python代码
的原理和应用,并给出一些使用Python编程语言实现传感器数据融合算法的示例代码。 首先,让我们来了解传感器数据融合算法的原理。传感器数据融合算法的一个关键概念是通过多个传感器的数据来
Python运行环境有哪些
,也是最常用的解释器。它是用C语言编写的,支持C的扩展和嵌入。CPython可以在各个操作系统上运行,并提供了Python的核心功能。 JPython: JPython是Python的Java实现,它可
python shell怎么用
Python Shell是一种交互式解释器,可以通过命令行直接运行Python代码。在Shell中,可以输入一行代码并立即得到结果,非常适合于测试、尝试新代码或进行简单的任务。本文将详细介绍
Python2与Python3的差异
Python2与Python3是两个不同的版本,它们在语法、功能和性能等方面存在一些差异。下面是对Python2和Python3的详尽、详实、细致的比较,分为以下几个方面: 语法差异:
评论