Python实现KNN(K近邻)分类模型(KNeighborsClassifier算法)并应用网格搜索算法寻找最优参数值以及数据标准化均衡化项目实战

news2025/1/10 3:13:56

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。

1.项目背景

股票市场是已经发行的股票转让、买卖和流通的场所,包括交易所市场和场外交易市场两大类别。在进行每一笔股票交易时,交易者(股民)都要给其账户所在的证券公司支付一些手续费,虽然单笔交易的手续费不高,但是股票市场每日都有巨额的成交量,每一笔交易的手续费汇总起来,数量便相当可观。这部分收入对于一些证券公司来说很重要,甚至可以占到营业总收入的50%以上,因此,证券公司对于客户(即交易者)的忠诚度和活跃度是很看重的。

如果一个客户不再通过某个证券公司交易,即该客户流失了,那么该证券公司便损失了一个收入来源,因此,证券公司会搭建一套客户流失预警模型来预测客户是否会流失,并对流失概率较大的客户采取相应的挽回措施,因为通常情况下,获得新客户的成本比保留现有客户的成本要高得多。

本项目通过搭建KNN客户流失预警模型来客服是否流失,从而达到降本增效的目的。

2.数据获取

本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下: 

 数据详情如下(部分展示):

3.数据预处理

3.1 用Pandas工具查看数据

使用Pandas工具的head()方法查看前五行数据:

 关键代码:

3.2数据缺失查看

使用Pandas工具的info()方法查看数据信息:

从上图可以看到,总共有6个变量,数据中无缺失值,共7043条数据。

4.探索性数据分析

4.1 是否流失人数柱状图

用Matplotlib工具的plot()方法绘制柱状图:

 

从上图可以看出,是否流失人数为0 1 类型的样本数量存在不均衡的情况。

4.2 流失人员上月交易佣金分布直方图

用Pandas工具的hist()方法绘制直方图:

从上图可以看到,月交易佣金在400元到500元的人员最容易流失。

4.3 数据相关性分析

 数据越大相关性越强,正值是正相关  负值是负相关。

5.特征工程

5.1 建立特征数据和标签数据

关键代码如下:

 

样本数7043,特征有5个变量  标签1个变量。

5.2 数据集拆分

通过train_test_split()方法按照80%训练集、20%测试集进行划分,关键代码如下:

6.构建KNN分类模型

主要使用KNeighborsClassifier算法,用于目标分类。

6.1默认参数模型构建

6.2 模型调优:应用网格搜索寻找最优参数值

针对模型中的参数n_neighbors,通过网格搜索算法寻找最优的参数值,如下图所示:

6.3 最优参数模型构建

 从上表可以看到,和调优前相比准确率有一点点增加,F1分值确降低了不少。

6.4 数据标准化

从上表可以看到,数据标准化后 准确率和F1分值都有所升高。

关键代码:

6.5 数据均衡化

从上表可以看到,目前准确率和F1分值整体效果良好,F1分值提高很多。

关键代码:

 数据均衡化后的效果展示:

7. 模型评估

7.1 评估指标及结果

评估指标主要包括准确率、查准率、查全率(召回率)、F1分值等等。

 通过上表可以看到,模型的准确率为73.19%,F1分值为0.712,模型效果良好。

7.2 查看是否过拟合

从上图可以看出,训练集和测试集分值相当,无过拟合现象。

7.3 分类报告

从上图可以看出,分类为0的F1分值为0.75;分类为1的F1分值为0.71。

7.4 混淆矩阵

 从上图可以看出,实际为0预测不为0的 有192个样本;实际为1  预测不为1的  有363个样本。

7.5 ROC曲线

从上图可以看出,AUC的值为0.5,结合上面的F1分值来看,整体模型效果良好。

8.结论与展望

综上所述,本文采用了KNN分类模型并通过网格搜索寻找最优参数值同时对原始数据进行标准化、均衡化,最终证明了我们提出的模型效果良好。

本次机器学习项目实战所需的资料,项目资源如下:

项目说明:
链接:https://pan.baidu.com/s/1dW3S1a6KGdUHK90W-lmA4w 
提取码:bcbp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】C++11部分特性

目录 一、初始化列表 二、变量类型的推导 1、auto 2、decltype 三、右值引用 1、左值与右值 2、关于左值引用、右值引用的问题 1、左值引用可以引用右值吗? 2、右值引用可以引用左值吗? 3、右值引用之后的问题 3、移动构造、移动拷贝 1、引用…

软件测试质量保证与测试

软件测试质量保证与测试 第一章 软件测试概述 1.1 软件测试背景 随着计算机技术的迅速发展和越来越广泛深入地应用于国民经济与社会生活的各个方面,软件系统的规模和复杂性与日俱增,软件的生产成本和软件中存在的缺陷与故障造成的各类损失也大大增加&…

【应用】PostgreSQL 流复制配置

