R语言KNN模型分类信贷用户信用等级参数调优和预测可视化

山子野
• 阅读 289

全文链接:https://tecdat.cn/?p=34941

原文出处:拓端数据部落公众号

本文主要介绍了如何帮助客户通过读取数据、查看部分数据、转换数据为因子并将数值变量归一化、进行描述性分析、建立knn模型等步骤对数据进行分析。通过分别选择不同的k值进行建模,并对比它们的准确度,找到最优的参数k。文章还介绍了如何扩大参数的范围,找到最优的k值,并绘制数据的散点图,查看每个分类的分布情况。通过图表分析,得出了模型的预测点和实际点的符合程度较好的结论。

读取数据

credit <- read.table("man.data")  

查看部分数据

R语言KNN模型分类信贷用户信用等级参数调优和预测可视化

根据对数据集的命名和查看,可以看出数据集包含了多个变量,如checkingstatus1、duration、history等,这些变量代表了不同的个人和贷款信息。数据集的前几行展示了每个变量的取值情况,以及最后一列是目标变量"Default",它表示了客户是否违约。这些信息对于理解数据集的结构和内容非常重要。在进一步的分析中,这些变量将被用于建立模型,以预测客户是否会违约。

转换数据为因子,并且将数值变量归一化

germalt <- factor(germanault)  
  
gemadit[sapply(germt, is.numeric)] <- lapply(gerdit[sapply(germanit, is.numeric)], scale)

对数据进行描述性分析

summary(gerdit.subset)

R语言KNN模型分类信贷用户信用等级参数调优和预测可视化

根据对数据进行描述性分析的结果,可以看出各个变量的分布情况。例如,duration.V1(借款周期)、amount.V1(借款金额)、installment.V1(分期付款)等变量的最小值、最大值、中位数和平均值等统计信息。通过这些统计信息,可以初步了解数据的范围和分布情况,为后续建模和分析提供基础。例如,可以看出借款周期和借款金额的方差较大,而分期付款的方差较小,这些信息对于理解数据的特点和规律具有重要意义。

knn模型

将数据分区,70%为训练集,30%为测试集,建立knn模型,然后对比模型的准确度

set.seed(111)  
test <-sample(1:nrow(germ.subset),nrow(germubset)*0.2)

然后我们分别选取,不同的k作为knn模型的参数,得到模型的结果之后,对比它们的准确度,从而选出最优的参数k。

分别对不同的参数进行建模

knn.1 <-  k train.def, k=1)  
it, train.def, k=5)  
kndef, k=20)

然后分别计算不同参数下的准确度:

##      test.def  
## knn.1  0  1  
##     0 54 11  
##     1 21 14  
  

## [1] 0.535

##      test.def  
## knn.5  0  1  
##     0 62 13  
##     1 13 12  

## [1] 0.545

##       test.def  
## knn.20  0  1  
##      0 69 13  
##      1  6 12  

## [1] 0.605

从不同的近邻数的结果来看,我们可以发现当参数为二十的时候,模型的准确率最高为0.605。

因此我们可以认为最优的knn参数是20。

扩大参数的范围,使参数从2到30变化,并分别计算不同参数下的准确度,从而找到最优的参数。

acc=numeric(0)  
for(k in 2:30){

plot(acc,type="b",col="blue")

R语言KNN模型分类信贷用户信用等级参数调优和预测可视化

#查看最优k  
which.max(acc)+1

## [1] 2

因此,最优的k为2。

绘制数据的散点图,查看每个分类的分布情况

plot(train.germancredit[,c("amount","duration")],

R语言KNN模型分类信贷用户信用等级参数调优和预测可视化

图中四种颜色的点分别表示以下四个种类的用户:

图中的圆形和三角形分别代表没有信贷的用户和有信贷的用户。实心点和空心点,分别代表着预测的数据和实际的数。从散点图的结果来看空心点和实心点的覆盖重合度较高,说明模型的预测点和实际点的符合程度较好。同时可以看到不同的客户,信用等级的分类出现了不同的分布情况。三角形代表信用较好的客户,他们的借款周期一般较短,借款金额也较少。而圆形的点代表没有信贷的用户,他们的借款周期较长,借款金额较大,存在信贷危机。


R语言KNN模型分类信贷用户信用等级参数调优和预测可视化

最受欢迎的见解

1.PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯模型和KMEANS聚类用户画像

2.R语言基于树的方法:决策树,随机森林

3.python中使用scikit-learn和pandas决策树

4.机器学习:在SAS中运行随机森林数据分析报告

5.R语言用随机森林和文本挖掘提高航空公司客户满意度

6.机器学习助推快时尚精准销售时间序列

7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

9.python中用pytorch机器学习分类预测银行客户流失

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这