【浙工商期末报告】研一Python期末作业B题(思路分享+源代码分享+原报告分享)

2023-10-30

一、题目介绍

本次期末报告分为A和B两题,这里介绍一下两题:

1.1 A题

通过 Python 对数据集 orders.csv 进行数据分析。这个数据集包含某商店关于多种产品的销售数据,以及与地理、产品类别、销售收入和利润、消费者细分等相关信息。希望通过数据分析从数据中获取到有意义的见解,以改善市场和销售策略,其中必须包含但不限于可视化分析。

1.2 B题

提供一个与某金融机构的营销活动有关的数据集,这些营销活动是基于电话的。通常情况下,需要对同一客户进行一次以上的联系,以便了解该金融产品是否会被认购(“yes”)或不(“no”)。数据集中的各字段描述如下:

  • 客户数据:

age :年龄(数值型);

job :工作情况(分类:‘admin.’, ‘blue-collar’, ‘entrepreneur’, ‘housemaid’, ‘management’,‘retired’, ‘self-employed’, ‘services’, ‘student’, ‘technician’, ‘unemployed’, ‘unknown’);

marital : 婚姻状况(分类:‘divorced’,‘married’,‘single’,‘unknown’; 注:‘divorced’ 指离婚或丧偶);

education :教育水平(分类:‘basic.4y’,‘basic.6y’,‘basic.9y’,‘high.school’,‘illiterate’,‘professional.course’,‘university.degree’,‘unknown’);

default :信用是否已经违约(分类: ‘no’,‘yes’,‘unknown’);

housing :是否有住房贷款(分类: ‘no’,‘yes’,‘unknown’);

loan :是否有个人贷款(分类: ‘no’,‘yes’,‘unknown’);

  • 与当前活动的最后一次联系有关的数据:

contact :联系时通信类型(分类: ‘cellular’,‘telephone’);

month :一年中最后一次联系的月份(分类: ‘jan’, ‘feb’, ‘mar’, …, ‘nov’, ‘dec’);

dayofweek :一周中最后一次联系是周几(分类: ‘mon’,‘tue’,‘wed’,‘thu’,‘fri’);

campaign :在本次活动中与该客户的联系次数(数值型,包括最后一次联系);

passed_days :上次联系客户后的天数(数值型,999 表示以前没有联系过客户);

previous :在此活动之前与该客户的联系次数(数值型);

pre_outcome :前期营销活动的结果(分类: ‘failure’,‘nonexistent’,‘success’);

  • 与社会和经济背景有关的一些指标:

emp_rate :就业变化率,季度指标(数值型);

cpi :消费者价格指数,月度指标(数值型);

cci :消费者信心指数,月度指标(数值型);

r3m :银行的 3 个月利率,每日指标(数值型);

employed :雇员人数,季度指标(数值型);

  • 输出变量

y :客户是否认购该金融产品(分类: ‘yes’, ‘no’).

该题包含两个文件,分别是完整的数据集( data.xlsx ),以及将要预测的结果( 学号.csv )。要求根据 data.xlsx 构建合适的机器学习模型,然后对 学号.csv 中的数据进行预测,并填入预测结果( yes或 no )。

二、B题思路讲解

2.1 问题的引入

本题是一个二分类问题,我们可以考虑使用常用的二分类算法,比如支持向量机、逻辑回归、决策树等算法。

但是本题的标签数据比较奇怪:
在这里插入图片描述

no     23596
yes     3049
Name: y, dtype: int64

正负样本的比例比较悬殊!

这是一个典型的不平衡数据集。

不平衡数据集经常出现在某些业务场景中,比如点击率预估,异常检测等。对于初学者来说,当你接到一个分类任务,乱七八糟胡乱操作一番后,上个baseline,发现自己分类的Accuracy居然高达99%(真是天才般的模型啊),但是真的部署在实际生产环境,发现对所有测试数据的预测结果居然都是Fasle。

这就是不平衡数据集带来的影响。

2.2 不平衡数据集

不平衡数据集指的是数据集各个类别的样本数目相差巨大。以二分类问题为例,假设正类的样本数量远大于负类的样本数量,这种情况下的数据称为不平衡数据。

在二分类问题中,训练集中class 1的样本数比上class 2的样本数的比值为60:1。使用逻辑回归进行分类,最后结果是其忽略了class 2,将所有的训练样本都分类为class 1。

