机器学习每周挑战——信用卡申请用户数据分析

数据集的截图

# 字段    说明
# Ind_ID    客户ID
# Gender    性别信息
# Car_owner 是否有车
# Propert_owner 是否有房产
# Children  子女数量
# Annual_income 年收入
# Type_Income   收入类型
# Education 教育程度
# Marital_status    婚姻状况
# Housing_type  居住方式
# Birthday_count    以当前日期为0,往前倒数天数,-1代表昨天
# Employed_days 雇佣开始日期。以当前日期为0,往前倒数天数。正值意味着个人目前未就业。
# Mobile_phone  手机号码
# Work_phone    工作电话
# Phone 电话号码
# EMAIL_ID  电子邮箱
# Type_Occupation   职业
# Family_Members    家庭人数
# Label 0表示申请通过,1表示申请拒绝# 知道了数据集的情况,我们来看问题
# 问题描述
# 用户特征与信用卡申请结果之间存在哪些主要的相关性或规律?这些相关性反映出什么问题?
#
# 从申请用户的整体特征来看,银行信用卡业务可能存在哪些风险或改进空间?数据反映出的问题对银行信用卡业务有哪些启示?
#
# 根据数据集反映的客户画像和信用卡申请情况,如果你是该银行的风控或市场部门负责人,你会提出哪些战略思考或建议?
#
# 参考分析角度
# 用户画像分析
#
# 分析不同人口统计学特征(如性别、年龄、婚姻状况等)对信用卡申请的影响和规律
# 分析不同社会经济特征(如收入、职业、教育程度等)与申请结果的关系
# 特征选取和模型建立
#
# 评估不同特征对预测信用卡申请结果的重要性,进行特征筛选
# 建立信用卡申请结果预测模型,评估模型性能
# 申请结果分析
#
# 分析不同用户群的申请通过率情况,找到可能的问题原因
# 对申请被拒绝的用户进行细分,寻找拒绝的主要原因# 知道问题后,我们先进行数据预处理
print(data.info()) # 有缺失值
print(data.isnull().sum() / len(data))  # 可以看出有的列缺失值有点多

# GENDER               7   Annual_income       23   Birthday_count      22     Type_Occupation    488
# GENDER             0.004522   Annual_income      0.014858    Birthday_count     0.014212   Type_Occupation    0.315245
# Type_Occupation    0.315245 这一列缺失值数据占比有点高了,但是,这一列是职业,跟我们的业务相关性较高,我觉得应该将缺失值单独分为一个属性
# 其他的列的缺失值较少,woe们可以填充,也可以删除,我觉得对于信用卡这种模型精度要求较严的,我们就删除,填充的值不是很准确,可能对模型造成一定的影响
# 观察数据,我们可以发现,ID,电话号,邮箱这种特征对我们来说没有用 ,生日记数我也感觉没用
data['Type_Occupation'] = data['Type_Occupation'].fillna("无")
data = data.dropna()
data = data.drop(['Ind_ID','Mobile_phone','Work_Phone','Phone','EMAIL_ID','Birthday_count'],axis=1)
# 分析不同人口统计学特征(如性别、年龄、婚姻状况等)对信用卡申请的影响和规律
# 分析不同社会经济特征(如收入、职业、教育程度等)与申请结果的关系

features = ['GENDER','EDUCATION','Marital_status','Annual_income','Type_Occupation','Type_Income']for i in range(len(features)):# plt.subplot(2,3,i+1)plt.figure()if data[features[i]].dtype == float:data[features[i]] = pd.cut(data[features[i]],bins=10)features_data = data[features[i]].value_counts()plt.bar(features_data.index.astype(str),features_data.values)else:features_data = data.groupby(features[i])['label'].sum()features_data = features_data.sort_values(ascending=False)plt.bar(features_data.index,features_data.values)plt.title(features[i]+"与信用卡申请之间的关系")plt.xlabel(features[i])plt.ylabel("总数量")plt.xticks(rotation=60)plt.tight_layout()

 

 

 

 

