信用卡客户特征分析

分析思路

信用卡服务提供了一种方便的贷款方式,允许用户事先消费,之后再支付费用。对银行而言,这种服务既有较高的利润潜力,同时也伴随着用户可能不履行还款义务的风险。本⽂是基于2005年台湾信⽤卡客户数据,探究信⽤卡客户有哪些信贷特征?违约客户有哪些特征?
在这里插入图片描述

数据说明

  • BILL_AMT账单金额:表示使用信用卡的消费金额。
  • PAY_AMT支付金额:给信用卡的还款金额。
  • 如果账单金额 > 支付金额则表示该用户延迟还款了,产生了逾期。
    在这里插入图片描述

数据加载

#导入需要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#忽略警告
import warnings
warnings.filterwarnings('ignore')
#中文乱码的处理
#plt.rcParams['font.sans-serif']=['PingFang HK'] #mac系统使用
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# windows使用设置微软雅黑字体
plt.rcParams['axes.unicode_minus'] = False # 避免坐标轴不能正常的显示负号#加载数据UCI_Credit_Card.csv
data = pd.read_csv('UCI_Credit_Card.csv')
data.head()

在这里插入图片描述

data.shape

(30000, 25)

数据预处理

  • 选择子集
    • BILL_AMT1 ~ BILL_AMT6为各⽉账单⾦额(即每⽉消费记录)、PAY_AMT1 ~ PAY_AMT6为各⽉⽀付⾦额⽀付,⽀付⾦额>上个⽉消费记录,则视为该⽉及时还款,反之则视为延迟还款
    • 直接根据pay_0 ~ pay_6去计算/表示客户在4⽉-9⽉正常还款或者违约情况,所以【BILL_AMT1 ~ BILL_AMT6】和【PAY_AMT1 ~ PAY_AMT6】这些字段可视为⽆⽤信息,删除即可。
#批量生成要删除列的名字
list_pay = []
list_bill = []
for i in range(1,7):s = 'PAY_AMT'+str(i)list_pay.append(s)
for i in range(1,7):s = 'BILL_AMT'+str(i)list_bill.append(s)list_pay.extend(list_bill)data.drop(columns=['PAY_AMT1','PAY_AMT2','PAY_AMT3','PAY_AMT4','PAY_AMT5','PAY_AMT6','BILL_AMT1','BILL_AMT2','BILL_AMT3','BILL_AMT4','BILL_AMT5','BILL_AMT6'],inplace=True)#将default.payment.next.month的名字修改为is_pay
data.rename(columns={'default.payment.next.month':'is_pay'},inplace=True)
  • 查看是否存在重复的行数据
data.duplicated().sum()

0

  • 查看是否存在缺失值
data.isnull().any(axis=0)

在这里插入图片描述

  • 异常值检测
#将EDUCATION的0,4,5都替换成6,6就表示其他这种学历
data['EDUCATION'].replace(to_replace={0:6,4:6,5:6},inplace=True)
data['MARRIAGE'].replace(to_replace={0:3},inplace=True)

数据分析

总体违约情况分析
  • 求违约客户的占比
df1 = data['is_pay'].value_counts().reset_index().rename(columns={'index':'类型','is_pay':'人数'})
df1

在这里插入图片描述

df1['类型'] = df1['类型'].map({0:'未违约',1:'违约'})
df1

在这里插入图片描述

#求解整体的违约率
def func(x):return format(x/df1['人数'].sum(),'.2%')
df1['占比'] = df1['人数'].map(func)
df1

在这里插入图片描述
整体持卡用户的违约率高达22.12%

违约客户的特征分析
  • 不同贷款额度分布
x = plt.hist(data['LIMIT_BAL'],bins=60)

在这里插入图片描述

data['LIMIT_BAL'].describe([.1,.2,.3,.4,.5,.6,.7,.8,.9])

在这里插入图片描述

有70%的客户贷款额度大约在20万以内,有80%的客户贷款额度在30万以内,客户贷款额度还是以中低额度为主。

  • 不同贷款额度的违约客户分布