在三分类问题中,三个类别分别为A,B,C,训练集中A类的样本占70%,B类的样本占25%,C类的样本占5%。最后我的分类器对类A的样本过拟合了,而对其它两个类别的样本欠拟合。

2.2.1 不平衡数据的实例

训练数据不均衡是常见并且合理的情况,比如:

在欺诈交易识别中,绝大部分交易是正常的,只有极少部分的交易属于欺诈交易。

在客户流失问题中,绝大部分的客户是会继续享受其服务的(非流失对象),只有极少数部分的客户不会再继续享受其服务(流失对象)。

2.2.2 不平衡数据集导致的问题

如果训练集的90%的样本是属于同一个类的,而我们的分类器将所有的样本都分类为该类,在这种情况下,该分类器是无效的,尽管最后的分类准确度为90%。所以在数据不均衡时,准确度(Accuracy)这个评价指标参考意义就不大了。实际上,如果不均衡比例超过4:1,分类器就会偏向于大的类别。

2.2.3 不平衡数据集的主要处理方法

  1. 从数据的角度出发,主要方法为采样,分为欠采样过采样以及对应的一些改进方法。
  2. 从算法的角度出发,考虑不同误分类情况代价的差异性对算法进行优化,主要是基于代价敏感学习算法(Cost-Sensitive Learning),代表的算法有adacost。

2.2.4 不平衡(均衡)数据集常用的处理方法实战

(1)扩充数据集

首先想到能否获得更多数据,尤其是小类(该类样本数据极少)的数据,更多的数据往往能得到更多的分布信息。

(2)对数据集进行重采样

  1. 过采样(over-sampling)

对小类的数据样本进行过采样来增加小类的数据样本个数,即采样的个数大于该类样本的个数。

# -*- coding: utf-8 -*-
from imblearn.over_sampling import RandomOverSampler
ros=RandomOverSampler(random_state=0) #采用随机过采样(上采样)
x_resample,y_resample=ros.fit_sample(trainset,labels)
  1. 欠采样(under-sampling)

对大类的数据样本进行欠采样来减少大类的数据样本个数,即采样的个数少于该类样本的个数。

采样算法容易实现,效果也不错,但可能增大模型的偏差(Bias),因为放大或者缩小某些样本的影响相当于改变了原数据集的分布。对不同的类别也要采取不同的采样比例,但一般不会是1:1,因为与现实情况相差甚远,压缩大类的数据是个不错的选择。

# -*- coding: utf-8 -*-
from imblearn.under_sampling import RandomUnderSampler
#通过设置RandomUnderSampler中的replacement=True参数, 可以实现自助法(boostrap)抽样
#通过设置RandomUnderSampler中的rratio参数,可以设置数据采样比例
rus=RandomUnderSampler(ratio=0.4,random_state=0,replacement=True) #采用随机欠采样(下采样)
x_resample,y_resample=rus.fit_sample(trainset,labels)

2.3 检查是否存在空值

在这里插入图片描述

此处不存在,不需要数据预处理的步骤!

2.4 数据分析过程

对各类特征进行数据分析,主要采用可视化的方法,得出初步结论,如下简单示例:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.5 数据编码

主要采用one-hot编码,可以直接调用函数pd.get_dummies

是利用pandas实现one hot encode的方式。

在这里插入图片描述
此时数据集的列为:

Index(['age', 'campaign', 'passed_days', 'previous', 'emp_rate', 'cpi', 'cci',
       'r3m', 'employed', 'y', 'job_admin.', 'job_blue-collar',
       'job_entrepreneur', 'job_housemaid', 'job_management', 'job_retired',
       'job_self-employed', 'job_services', 'job_student', 'job_technician',
       'job_unemployed', 'job_unknown', 'marital_divorced', 'marital_married',
       'marital_single', 'marital_unknown', 'education_basic.4y',
       'education_basic.6y', 'education_basic.9y', 'education_high.school',
       'education_illiterate', 'education_professional.course',
       'education_university.degree', 'education_unknown', 'default_no',
       'default_unknown', 'default_yes', 'housing_no', 'housing_unknown',
       'housing_yes', 'loan_no', 'loan_unknown', 'loan_yes',
       'contact_cellular', 'contact_telephone', 'month_apr', 'month_aug',
       'month_dec', 'month_jul', 'month_jun', 'month_mar', 'month_may',
       'month_nov', 'month_oct', 'month_sep', 'day_of_week_fri',
       'day_of_week_mon', 'day_of_week_thu', 'day_of_week_tue',
       'day_of_week_wed', 'pre_outcome_failure', 'pre_outcome_nonexistent',
       'pre_outcome_success'],
      dtype='object')

