python信用卡违约预测分析_Python作业集:信用卡还款违约预测
Part 1 数据集和数据字典
数据集包含某银行信用卡部门4月至6月违约信息,人口信息,信用额度,还款状况,还款金额,历史账单,任务是用模型预测用户的违约情况。(https://www.kaggle.com/uciml/default-of-credit-card-clients-dataset)
ID: 客户ID
LIMIT_BAL: 额度
SEX: 性别(1=male, 2=female)
EDUCATION: (1=graduate school, 2=university, 3=high school, 4=others, 5=unknown, 6=unknown)
MARRIAGE: 婚姻状况 (1=married, 2=single, 3=others)
AGE: 年龄
PAY_0: 还款状态 - 9月份(-1=pay duly按时, 1=逾期1个月, 2=逾期2个月, … 8=逾期8个月, 9=逾期9个月以上)
...
BILL_AMT1: 账单金额 - 9 月份
...
PAY_AMT1: 还款金额 - 9月份
...
default.payment.next.month: 下月是否违约 (1=yes, 0=no)
使用分类模型预测下月是否违约
哪个特征对于分类器的影响因素更大
Part 2 数据获取
查看数据集
这次的数据集共有30000行客户的还款记录
特征值有25列,包含有关于客户的基本信息,每月的还款记录,以及需要我们预测的目标-是否违约
# read the data
df = pd.read_csv('UCL_Credit_Card.csv')
# glimpse at the data
df.head()
df.info()
data.info() output
Part 3 数据清洗
检查数据(缺失,异常)
缺失值处理 暂时无缺失值
编码异常 由原题意中判断个别有编码异常:
- EDUCATION 教育背景一栏代表的信息中4为'others',5和6却为'unknown'. 将他们统一归为4 'others'
- MARRIAGE 婚姻状况一栏中也一样出现了0为'unknown',3为'others'。统一归为3 'others'
命名不规范 对列名重新命名,[default.payment.next.month] >>> [def_pay], [pay_0] >>>[pay_1]
# relabel EDUCATION information
fil = (data.EDUCATION == 5) | (data.EDUCATION == 6) | (data.EDUCATION == 0)
data.loc[fil, 'EDUCATION'] = 4
# relabel MARRIAGE information
data.loc[data.MARRIAGE == 0, 'MARRIAGE'] = 3
# rename column
data = data.rename(columns={'default.payment.next.month':'def_pay','pay_0':'pay1'})
Part 4 数据探索
查看类别型变量的分布
数据集中包含的女性客户(2)比男性客户(1)多
客户受教育程度较高,多为研究院(1)和大学学历(2)
违约数据存在不平衡,与现实状况相仿,存在违约行为的客户少于按时还款人数
catogorical feature distribution
查看连续型变量分布
绝大多数的授信额度都在100000以内,其中授信额度为50000的人数最多
如果以违约划分的话,授信额度高的客户违约也相对较多,主要的违约还是集中在50000的额度周围
discrete feature distribution
用户特征
教育程度较高的客户年龄更低,研究院、大学背景的用户平均年龄在35岁左右
已婚客户的年龄大于单身客户,平均年龄在40岁左右
用户特征
授信额度和用户特征
对于年轻客户群体的授信额度低于总体水平,可能是考虑到收入相对也要低于中年客户
受教育程度越高的客户额度授信也会更高
已婚客户的额度授信更高
授信对比 (年龄、教育、婚姻).jpg
Part 5 训练模型
这部分主要通过代码块来展示训练的过程,大致步骤包含:
导包,设置参数
设定目标值和特征值
拆分数据,训练集和验证集
将训练数据导入模型
用模型计算预测值
# ***********************load packages***********************
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
# ***********************set parameters***************************
RFC_METRIC = 'gini' #metric used for RandomForrestClassifier
NUM_ESTIMATORS = 100 #number of estimators used for RandomForrestClassifier
NO_JOBS = 4 #number of parallel jobs used for RandomForrestClassifier
RANDOM_STATE = 2018
VALID_SIZE = 0.20 # simple validation using train_test_split
# *********************define target and predictors*********************
target = 'def_pay'
predictors = [ 'LIMIT_BAL', 'SEX', 'EDUCATION', 'MARRIAGE', 'AGE',
'PAY_1', 'PAY_2', 'PAY_3', 'PAY_4', 'PAY_5', 'PAY_6',
'BILL_AMT1','BILL_AMT2', 'BILL_AMT3', 'BILL_AMT4', 'BILL_AMT5', 'BILL_AMT6',
'PAY_AMT1', 'PAY_AMT2', 'PAY_AMT3', 'PAY_AMT4', 'PAY_AMT5', 'PAY_AMT6']
# ***********************train test split***********************
train_df, val_df = train_test_split(data, test_size=VALID_SIZE, random_state=RANDOM_STATE, shuffle=True )
# ***********************calling the model with pre-fix parameter***********************
clf = RandomForestClassifier(n_jobs=NO_JOBS,
random_state=RANDOM_STATE,
criterion=RFC_METRIC,
n_estimators=NUM_ESTIMATORS,
verbose=False)
# ****************fitting the model***********************
clf.fit(train_df[predictors], train_df[target].values)
# ***********************predict the value in test set******************
preds = clf.predict(val_df[predictors])
Part 6 模型评估
# ****************display ROC-AUC score**************
roc_auc_score(val_df[target].values, preds) # 0.661340
# ****************plot the features importance**************
tmp = pd.DataFrame({'Feature': predictors, 'Feature importance': clf.feature_importances_})
tmp = tmp.sort_values(by='Feature importance',ascending=False)
plt.figure(figsize = (7,4))
plt.title('Features importance',fontsize=14)
s = sns.barplot(x='Feature',y='Feature importance',data=tmp)
s.set_xticklabels(s.get_xticklabels(),rotation=90)
plt.show()
features importance
在随机森林模型中, 对于模型分类影响最大的前几个因素依次为:
最近一次的还款情况 (PAY_1)
年龄 (AGE)
最近一次的账单 (BILL_AMT1)
授信额度 (LIMIT_BAL)
试用XGBoost重复模型训练
import xgboost as xgb
MAX_ROUNDS = 1000 #lgb iterations
EARLY_STOP = 50 #lgb early stop
OPT_ROUNDS = 1000 #To be adjusted based on best validation rounds
VERBOSE_EVAL = 50 #Print out metric result
# Prepare the train and valid datasets
dtrain = xgb.DMatrix(train_df[predictors], train_df[target].values)
dvalid = xgb.DMatrix(val_df[predictors], val_df[target].values)
#What to monitor (in this case, **train** and **valid**)
watchlist = [(dtrain, 'train'), (dvalid, 'valid')]
# Set xgboost parameters
params = {}
params['objective'] = 'binary:logistic'
params['eta'] = 0.039
params['silent'] = True
params['max_depth'] = 2
params['subsample'] = 0.8
params['colsample_bytree'] = 0.9
params['eval_metric'] = 'auc'
params['random_state'] = RANDOM_STATE
model = xgb.train(params,
dtrain,
MAX_ROUNDS,
watchlist,
early_stopping_rounds=EARLY_STOP,
maximize=True,
verbose_eval=VERBOSE_EVAL)
The best validation score (ROC-AUC) was 0.78, for round 453.
python信用卡违约预测分析_Python作业集:信用卡还款违约预测相关推荐
- ML/DL之预测分析类:利用机器学习算法进行预测分析的简介、分析、代码实现之详细攻略
ML/DL之预测分析类:利用机器学习算法进行预测分析的简介.分析.代码实现之详细攻略 目录 机器学习算法进行预测的简介 机器学习算法进行预测的分析 机器学习算法进行预测的代码实现 机器学习算法进行预测 ...
- python自动测试优惠券过期_python逻辑回归模型-使用优惠券预测
最近疫情严重,宅在家里给自己充电,修改简历,心里还是有点担忧的,疫情肯定会对招聘产生影响,今年春招的竞争肯定要比以往几年都要大. 于是打算在我的知乎专栏里也囤点"货". #希望大家 ...
- python温度转换代码分析_Python温度转换实例分析
本文主要研究的是Python语言实现温度转换的相关实例,具体如下. 代码如下: #TempConvert.py val=input("请输入带有温度表示符号的温度值(例如:32c)" ...
- python如何做敏感度分析_Python中的模型敏感度分析(使用Salib)
敏感度分析的基础概念 文本主要参考了维基百科(对其中的关键部分进行了摘选了翻译):https://en.wikipedia.org/wiki/Sensitivity_analysisen.wikip ...
- python信用卡违约预测分析_Python数据分析及可视化实例之银行信用卡违约预测(24)...
1.项目背景: 银行体系对于信用可违约进行预测,原始数据集如下: 2.分析步骤: (1)数据清洗(Data Cleaning) (2) 探索性可视化(Exploratory Visualization ...
- python基金预测分析_Python爬虫抓取基金数据分析、预测系统设计与实现
版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156231.html 目前在开发一款基于Python的基金爬取.分析.预测系统,目前已经开 ...
- python科学坐标系绘制分析_python数据可视化案例——平行坐标系(使用pyecharts或pandas)...
平行坐标是可视化高维几何和分析多元数据的常用方法. 为了在n维空间中显示一组点,绘制由n条平行线组成的背景,通常是垂直且等距的.所述的点N 维空间被表示为折线与顶点在平行的轴线: 第i 轴上顶点的位置 ...
- python数据获取与文本分析_python文本分析之处理和理解文本
前言: 在进行自然语言的建模(NLP)时,我们通常难以处理文字类型的数据,因此在常见的机器学习项目中,数据的格式是结构化的,就算在视觉处理的时候也是一个矩阵或者高维张量的形式.那么文字类型的数据我们应 ...
- python分类变量相关性分析_Python数据科学:相关分析
目前手上有两本书,一本<利用Python进行数据分析>,一本<Python数据科学>.app 对于学习什么东西,都有它的「道」和「术」.「道」即原理,「术」即技巧.dom 经过 ...
最新文章
- python中json模块读写数据
- 《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构
- JavaEE课程目标、个人目标、互联网应用和企业级应用的区别
- E. Beautiful Subarrays(思维 01 trie 树)
- IAR astyle代码美化
- Query Designer中的特征限制(Characteristic Restrictions)、缺省值(Default Values)、自由特性(Free Characteristics)...
- 全新第二代至强,凌动 P5900……英特尔四款 5G 新利器开启 2020 开门红!
- 【MySQL】语句抓包分析工具MySQL sniffer
- 利用 /dev/zero 创建虚拟硬盘
- AD 10分钟画一块最简PCB
- mac 安装 android 系统,苹果电脑Mac系统如何安装Android模拟器?
- ORA-20001: APP-SQLAP-10000: ORA-28115: policy with check option violation occurred
- 三种常用的数字数据编码方式
- 实现将exe格式的软件重新打包为msi格式的静默安装软件,方便域控使用策略分发软件
- CSAPP buflab 实验报告
- MATLAB中表示点形状、颜色的常见符号
- alt在html不显示信息,html – Firefox不显示来自缓存的图像只有alt文本
- unicode 生僻字_生僻字打不出来怎么办?教你一招轻松应对!
- 亚马逊ec2 ng 文件服务器,在亚马逊EC2云服务器上装完后访问不了
- IDEA访问数据库时,其中一个字段数据库中有值,但是访问到的数据的时候其中一个始终是null