源码
https://gitee.com/pingfanrenbiji/Credit-Card-Score
在jupyter中打开该项目
导入代码库
# Numpy是以矩阵为基础的数学计算模块,纯数学 import numpy as np # pandas是提供高性能易用数据类型和分析工具的第三方库 import pandas as pd # 绘制图形 import matplotlib.pyplot as plt # seaborn是基于matplotlib开发的可视化库,比matplotlib更加容易使用,而且图例的风格更加现代化 import seaborn as sns # Matplotlib 是Python 的一个绘图库。 它包含了大量的工具,你可以使用这些工具创建各种图形,包括简单的散点图,正弦曲线,甚至是三维图形 %matplotlib inline
读取数据字典
分别解释下每个变量代表什么含义
SeriousDlqin2yrs 好坏客户 RevolvingUtilizationOfUnsecuredLines 信用卡和个人信用额度的总余额,除了房地产和没有分期付款债务,如汽车贷款除以信用额度 age 出生年龄 NumberOfTime30-59DaysPastDueNotWorse 过去两年借款35-59天逾期但是不糟糕的次数 DebtRatio 每月债务支付、赡养费、生活费用除以毛利 MonthlyIncome 月收入 NumberOfOpenCreditLinesAndLoans 开放式贷款(分期付款汽车贷款或抵押贷款)和信用额度(信用卡)的次数 NumberOfTimes90DaysLate >= 90天逾期 NumberRealEstateLoansOrLines 抵押贷款和房地产贷款包括房屋净值信贷额度 NumberOfTime60-89DaysPastDueNotWorse 过去两年借款60-89天逾期但是不糟糕的次数 NumberOfDependents 家属数量不包括自己
REAL数据类型说明
REAL 数据类型保存单精度浮点数 REAL 值需要 4 个存储字节 保存为 REAL 类型的值可精确到 7 个有效数字
读取训练数据
df = pd.read_csv("./GiveMeSomeCredit/cs-training.csv").drop("Unnamed: 0", axis=1) drop是删除函数 axis=1表示列 删除 指定列名为 "Unnamed: 0" 的列
查看前5行数据
通过 info() 可以看出一共有150000条信息,MonthyIncome 和 NumberOfDependents 存在缺失的情况,MonthyIncome 缺失29731个数据,NumberOfDependents 缺失3924个数据。
数据集计算
df.describe().T.assign(missing_rate = df.apply(lambda x : (len(x)-x.count())/float(len(x))))
使用 describe() 来看数据集中的计数、均值、最大最小值、标准差和第一、二、三个四分位值,同时增加了缺失率的计算
缺失值处理:
1、由于 MonthyIncome 缺失较多,因此不适合直接进行删除,这边根据变量之间存在的关系来填补缺失值,并采用随机森林的方法; 2、NumberOfDependents 的缺失较少,对于整体的样本影响有限,因此这边直接进行删除操作,后续也可以进行一些其他的填补操作。
随机森林函数
- 参数解释:
random_state:随机种子 n_estimators:也就是最大的弱学习器的个数。 一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。 默认是100 max_depth:决策树最大深度 n_jobs:设定工作的core数量. 等于-1的时候,表示cpu里的所有core进行工作
删除缺失值、删除重复值
df.dropna() df.drop_duplicates()
异常值处理
偏离大多数抽样数据的数值,通常指测定值中与平均值的偏差超过两倍标准差的测定值 通常采用离群值检测的方法对异常值进行检测
- 画一个分箱图
df["RevolvingUtilizationOfUnsecuredLines"].plot(kind="box", grid=True) grid=True:显示网格