# 这样我们可以看出各个特征列与标签列之间的关系
# 我们看一下标签列的分布情况
labels = data['label'].value_counts()
# print(labels)plt.figure()
plt.bar(labels.index,labels.values)
plt.title("信用卡申请人数比较")
plt.xticks([0,1],['未申请到信用卡','成功申请到信用卡'])

# 由图可以看出,申请到信用卡的人数比没申请到信用卡的人数少,数据存在不均衡,因此我们建立模型时,要注意处理不均横的数据
# 由于计算机只能处理数字,因此我们先将字符型数据转换为数值型,这里我们可以用标签编码或者独热编码。这里我们选择标签编码
data['Annual_income'] = pd.factorize(data['Annual_income'])[0]
data['label'] = data['label'].astype(int)for i in data.columns:if data[i].dtype == object:encode = LabelEncoder()data[i] = encode.fit_transform(data[i])X = data.drop('label',axis=1)
y = data.labelrfc = RandomForestClassifier(n_estimators=100,random_state=42)
rfc.fit(X,y)importance = rfc.feature_importances_
sort_importance = importance.argsort()
feature = X.columnsplt.figure()
plt.barh(range(len(sort_importance)),importance[sort_importance])
plt.yticks(range(len(sort_importance)), [feature[i] for i in sort_importance])
plt.title('特征重要性分析')
plt.xlabel("特征重要性")# plt.show()# 通过特征重要性分析我们可以看出离职天,年收入和职业类型与信用卡的申请有很大的关联X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)#分离少数类和多数类
X_minority = X_train[y_train == 1]
y_minority = y_train[y_train == 1]
X_majority = X_train[y_train == 0]
y_majority = y_train[y_train == 0]
X_minority_resampled = resample(X_minority, replace=True, n_samples=len(X_majority), random_state=42)
y_minority_resampled = resample(y_minority, replace=True, n_samples=len(y_majority), random_state=42)
new_X_train = pd.concat([X_majority, X_minority_resampled])
new_y_train = pd.concat([y_majority, y_minority_resampled])rfc = RandomForestClassifier(n_estimators=100,random_state=42)
rfc.fit(new_X_train,new_y_train)
rfc_y_pred = rfc.predict(X_test)class_report_rfc = classification_report(y_test,rfc_y_pred)
print(class_report_rfc)# 有了准确率,F1分数等,我们来绘制混淆矩阵
rfc_corr = confusion_matrix(y_test,rfc_y_pred)
plt.figure()
sns.heatmap(rfc_corr,annot=True,fmt='g')
plt.title('随机森林的混淆矩阵')
# plt.show()
print(rfc.predict_proba(X_test)[:1])
rfc_fpr,rfc_tpr,_ = roc_curve(y_test,rfc.predict_proba(X_test)[:,1])
rfc_roc = auc(rfc_fpr,rfc_tpr)plt.figure()
plt.plot(rfc_fpr,rfc_tpr,label='ROC(area = %0.2f)')
plt.plot([0,1],[0,1],linestyle='--')
plt.xlabel("False Rate")
plt.ylabel("True Rate")svm = SVC(kernel='rbf',probability=True,random_state=42)
svm.fit(new_X_train,new_y_train)
svm_y_pred = svm.predict(X_test)class_report_svm = classification_report(y_test,svm_y_pred)
print(class_report_svm)# 混淆矩阵
svm_corr = confusion_matrix(y_test,svm_y_pred)
plt.figure()
sns.heatmap(svm_corr,annot=True,fmt='g')
plt.title('支持向量机(SVM)的混淆矩阵')svm_fpr,svm_tpr,_ = roc_curve(y_test,svm.predict_proba(X_test)[:,1])
svm_roc = auc(svm_fpr,svm_tpr)plt.figure()
plt.plot(svm_fpr,svm_tpr,label='ROC(area = %0.2f)')
plt.plot([0,1],[0,1],linestyle='--')
plt.xlabel("False Rate")
plt.ylabel("True Rate")Xgb = xgb.XGBClassifier(random_state=42,use_label_encoder=False)
Xgb.fit(new_X_train,new_y_train)
Xgb_y_pred = Xgb.predict(X_test)class_report_Xgb = classification_report(y_test,Xgb_y_pred)
print(class_report_Xgb)# 混淆矩阵
Xgb_corr = confusion_matrix(y_test,Xgb_y_pred)
plt.figure()
sns.heatmap(Xgb_corr,annot=True,fmt='g')
plt.title('XGboost的混淆矩阵')Xgb_fpr,Xgb_tpr,_ = roc_curve(y_test,Xgb.predict_proba(X_test)[:,1])
Xgb_roc = auc(Xgb_fpr,Xgb_tpr)plt.figure()
plt.plot(Xgb_fpr,Xgb_tpr,label='ROC(area = %0.2f)')
plt.plot([0,1],[0,1],linestyle='--')
plt.xlabel("False Rate")
plt.ylabel("True Rate")plt.show()

 

 

 

 

 

 

              precision    recall  f1-score   support       (随机森林)

           0       0.94      0.92      0.93       410             (0和1代表着标签列的0和1)
           1       0.33      0.41      0.37        39

    accuracy                           0.88       449
   macro avg       0.64      0.67      0.65       449
