中国统计网|Python实战:信用评分模型开发「Part 1」( 二 )


  • NumberOfDependents有3924个缺失值
  • 1.缺失值处理
    这种情况在现实问题中非常普遍 , 这会导致一些不能处理缺失值的分析方法无法应用 , 因此 , 在信用风险评级模型开发的第一步我们就要进行缺失值处理 。
    缺失值处理的方法 , 包括如下几种:
    • 直接删除含有缺失值的样本
    • 根据样本之间的相似性填补缺失值
    • 根据变量之间的相关关系填补缺失值
    变量MonthlyIncome缺失率比较大 , 所以我们根据变量之间的相关关系填补缺失值 , 我们采用随机森林法:
    NumberOfDependents变量缺失值比较少 , 直接删除 , 对总体模型不会造成太大影响 。 对缺失值处理完之后 , 删除重复项 。
    2.异常值处理
    缺失值处理完毕后 , 我们还需要进行异常值处理 。 异常值是指明显偏离大多数抽样数据的数值 。
    比如个人客户的年龄为0时 , 通常认为该值为异常值 。 找出样本总体中的异常值 , 通常采用离群值检测的方法 。
    首先 , 我们发现变量age中存在0 , 显然是异常值 , 直接剔除:
    对于以下三个变量:
    NumberOfTime30-59DaysPastDueNotWorse
    NumberOfTimes90DaysLate
    NumberOfTime60-89DaysPastDueNotWorse
    这三个变量 , 由下面的箱线图可以看出 , 均存在异常值 , 且由unique函数可以得知均存在96、98两个异常值 , 因此予以剔除 。 同时会发现剔除其中一个变量的96、98值 , 其他变量的96、98两个值也会相应被剔除 。
    中国统计网|Python实战:信用评分模型开发「Part 1」
    本文插图
    箱形图
    剔除变量这三个变量的异常值:
    NumberOfTime30-59DaysPastDueNotWorse ,
    NumberOfTimes90DaysLate ,
    NumberOfTime60-89DaysPastDueNotWorse
    另外 , 数据集中好客户为0 , 违约客户为1 , 考虑到正常的理解 , 能正常履约并支付利息的客户为1 , 所以我们将其取反 。
    3.数据切分
    为了验证模型的拟合效果 , 我们需要对数据集进行切分 , 分成训练集和测试集 。
    4
    探索性分析
    在建立模型之前 , 我们一般会对现有的数据进行探索性数据分析(Exploratory Data Analysis) 。
    EDA是指对已有的数据(特别是调查或观察得来的原始数据)在尽量少的先验假定下进行探索 。 常用的探索性数据分析方法有:直方图、散点图和箱线图等 。
    中国统计网|Python实战:信用评分模型开发「Part 1」
    本文插图
    客户年龄分布如上图所示 , 可以看到年龄变量大致呈正态分布 , 符合统计分析的假设 。
    中国统计网|Python实战:信用评分模型开发「Part 1」
    本文插图
    客户年收入分布如上图所示 , 月收入也大致呈正态分布 , 符合统计分析的需要 。
    5
    【中国统计网|Python实战:信用评分模型开发「Part 1」】 变量选择
    特征变量选择(排序)对于数据分析、机器学习从业者来说非常重要 。 好的特征选择能够提升模型的性能 , 更能帮助我们理解数据的特点、底层结构 , 这对进一步改善模型、算法都有着重要作用 。 在本文中 , 我们采用信用评分模型的变量选择方法 , 通过WOE分析方法 , 即是通过比较指标分箱和对应分箱的违约概率来确定指标是否符合经济意义 。 首先我们对变量进行离散化(分箱)处理 。
    1.分箱处理
    变量分箱(binning)是对连续变量离散化(discretization)的一种称呼 。
    信用评分卡开发中一般有常用的等距分段、等深分段、最优分段 。