bal_s = pd.cut(data['LIMIT_BAL'],bins=[10000,50000,100000,200000,300000,400000,500000,600000,700000,800000,900000,1000000],right=False)
data['LIMIT_BAL_bt'] = bal_s
#不同借款区间对应的违约和未违约用户的数量
is_pay_df = pd.crosstab(data['is_pay'],data['LIMIT_BAL_bt']).T.rename(columns={0:'未违约',1:'违约'})
is_pay_df

在这里插入图片描述

#计算不同借款区间对应的违约率
def func(x):return format(x['违约'] / x.sum(),'.2%')
is_pay_df['违约率'] = is_pay_df.apply(func,axis=1)
is_pay_df

在这里插入图片描述

plt.figure(figsize=(12,6))
plt.plot(is_pay_df.index.astype('str'),is_pay_df['未违约'],label='未违约')
plt.plot(is_pay_df.index.astype('str'),is_pay_df['违约'],label='违约')
plt.xlabel('借款区间')
plt.ylabel('人数')
plt.legend()
x = plt.xticks(rotation=30)

在这里插入图片描述

可以看出,贷款额度越⾼,违约率逐渐降低,违约率较⾼的贷款额度主要集中在20万以内,所以对低于20万的贷款,⼀定要加强审核度,防⽌违约。

  • 不同性别的违约情况
is_pay_sex = pd.crosstab(data['SEX'],data['is_pay']).rename(columns={0:'未违约',1:'违约'},index={1:'男',2:'女'})
is_pay_sex['总计'] = is_pay_sex['未违约'] + is_pay_sex['违约']
def func(x):return format(x['违约']/x['总计'],'.2%')
is_pay_sex['违约率'] = is_pay_sex.apply(func,axis=1)
is_pay_sex

在这里插入图片描述

⼥性贷款的⼈数会远⾼于男性,但男性的违约率更⾼

  • 不同受教育程度的违约情况
is_pay_edu = pd.crosstab(data['EDUCATION'],data['is_pay']).rename(columns={0:'未违约',1:'违约'},index={1:'硕士',2:'大学',3:'高中',6:'其他'})
is_pay_edu['总计'] = is_pay_edu['未违约'] + is_pay_edu['违约']
def func(x):return format(x['违约']/x['总计'],'.2%')
is_pay_edu['违约率'] = is_pay_edu.apply(func,axis=1)
is_pay_edu

在这里插入图片描述

  • 不同婚姻状况的违约率
is_pay_mar = pd.crosstab(data['MARRIAGE'],data['is_pay']).rename(columns={0:'未违约',1:'违约'},index={1:'已婚',2:'单身',3:'其他'})
is_pay_mar['总计'] = is_pay_mar['未违约'] + is_pay_mar['违约']
def func(x):return format(x['违约']/x['总计'],'.2%')
is_pay_mar['违约率'] = is_pay_mar.apply(func,axis=1)
is_pay_mar

在这里插入图片描述

已婚的违约率略⾼于未婚的违约率,但是差异性并不是很⼤,相对来说都偏⾼

  • 不同年龄段的违约率
age_s = pd.cut(data['AGE'],bins=[21,30,40,50,60,70,80],right=False)
age_s

在这里插入图片描述

is_pay_age = pd.crosstab(age_s,data['is_pay']).rename(columns={0:'未违约',1:'违约'})
is_pay_age

is_pay_age[‘总计’] = is_pay_age[‘未违约’] + is_pay_age[‘违约’]
def func(x):
return format(x[‘违约’]/x[‘总计’],‘.2%’)
is_pay_age[‘违约率’] = is_pay_age.apply(func,axis=1)
is_pay_age
在这里插入图片描述

各个年龄段的违约率随着年龄的增⻓,有上升趋势,60岁以上的违约率最⾼;21-30和30-40的贷款⼈数
最多,说明贷款⼈员偏年轻。

  • 各⽉还款情况的违约客户分析
pay_df = data[['PAY_0','PAY_2','PAY_3','PAY_4','PAY_5','PAY_6']]
pay_df

在这里插入图片描述

