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作业集:信用卡还款违约预测相关推荐

  1. ML/DL之预测分析类:利用机器学习算法进行预测分析的简介、分析、代码实现之详细攻略

    ML/DL之预测分析类:利用机器学习算法进行预测分析的简介.分析.代码实现之详细攻略 目录 机器学习算法进行预测的简介 机器学习算法进行预测的分析 机器学习算法进行预测的代码实现 机器学习算法进行预测 ...

  2. python自动测试优惠券过期_python逻辑回归模型-使用优惠券预测

    最近疫情严重,宅在家里给自己充电,修改简历,心里还是有点担忧的,疫情肯定会对招聘产生影响,今年春招的竞争肯定要比以往几年都要大. 于是打算在我的知乎专栏里也囤点"货". #希望大家 ...

  3. python温度转换代码分析_Python温度转换实例分析

    本文主要研究的是Python语言实现温度转换的相关实例,具体如下. 代码如下: #TempConvert.py val=input("请输入带有温度表示符号的温度值(例如:32c)" ...

  4. python如何做敏感度分析_Python中的模型敏感度分析(使用Salib)

    敏感度分析的基础概念 文本主要参考了维基百科(对其中的关键部分进行了摘选了翻译):https://en.wikipedia.org/wiki/Sensitivity_analysis​en.wikip ...

  5. python信用卡违约预测分析_Python数据分析及可视化实例之银行信用卡违约预测(24)...

    1.项目背景: 银行体系对于信用可违约进行预测,原始数据集如下: 2.分析步骤: (1)数据清洗(Data Cleaning) (2) 探索性可视化(Exploratory Visualization ...

  6. python基金预测分析_Python爬虫抓取基金数据分析、预测系统设计与实现

    版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156231.html 目前在开发一款基于Python的基金爬取.分析.预测系统,目前已经开 ...

  7. python科学坐标系绘制分析_python数据可视化案例——平行坐标系(使用pyecharts或pandas)...

    平行坐标是可视化高维几何和分析多元数据的常用方法. 为了在n维空间中显示一组点,绘制由n条平行线组成的背景,通常是垂直且等距的.所述的点N 维空间被表示为折线与顶点在平行的轴线: 第i 轴上顶点的位置 ...

  8. python数据获取与文本分析_python文本分析之处理和理解文本

    前言: 在进行自然语言的建模(NLP)时,我们通常难以处理文字类型的数据,因此在常见的机器学习项目中,数据的格式是结构化的,就算在视觉处理的时候也是一个矩阵或者高维张量的形式.那么文字类型的数据我们应 ...

  9. python分类变量相关性分析_Python数据科学:相关分析

    目前手上有两本书,一本<利用Python进行数据分析>,一本<Python数据科学>.app 对于学习什么东西,都有它的「道」和「术」.「道」即原理,「术」即技巧.dom 经过 ...

最新文章

  1. python中json模块读写数据
  2. 《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构
  3. JavaEE课程目标、个人目标、互联网应用和企业级应用的区别
  4. E. Beautiful Subarrays(思维 01 trie 树)
  5. IAR astyle代码美化
  6. Query Designer中的特征限制(Characteristic Restrictions)、缺省值(Default Values)、自由特性(Free Characteristics)...
  7. 全新第二代至强,凌动 P5900……英特尔四款 5G 新利器开启 2020 开门红!
  8. 【MySQL】语句抓包分析工具MySQL sniffer
  9. 利用 /dev/zero 创建虚拟硬盘
  10. AD 10分钟画一块最简PCB
  11. mac 安装 android 系统,苹果电脑Mac系统如何安装Android模拟器?
  12. ORA-20001: APP-SQLAP-10000: ORA-28115: policy with check option violation occurred
  13. 三种常用的数字数据编码方式
  14. 实现将exe格式的软件重新打包为msi格式的静默安装软件,方便域控使用策略分发软件
  15. CSAPP buflab 实验报告
  16. MATLAB中表示点形状、颜色的常见符号
  17. alt在html不显示信息,html – Firefox不显示来自缓存的图像只有alt文本
  18. unicode 生僻字_生僻字打不出来怎么办?教你一招轻松应对!
  19. 亚马逊ec2 ng 文件服务器,在亚马逊EC2云服务器上装完后访问不了
  20. IDEA访问数据库时,其中一个字段数据库中有值,但是访问到的数据的时候其中一个始终是null

热门文章

  1. 零基础编程——块语言编程游戏攻略之动画篇
  2. 西门菲莎大学计算机专业怎么样,西门菲莎大学
  3. php医疗管理系统(医院患者就诊档案管理系统)源码
  4. Facebook创始人:不穿袜子的亿万富翁
  5. stm32f4有重映射么_STM32Fxx JTAG/SWD复用功能重映射
  6. Docker层和虚悬镜像(dangling image)介绍
  7. Desktop Central 应用规范报告—如何利用BYOD(二)
  8. Hexo博客发表文章、草稿、添加分类和标签
  9. 应用 2:缓兵之计 ——延时队列
  10. delphi里面奇奇怪怪的函数真多。。