2.7 数据集采样

在这里插入图片描述
这时的正负样本已然均衡:

1    23596
0    23596
Name: y, dtype: int64

2.8 模型的建立与求解

这里我主要测试了九个算法,分别是Adaboost算法、逻辑回归算法、支持向量机算法、KNN算法、决策树算法、随机森林算法、GBDT算法、LightGBM算法以及Xgboost算法。

每一个算法都进行了评估,包括ROC曲线以及混淆矩阵,并用五折交叉验证和网格搜索确认了最佳参数。

下面举一个算法的例子,以Adaboost算法为例:

准确率: 0.9054951264302867

在这里插入图片描述
在这里插入图片描述

准确率: 0.934595281819466

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.9 最后的29个算法模型比较

在这里插入图片描述

2.10 模型的预测

选定好模型之后,进行预测,步骤与上述相同,但是不需要采样。

需要注意的是,最后需要预测的数据集缺少一列,需要排除掉才能去训练。

三、源代码和报告展示

在这里插入图片描述
格式均已整理好!

在这里插入图片描述

42页word报告!

在这里插入图片描述

五、代码和报告的分享地址

代码的地址:

https://mbd.pub/o/bread/mbd-Y52YlZ9u

报告的地址:

https://mbd.pub/o/bread/mbd-Y52YlZ9x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【浙工商期末报告】研一Python期末作业B题(思路分享+源代码分享+原报告分享) 的相关文章