#计算不同月份逾期还款的用户数
def func(x):return (x > 0).sum()
month_df = pay_df.apply(func,axis=0).rename(index={'PAY_0':'九月','PAY_2':'八月','PAY_3':'七月','PAY_4':'六月','PAY_5':'五月','PAY_6':'四月'}).reset_index().rename(columns={'index':'月份',0:'逾期用户数'})
month_df

#计算每个月的逾期率:逾期用户数 / 总用户数
def func(x):
return format(x,‘.2%’)
month_df[‘逾期率’] = (month_df[‘逾期用户数’]/data[‘ID’].count()).map(func)
month_df
在这里插入图片描述

从数据来看,逾期还款的⽤户数从4⽉到9⽉,呈现递增的趋势,说明当时的违约情况越演愈烈。

如何避免客户违约

#相关性分析:探究两组数据之间是否存在相关关系
#相关关系: 正相关 负相关
#如何表示相关性:相关系数(皮尔森系数)

df = data[['SEX','EDUCATION','MARRIAGE','AGE','is_pay']]
df

在这里插入图片描述

df.corr().abs()['is_pay'][:-1].sort_values(ascending=False)

在这里插入图片描述

分析结论

  • 1.总体违约率⾼达22.12%,当时违约情况⾮常严重,05年4⽉-9⽉还款逾期率逐渐上升,违约情况愈演愈烈。
  • 2.贷款额度越⾼,违约率越低,违约率较⾼的贷款额度主要集中在20万以内,所以对于低于20万的贷款,⼀定要加强审核度,降低违约⻛险。
  • 3.教育⽔平在⾼中的违约率较⾼,随着教育⽔平的提⾼,违约率呈下降趋势,⼀定程度说明教育⽔平越⾼,违约率越低,建议教育⽔平可作为信⽤卡审核的标准之⼀。
  • 4.各个年龄段的违约率随着年龄的增⻓,有上升趋势,60岁以上的违约率最⾼;建议对于年龄⾼于60岁以上的⼈员办理信⽤卡增加审核强度,降低申请贷款额度。
  • 5.⼥性贷款的⼈数会远⾼于男性,但男性的违约率更⾼。
  • 6.已婚的违约率略⾼于未婚的违约率,但是差异性并不是很⼤,相对来说都偏⾼。

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

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

相关文章

内含教程丨最高可降低 16 倍成本,ComfyUI Stable Cascade 教程已上线,一键部署!

2024 年 2 月,OpenAI 又一次站在了镁光灯下,Sora 横空出世并引发热烈讨论,「文生视频」的热潮被那段 60 秒的展示视频再度推高,也使得很多人忽视了其图片生成能力。 更加值得一提的是,其实就在 Sora 发布前不久&#…

vue3 +Taro 页面实现scroll-view 分页功能

需求 现在分页列表 后端只给你一个分页的数据列表 没有总页数 没有当前的分页 页数 只有这么一个list 、、、 如何去分页 我这使用的是scroll-view 组件 滑动到底部的事件 根据你当前设定的每页的数据数量和后端返回给你的数据列表数量 当某一次分页 两个数量不相等了以后 就…

SpringBoot第一个hello world项目

文章目录 前言一、Spring Boot是什么?二、使用步骤1. 创建项目2.书写测试 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了…

javaWeb车辆管理系统设计与实现

摘 要 随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得以普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理分配使用问题。 企业车辆管理系统运用现代化的计算机管理手段,不但可以对车辆的使用进行合理的管理,…

多模态检索增强生成的简单介绍

多模态检索增强生成的简单介绍 文章目录 多模态检索增强生成的简单介绍为什么多模态很难?每种模式都有其自身的挑战您如何跨模式管理信息? 多模态检索方法将所有模态嵌入到同一向量空间中将所有模式归结为一种主要模式对于不同的方式有单独的备用 多模式…

Redis的高可用和持久化

目录 一、Redis高可用 二、Redis持久化 2.1 持久化的功能 2.2 Redis提供两种方式进行持久化 三、RDB持久化 3.1 触发条件 3.1.1 手动触发 3.1.2 自动触发 3.1.3 其他自动触发机制 四、AOF持久化 4.1 开启AOF 4.2 执行流程 4.2.1 命令追加 (append) 4.2.2 文件写入…