weighted avg       0.89      0.88      0.88       449


              precision    recall  f1-score   support      (SVM)

           0       0.95      0.05      0.10       410
           1       0.09      0.97      0.16        39

    accuracy                           0.13       449
   macro avg       0.52      0.51      0.13       449
weighted avg       0.88      0.13      0.10       449

              precision    recall  f1-score   support        (XGboost)

           0       0.94      0.92      0.93       410
           1       0.34      0.41      0.37        39

    accuracy                           0.88       449
   macro avg       0.64      0.67      0.65       449
weighted avg       0.89      0.88      0.88       449
 

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

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

相关文章

使用GPT需要注意的事项

GPT出来之后,基本就告别浏览器搜索问题答案了。将问题原封不动的copy给GPT基本可以得到解答。 但是这个也有弊端,那就是太依赖GPT了。 1,使用GPT需要更强的专业知识:除了能问对问题,还要具备识别GPT&q…

拦截器抛出异常无法被全局异常处理器捕获问题

文章目录 基本说明问题描述问题原因解决方法前端执行的所有请求都通过Controller,而不是直接访问html定义一个/error路径的方法 总结 基本说明 我的前后端项目是放在一起的,前后端都是由springMVC进行控制,但是现在我在拦截器的preHandle方法…

蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

关于简单循环覆盖法可以看看这里我的上一个文章http://t.csdnimg.cn/k92fn\ 题目4链接:单元测试专项练习(JavaPython) - 第四题单元测试题目(Java) - 蓝桥云课 (lanqiao.cn) 目录 题目描述 源代码功能 原题: Datas.java Good…

自动驾驶_交通标志识别:各目标检测算法评测

自动驾驶|交通标志识别:各目标检测算法评测 论文题目:Evaluation of Deep Neural Networks for traffic sign detection systems 开源代码:https://github.com/aarcosg/traffic-sign-detection 附赠自动驾驶学习资料和量产经验:…

计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正

概述 在计算机视觉领域,处理文档数据时,OCR算法的性能往往会受到文档的倾斜度影响。如果文档在输入到模型之前没有经过恰当的校正,模型就无法期待模型能够提供准确的预测结果,或者模型预测的精度会降低。例如,在信息提…

助力蓝桥杯单片机省一————模块之超声波