随机推荐

  • php中grep,使用 $.grep() 方法

    以前自己也没有使用过 grep 方法 grep 方法是按照某种条件来过滤数组 所以使用 grep 方法可以从数组中过滤出我们想要的结果 我们以一个例子来看看 比如有一个名为 nums 的数组 var nums 1 2 3 4 5 jQuer
  • IntelliJ IDEA 快速入门指南

    本节内容 运行你的第一个Java应用程序 熟悉主界面 智能编码 简单的项目配置 构建您的项目 运行和调试应用程序 运行测试 部署你的应用到服务器上 定制一切 找到适合你的方式 从Eclipse或NetBeans的迁移 下一步做什么 如果您已
  • [矩阵的三角分解系列六] Eigen中的三角分解

    Eigen中的三角分解 简介 安装命令 三角分解函数 使用范例 矩阵的三角分解是求解线性方程组常用的方法 包括LU分解 LDU分解 杜利特 Doolittle 分解 克劳特 Crout 分解 LLT 乔累斯基Cholesky 分解 LDLT
  • 阿里云 Serverless 应用引擎 2.0,正式公测!

    阿里云 Serverless 应用引擎 SAE2 0 正式公测上线 全面升级后的 SAE2 0 具备极简体验 标准开放 极致弹性三大优势 应用冷启动全面提效 秒级完成创建发布应用 应用成本下降 40 以上 此外 阿里云还带来容器服务 Ser
  • 虚拟数字人定制公司 国内做虚拟数字人定制开发的公司有吗?

    得益于图形渲染技术 AI技术 传感器硬件等技术的发展 使得虚拟数字人逐步进入大众视野 虚拟数字人分为真人驱动 AI驱动 AI合成 不同形式的虚拟数字人制作难度与成本相差较大 许多大众认为 制作虚拟数字人就是做一个美术就可以了 如果这样的话
  • 相机标定系列---opencv相关标定算子

    目录 1 标定的相关介绍 2 算法流程及相关算子简介 1 算法流程主要有五部分 2 相关算子介绍 1 棋盘标定板查找角点 2 亚像素角点准确化 3 可视化角点 4 相机标定 5 误差计算 3 完整代码 1 标定的相关介绍 1 标定的目的 在
  • MSBuild version 与 ToolsVersion 的区别

    MSBuild version 是指MSBuild所在的Framework的版本 ToolsVersion 是指编译当前工程使用的版本 相当于MSBuild的 ToolsVersion 参数 如果一个MSBuild 脚本中 既含有Tools
  • 理解make update-api命令

    一 使用场景 增加系统API 修改 hide的API 修改公共API 存在以上修改后 都需要先执行make update api 然后再make 二 缘起 1 在以上使用场景下 编译系统源码都会出现如下提示 see build core a
  • Python——信号量、条件变量、事件

    1 信号量 Semaphore 信号量通常用于保护数量有限的资源 例如数据库服务器 在资源数量固定的任何情况下 都应该使用有界信号量 在生成任何工作线程前 应该在主线程中初始化信号量 信号量提供acquire方法和release方法 每当调
  • Summer Holiday HDU - 1827 Tarjian

    题目链接 HDU 1827 主要思路 先用Tarjian处理出强联通块 然后将每个点的边转为强联通块之间的边 然后连上一个个入度为0的强联通块中最小的结点即可 正确性解释 用Tarjian算法处理出强连通块之后把每个强联通块看成是一个点 故
  • 蓝牙模块AT模式AT指令

    文章目录 进入AT模式的两种方法 HC 05的AT指令 HC 06的AT指令 进入AT模式的两种方法 经过摸索 这里总结两种进入AT模式的方法 与USB转TTL相连后接入电脑 将波特率设置成9600 模块指示灯快闪 这时再按下模块的按钮便进
  • 解决idea中不能输出中文问题

    在CSDN上查明了问题 解决方法 gt gt gt gt gt 打开idea 点在左上角的File 找到Settings 点击找到File Encodings然后看上面的Global Encoding和Project Encoding 都选
  • 埋点理论以及基于Vue的前端埋点技术

    一 明确目标 要知道利用埋点获取数据是要做什么样的用户分析 二 获取数据 三 埋点技术 四 已有软件 五 声明式埋点的实现 利用Vue的自定义指令原理 比如下边监控按钮点击的埋点 在main js中定义全局自定义指令 Vue directi
  • 【springboot】解决springboot项目,扫描不到自定义的controller

    如果遇到 http localhost 8080 test访问出现这个异常This application has no explicit mapping for error so you are seeing this as a fall
  • ASP.Net+SQLserver部署到阿里云Windows版本服务器

    工具 1 阿里云云服务器ECS 2 Windows 7 专业版 3 Visual Studio 2017 4 SQL Server2008 R2 写在前面 网站建立好之后 部署在本地服务器 只能局域网内访问 如果想让外网可以访问该网站 我们
  • spring boot配置shiro安全框架及用户登录权限验证实现

    关于shiro的配置我单独拿出来写了 从数据库表建立 到配置 如何使用 连接地址为shiro安全框架 shiro的应用理解 如果有修改会在这里边修改的 另外 springboot shiro的项目已分享到GitHub上 如果需要的可以看下
  • Scratch3.0连接EV3,WEDO2.0的方法视频讲解。

    为什么讲这个问题 最近因为国内对Scratch服务器访问的限制 现在访问官网和链接Scratch服务器的功能模块都使用不成了 离线版本中EV3和WEDO链接上也出了问题 目前这个是可以解决的 这个问题怎么解决 其实主要还是修改电脑的host
  • linux服务器搭建心得

    安装显卡 非必要不去官网手动安装 容易出错 ubuntu 查看显卡 ubuntu drivers devices 根据输出安装 sudo apt install nvidia deiver xxx 重启 reboot 检查安装 nvidia
  • 队列实现栈(你看我讲的是不是最细的就完了)

    最伟大的成就往往起源于最强烈的热情 诺曼 文森特 皮尔目录 一 队列实现栈 二 使用两个队列来模拟实现栈 1 栈结构体包含两个队列 2 创建一个结构体的指针 3 myStackPush入栈操作 4 myStackPop出队列操作并返回剩下的
  • 【浙工商期末报告】研一Python期末作业B题(思路分享+源代码分享+原报告分享)

    目录 研一Python期末作业B题 思路分享 一 题目介绍 1 1 A题 1 2 B题 二 B题思路讲解 2 1 问题的引入 2 2 不平衡数据集 2 2 1 不平衡数据的实例 2 2 2 不平衡数据集导致的问题 2 2 3 不平衡数据集的