生产车间图纸无纸化,生产车间图纸无纸化解决方案

生产车间图纸无纸化是指通过采用数字化设备和技术,将传统的纸质图纸转化为电子文档,并在生产过程中实现图纸的电子化、网络化和自动化管理。这一转变旨在提高工作效率、降低成本、提高安全性,并推动生产车间的现代化和智能化。 实现生产车间图…

SpringBoot 定时任务实践、定时任务按指定时间执行

Q1. springboot怎样创建定时任务? 很显然,人人都知道,Scheduled(cron ".....") Q2. 如上所示创建了定时任务却未能执行是为什么? 如果你的cron确定没写错的话 cron表达式是否合法,可参考此处&#xff0c…

Android集成微信支付

官方api:Android接入指南 | 微信开放文档 打开微信开放平台登录账户后点击创建应用 根据提示填写完相应的内容提交审核通过后,需要开通支付权限。 1.接着在你的项目工程build.gradle文件中添加微信支付依赖库 ​api com.tencent.mm.opensdk:wechat-sdk…

python代码使用过程中使用快捷键注释时报错

1.代码 2.代码报错 3.代码注释后的结果 4. 原因

sql注入方式之联合注入

1.1 靶场环境 系统centos7 IP地址192.168.1.24 1.2 联合注入原理 联合查询注入是联合两个表进行注入攻击,使用关键词 union select 对两个表进行联合查询。两个表的字段要数要相同,不然会出现报错。 1.3 找注入点 找注入点,当输入id1 an…

C语言——文件管理

文件:即磁盘上的文件,使用文件可以将数据直接存放在电脑的硬盘上,做到数据持久化。 在程序设计中,按文件的功能划分,将文件分为程序文件与数据文件 程序文件 程序文件包括源文件(.c)&#xff0…

Centos7搭建 Skywalking 单机版

介绍 Skywalking是应用性能监控平台,可用于分布式系统,支持微服务、云原生、Docker、Kubernetes 等多种架构场景。 整体架构如图 Agent :在应用中,收集 Trace、Log、Metrics 等监控数据,使用 RPC、RESTful API、Kafk…

【算法详解】二分查找

1. 二分查找算法介绍 「二分查找算法(Binary Search Algorithm)」:也叫做 「折半查找算法」、「对数查找算法」。是一种在有序数组中查找某一特定元素的搜索算法。 基本算法思想:先确定待查找元素所在的区间范围,在逐步…

骨传导耳机哪个品牌质量比较好?精选六大必看的耳机选购指南

骨传导耳机,是作为近年来深受消费者喜欢的蓝牙耳机产品,目前已经成为了热度最高的骨蓝牙耳机。然而,随着骨传导耳机的热度增高,市场上开始出现一些质量参差不齐、音质不佳的劣质产品,如果使用这些劣质产品的话&#xf…

C语言从入门到实战————文件操作

目录 前言 1. 为什么使用文件? 2. 什么是文件? 2.1 程序文件 2.2 数据文件 2.3 文件名 3. ⼆进制文件和文本文件? 4. 文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开和关闭 5. 文…

基于java+springboot+vue实现的旅游管理系统(文末源码+Lw)23-234

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统旅游管理系统信息管理难度大,容错率低&#…

使用yolov8实现自动车牌识别(教程+代码)

该项目利用了一个被标记为“YOLOv8”的目标检测模型,专门针对车牌识别任务进行训练和优化。整个系统通常分为以下几个核心步骤: 数据准备: 收集包含车牌的大量图片,并精确地标记车牌的位置和文本信息。数据集可能包含各种环境下的…

短剧小程序开发:解锁碎片时间的观影新风尚

随着移动互联网的飞速发展,人们对内容的消费方式也在不断升级。短剧作为一种新型的内容形态,正逐渐受到广大用户的青睐。为了满足用户随时随地观看短剧的需求,我们推出了全新的短剧小程序开发服务,为您解锁碎片时间的观影新风尚。…

C/C++中局部变量static用法实例

1. 普通局部变量存储于进程栈空间,使用完毕会立即释放,静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0,并且静态局部变量存储于进程的全局数据区,即使函数返回&#xff0…