距离蓝桥杯单片机省赛还有7天 本次介绍的模块是超声波模块,将使用定时器1和PCA进行距离的测量。如果对PCA还未了解的,可以打开官方给的芯片数据手册,自行查看。 一、超声波测量原理 二、产生8个40KHz的超声波 void Init_wave() {unsigned …

7 个 iMessage 恢复应用程序/软件可轻松恢复文本

由于误操作、iOS 升级中断、越狱失败、设备损坏等原因,您可能会丢失 iPhone/iPad 上的 iMessages。意外删除很大程度上增加了这种可能性。更糟糕的是,这种情况经常发生在 iDevice 缺乏备份的情况下。 (iPhone消息消失还占用空间?&…

实际项目中如何使用Git做分支管理

前言 Git是一种强大的分布式版本控制系统,在实际项目开发中使用Git进行分支管理是非常常见的做法,因为它可以帮助团队高效的协作和管理项目的不同版本,今天我们来讲讲在实际项目中最常用的Git分支管理策略Git Flow。 常见的Git分支管理策略…

【开源语音项目OpenVoice](一)——实操演示

目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1)git加入鼠标右键 2)git clone源码 2、VSCode出场 1)创建pyth…

第二十五周代码(蓝桥杯查缺补漏)

2024/03/31 周日 填充 题目链接 【参考代码】 想用暴力&#xff0c;没过 //枚举&#xff0c;未出结果QAQ #include <bits/stdc.h> using namespace std; string s00 "00"; string s11 "11"; int ans 0; //m个问号&#xff0c;子串有2^m…

1-32 异常

一 什么是异常? 1.含义:异与正常状态的显示,控制台显示的结果和预期的结果不一致 2.例如: int[] nums new int[2]; System.out.println(nums[2]); --抛出异常 二 异常分类 1.检测性异常:又称 非运行时异常,一般编写代码过程中编辑器直接报错 2.非检测性异常(常用):又称为…

牛客 2024春招冲刺题单 ONT98 牛牛猜节点【中等 斐波那契数列 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a3dfb5be4544381908529dc678ca6dd 思路 斐波那契数列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

让chatGPT控制物理设备

作为自动控制行业的工程师&#xff0c;我们也许最关心的是如何使chatGPT 控制物理设备。我发现许多人仍然停留在传统程序设计的思维阶段&#xff0c;比如让大模型编写一段PLC 代码&#xff0c;或者是生成一些信息模型。 其实大模型具备判断与思考的能力&#xff0c;AI …

ARM v8 Cortex R52内核 02 程序模型 Programmers Model

ARM v8 Cortex R52内核 02 程序模型 Programmers Model 2.1 关于程序模型 Cortex-R52处理器实现了Armv8-R架构。这包括&#xff1a; 所有的异常级别&#xff0c;EL0-EL2。 每个异常级别下的AArch32执行状态。 T32和A32指令集&#xff0c;其中包括&#xff1a; 浮点运算。 …

Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)

正则表达式实战-腾讯新闻 需求&#xff1a; 使用正则获取腾讯新闻标题内容 网站&#xff1a;https://sports.qq.com/ 代码&#xff1a; import reimport requests from fake_useragent import UserAgenturl https://sports.qq.com/ # 构建请求头信息 headers {User-Agent:…

【Frida】【Android】 工具篇:ProxyPin抓包详解

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

SSL VPN

1、SSL (Secure Sockets Layer)一种加密的通讯协定,用在使用者与网服器之间 【1】安全套接层 位于传输层和应用层之间,保护应用层的数据(HTTPS(443)=HTTP+TLS) 【2】版本 SSLv2 SSLv3 修改→TLS (Transport Layer Security)安全传输层协议,) 【3】模式 采用…

Linux文件种类、扩展名与目录配置详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 二、Linux文件种类 1、纯…

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据)

高精度端到端在线校准环视相机和LIDAR&#xff08;精度0.2度内&#xff01;无需训练数据&#xff09; 附赠自动驾驶学习资料和量产经验&#xff1a;链接 写在前面 在自动驾驶车辆的使用寿命内&#xff0c;传感器外参校准会因振动、温度和碰撞等环境因素而发生变化。即使是看似…

分布式锁实战

4、分布式锁 4.1 、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#x…