第1关:基于集成学习模型的应用案例
任务描述
本次任务我们将会使用银行营销数据集(来源于UCI数据集:UCI Machine Learning Repository ),该数据集共45211条数据,涉及葡萄牙银行机构的营销活动,通过一些与葡萄牙银行机构营销活动(电话)有关的数据,来预测客户是否会订阅定期存款(变量Y)。这在真实场景下是有意义的,可以通过这个预测结果对未来的工作进行一个初步规划,即对某些用户是否会订阅定期存款提供一个预测参照; 我们整个课程会建立一个分类模型,实现是否订阅产品的预测,该过程包括数据处理与特征工程,模型选取与训练,指标衡量与测试几个部分。
相关知识
数据处理与特征工程
首先,我们来了解一下我们的数据,从而进一步明确任务,并作出针对性的分析。银行营销数据集是一个分类问题,目的是确认客户是否会订阅银行推出的产品,对应我们所需要的标签,这在数据集中以yes,no来进行表示;除此之外,数据包含了用于判断该决定的相关信息,对应我们所需要的特征,这些特征一共有16个。特征与标签的表示如下:
- Age:年龄
- Job:工作,工作类型(分类:“行政管理”、“蓝领”、“企业家”、“女佣”、“管理”、 “退休”、“个体户”、“服务”、“学生”、“技术员”、“失业”、“未知”)
- Marital:婚姻,婚姻状况(分类:离婚,已婚,单身,未知)(注:“离婚”指离婚或丧偶)
- Education:教育(分类:‘基本.4y’,‘Basy.6y’,‘Basy.9y’’,‘Health.学校’,‘文盲’,‘专业’课程,‘大学学位’,‘未知’)
- Default:违约,信用违约吗?(分类:“不”,“是”,“不知道”)
- Housing:房,有住房贷款吗?(分类:“不”,“是”,“不知道”)
- Loan:贷款,有个人贷款吗?((分类:“不”,“是”,“不知道”)
- Contact:接触方式(分类:“移动电话”,“固定电话”)
- Month:月,最后一个联系月份(分类:‘MAR’,…,‘NOV’,’DEC’)
- Day_of_week:每周的天数,最后一周的联系日(分类):“Mon”、“Tee”、“We”、“TUU”、“FRI”
- Duration:持续时间,最后的接触持续时间,以秒为单位
- Campaign:在这次战役和这个客户联系的执行人数量
- Pdays:客户上次从上次活动中联系过去之后的天数(数字;999表示以前没有联系过客户)
- Previous:本次活动之前和本客户端的联系人数(数字)
- Proutcome:前一次营销活动的结果(分类:失败,不存在,成功)
Y -客户是否会定期存款?“是”、“否” 我们可以通过以下代码,进行数据预览:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
import seaborn as sns
data_path ='/data/shixunfiles/e6b0ca77f3f200ec5428e04dd104da53_1612443396928.csv'
df = pd.read_csv(data_path,sep=';')
print(df.head(5)) # 用于查看前五行数据
df.info()
df.describe()# 用于查看各个特征的统计分布信息
结果如下图:
从上述对数据的预览我们可以看到得到这样的几个问题:
- 字符型特征中存在unkwown值,unknown值是缺失值。
- 部分特征为字符串格式,无法放到模型训练,后期需要该字段需要进行离散型特征编码。
- 我们观察到days(最后一次联系的时间(几号))和month(最后一次联系的时间(月份))与pdays(距离上次活动最后一次联系该客户,过去了多久(999表示没有联系过))之间存在特征重合,因此我们之后使用中只保留pdays特征即可。
在分析出这些问题后我们使用代码逐步对数据进行处理:
#查找字符型属性缺失情况
for col in df.columns:
if df[col].dtype == object:
print("Percentage of \"unknown\" in %s:" %col ,df[df[col] == "unknown"][col].count(),"/",df[col].count())
结果输出如图:
以上就是对缺省值进行的处理,在处理完之后我们便可以开始进行探究特征与结果之间的相互联系。 首先我们先对label进行分析:
# 将label编码
df['y'] = df['y'].replace(to_replace=['no', 'yes'], value=