PostgreSQL 流复制配置centos7 安装 postgresql时序库 timescaleDB 的安装postgresql-14 主从流复制主库配置从库配置同步流复制与异步流复制异步流复制转换为同步流复制流复制的相关参数主从流复制原理PostgreSQL WAL 日志主从流复制架构主从流复制的过程基于 docker swarm 的…

CMSC5713-IT项目管理之七、质量管理Quality Management

文章目录7.1 Quality7.2. Software Quality7.2.1. ISO/IEC 25010 Software Qualities7.2.2. Internal versus External qualities7.2.3. Software Metrics7.3. Quality Specification7.4. Project Quality Management7.4.1. Quality Planning7.4.2. Quality Assurance7.4.2.1. …

vscode 阅读 linux kernel 源码

前言 虽然身边的朋友大都在使用 source insight,但我却更喜欢 vscode。 不过 vscode 在代码搜索上确实不如 source insight,这点上我也是吃过亏的。阅读大型代码时,常常搜索不到关键代码,导致对代码的理解不充分。 当使用 vscode…

Java-反射

前言 动态语言与静态语言 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构主要动态语言有:Object…

【开源电路】STM32F401RCT6开发板

【开源电路】STM32F401RCT6开发板🌷实物PCBA: 🌼优化后的3D效果图 📚STM32F401RCT6开发板简介 📑主控是LQFP-64封装的STM32F401RCT6芯片,Micro USB接口供电,功能引脚全部引出,一个…

金融强化学习与finRL开发包

原创文章第110篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 01 一些感受 时代的一粒沙,落在每个人身上就是一座山。 这三年,对于这句话,相信很多人更能感同身受。 看历史风云变幻,轻轻…

力扣(LeetCode)21. 合并两个有序链表(C++)

迭代 同时遍历两个链表 , 当前结点值较小的结点插入新的链表尾部。直到有一个链表为空 , 我们将另一个非空链表插入新的链表尾部。 提示 : 使用哑结点,避免特判头结点。二路归并思想应用于链表~ class Solution { public:ListNode* mergeT…

gRPC gateway - Http Restful API gRPC 协议转换

gRPC gateway - http restful gRPC gateway 介绍 gRPC-Gateway 是protocalBufffer的编译插件,根据protobuf的服务定义自动生成反向代理服务器,并将Restful Http API 转化为 gRPC通信协议。反向代理服务器根据 google.api.http 注解生成。 gRPC底层是使用HTTP2 协…

mybatis # $

总结: # 你传入的变量类型会被保留 $ 本质就是拼接 不会考虑拼串的 $ 情况下 参数是整数 跟参数是字符串 字符串情况: 缺少’’ 相当于字符串拼接 ”select * from t_user where username “ “张三” ”select * from t_user where username 张三&…

java 容器

java 容器 数组 数组的扩容问题 ArrayList 的默认初始化容量为0,首次添加元素时,创建容量为(10 || 添加集合大小) ,以后每次扩容的话,为当前容量的1.5倍 public ArrayList() {/*初始化容量大小为0private static final Object…

CEAC之《计算机应用助理工程师》2

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1组合框的常用属性有 ____________ 。 A、Index B、Text C、Caption D、ListCountA,B,D2在…

ES6 入门教程 16 Reflect 16.2 静态方法 16.3 实例:使用 Proxy 实现观察者模式

ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录ES6 入门教程16 Reflect16.2 静态方法16.2.1 Reflect.get(target, name, receiver)16.2.2 Reflect.set(target, name, value, receiver)1…

数据结构之:数组

数组初体验之数组中重复的数字 数组 : 有限个 相同类型的变量 组成的有序集合 int[] arr; int arr[]; // 静态初始化 String[] strArr {"和平精英","王者荣耀","开心消消乐","欢乐斗地主"}; // 动态初始化 String[] strAr…

自学 TypeScript 第三天 使用webpack打包 TS 代码

安装: 首先第一步,我们要初始化我们项目,在目录下输入 npm init 接下来,我们的安装几个工具 npm i -D webpack webpack-cli typescript ts-loader -D 意思是 开发依赖,也就是我们现在所安装的依赖都是开发依赖&am…

知乎 日报

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言评论界面首页cell的小标题的文字显示下拉刷新前言 这周完成了评论内容,改了一些小bug。收藏界面正在加油,FMDB库目前不是很理解 评论界面…

【C++初阶】三、类和对象(中)

在上一篇类和对象中,我们初步了解了类和对象的基本概念,知道了什么是类,接下来一起看看类和对象的具体细节和实现吧。(以日期类举例) 文章目录类和对象【中】1.类的6个默认成员函数2. 构造函数2.1 构造函数定义2.2 构造…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.16 SpringBoot 整合 ES 客户端操作

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.16 SpringBoot 整合 ES 客户端操作4.16.1 环境准备…

[附源码]java毕业设计停车场收费管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…