评分卡系列(二):特征工程

文章很长,理论和实现都讲的很细,大家可以先收藏,有时间再看。

在上一篇文章中,我们对LendingClub的数据有了一个大致的了解,这次我将带大家把10万多条、145个字段的原始数据一步一步处理成建模所需输入的数据。

我们先按照上次一样导入数据,这里我将逾期15天以上的都当作正类

1、评分卡简介

在进行下一步操作之前,我们先来解构一下评分卡。

贷款机构(含银行、信用卡、互联网金融等)的主要目标之一是让贷款产生更多的利润,由于违约的存在,这里就需要在市场份额和利润之间做一个平衡。评分卡本质是在量化借款人的违约可能性,通过评分卡,我们能更好的把控这个平衡。

一般我们把逾期 n 天以上的称为坏人,反之是好人。贷款机构在全面掌握信息后,对借款人按时和按约定还款的可能性作出有洞见的预测。我们希望这些预测有更多区分度,而不是好人可能性高或低这么简单(每个机构的策略都不同,或保守或偏激,所以需要预测结果有足够区分度)。

令 X 是所有的特征数据(先验知识),G 是好人,B是坏人。给定相应数据 x ,有条件概率 p(Gx) 和 p(Bx)表示给定特征数据下好人和坏人的概率。

有时候我们更多的考虑事件的发生比率 :

由 Bayes 定理,我们可以得到:

其中f(x)表示申请者具有属性向量 x 的概率,p_G 和 p_B 表示先验知识中好人和坏人的概率, f(xG) 和 f(xB) 被称为似然函数,描述属性向量有多大可能性落在好和坏的群体中。把上述公式代入发生比率,还可得:

其中 o_=p_G/p_B 称为总体发生比率(population odds),I(x)称为信息比率,当其大于1时,表明属性x的借款人更可能是好人。

上述表达式其实就是Bayes 评分卡构建的所有理论了,其假设条件弱,应用范围广,但准确率不高。接下来我们会介绍逻辑回归等方法,这些方法只支持数值变量,不支持因子变量等,于是在建模之前,除了特征筛选外,我们还需要对数据进行编码。

2、特征工程

我把整个特征工程分为四个步骤

数据清洗(预处理)

特征衍生

特征编码

特征筛选

2.1 数据清洗

因为业务关系,我这里的预处理操作主要来源于知乎专栏 《风险狗的数据分析之路》。主要的预处理如下:

1、贷后的相关变量除了target变量,其余直接剔除,因为贷后表现在客户申请时是没有的,如果进入模型实际上就成了未来变量;2、缺失率太高的变量直接剔除,本文是按65%的阈值来剔除的;3、数值变量中所有值方差太小接近常量的变量剔除,因为不能提供更多信息;4、按业务逻辑完全不可解释的变量直接剔除,5、分类变量中unique值大于20的直接剔除。

先剔除与建模无关的变量(待最后一步来操作)

剔除缺失率过高的变量

剔除unique值过少或过多的变量

缺失值处理

涉及到实现上的一些处理,我们放在第三步中处理

无量纲化

标准化:

极差化

2.2 特征衍生

2.3 特征编码的理论介绍

我把特征的类型分为五种:

自己写了一个函数 ,放在工具箱 reportgen 中用来识别变量的类型

输出如下:

特征编码的对象包含因子变量和连续变量,对于连续变量,主要有如下几种方式

2.3.1 标准化

就是上文讲的无量纲化

2.3.2 二值化

首先设定一个阈值,大于阈值的设为1,否则设为0

2.3.3 特征分箱

特征分箱包含将连续变量离散化和将多状态的离散变量合并成少状态。

这里我们只介绍卡方分箱(ChiMerge)

自底向上的(即基于合并的)数据离散化方法。它依赖于卡方检验:具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。

基本思想:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。

详细的分箱算法如下:

它们的Python实现方法如下:

对于因子变量,主要有如下几种方式

2.3.4 LabelEncoder

这个比较简单,就是直接将整数来替换类别,例如在性别中用 1 替换男,用 2 替换女

2.3.5 哑编码

哑编码是一种状态编码,属于一对多的特征映射。简单点讲,它将性别映射为两个变量:是否是男性、是否是女性。它解决了 LabelEncoder 中序的问题,比如在 LabelEncoder 中,女性用2表示,但明显不可能是2倍的男性。这里提供两种哑编码的实现方法,pandas和sklearn。它们最大的区别是,pandas默认只处理字符串类别变量,sklearn默认只处理数值型类别变量(需要先 LabelEncoder )

2.3.6 WOE编码

在第一节中我们介绍了总体发生比率信息比率

前者反映了还没有任何关于借款人的已知信息时,我们对该借款人是好人的可能性认知。后者很好的度量了借款人信息对好人可能性的贡献程度,其自然对数 ln(I(x)) 是评估向量x携带信息的一种有效途径,我们将这个数值称之为 x 提供的证据权重(weights of evidence,WOE)

如果一个特征有K个类别,且用和表示第k类中好人和坏人的数量,用和表示好人和坏人的数量,则 WOE 可以表示为:

WOE的值越大代表对应的变量对“是好人”的贡献就越大,反之,越小就代表对应的变量对“是坏人”的贡献越大。所以WOE值可以作为特征的一种编码方式。

2.4 特征编码

LendingClub 的数据类型很多,理论上讲它的特征编码有很多种组合方式,比如

因子变量哑变量,连续变量标准化

因子变量WOE编码,连续变量标准化

连续变量离散后再WOE编码,同时因子变量 WOE 编码

不过为了节省篇幅,这里我们采用最后一种方式,全部 WOE 编码。其代码如下

2.5 特征选择的理论介绍

特征选择的标准是该特征与目标的相关性,与目标相关性高的特征,应当优选择。按照选择形式可以将特征选择的方法分为三种:

过滤法,按照相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。

包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

除此之外,还有一个需要处理的是共线性问题。

2.5.1 Filter:卡方统计量

卡方检验常用于两个变量之间的显著性检验,假定fo、fe分别为观察频数和期望频数,则卡方统计量的计算公式为:

当我们计算了所有变量的卡方统计量后,可以用p值来筛选变量,也可以用衍生的V相关系数来筛选:

其中R代表列联表的行数,C代表列联表的列数。

2.5.2 Filter:信息量(Info Value, IV)

如果想考察某个特征区分好坏借款人的表现,我们可以用该特征的均值之差来表示

然而这个差并没有考虑到某些x值的信息量远高于其他的情况,于是我们可以用权重之差来判断

这被称为散度,也类似于相对熵(进行了对称处理)。将散度离散化便得到信息量(IV). 如果一个特征有K个类别,且用和表示第k类中好人和坏人的数量,用和表示好人和坏人的数量,则IV可以表示为:

一般IV值越大,该特征越要保留。

注:卡方统计量和熵的关系

注意到卡方统计量等价于:

而 fo/N 可以看成是联合分布的概率,fe/N 可以看成是乘积分布的概率,又

所有我们有

从这个角度来看,卡方距离是 p(x,y) 和 p(x)p(y) 之间信息量的某种近似。

2.5.3 Wrapper:递归特征消除法

递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。使用feature_selection库的RFE类来选择特征的代码如下:

2.5.4 Embedded: 基于分类模型的特征选择法

使用基模型,除了筛选出特征外,同时也进行了降维。这里我们用sklearn中的SelectFromModel来完成。

2.5.5 共线性问题

2.6 特征选择

由于我们上一步采用的是 WOE 编码,所以这里选用信息量 IV 作为准则。

输出结果如下:

至于共线性问题,简单点可以线看一下条件数,用于检测是否存在共线性,然后再用岭回归来确定需要剔除的变量

条件数很小,一般至少要大于100才说明存在共线性。如果不放心的话,还可以看看岭回归的岭迹:

可以看出所有的特征都很稳定,不存在波动。

3、建模

本文对模型部分不做详细介绍,都用默认参数。

输出结果如下

本系列其他文章

2、评分卡系列(二):特征工程

3、评分卡系列(三):分类学习器的评估

4、评分卡系列(四):评分模型效果的提升

本文来自企鹅号 - JSong媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MyBlog

数值分析读书笔记(1)导论

一般来说,解决实际问题的第一步是将实际问题转换为数学问题,接着建立数学模型来解决这个数学问题,而理论解或者解析解通常难以求得,于是数值计算的方法应运而生

30320
来自专栏机器之心

专栏 | 监督&强化学习模型在金融市场的应用

53640
来自专栏绿巨人专栏

强化学习读书笔记 - 10 - on-policy控制的近似方法

38650
来自专栏机器之心

入门 | 从结构到性能,一文概述XGBoost、Light GBM和CatBoost的同与不同

选自Medium 机器之心编译 参与:刘天赐、黄小天 尽管近年来神经网络复兴并大为流行,但是 boosting 算法在训练样本量有限、所需训练时间较短、缺乏调参...

52850
来自专栏YoungGy

信息论中的各种熵

本文简单介绍了信息论中的各种熵,包括自信息、熵;联合熵、条件熵、互信息;KL散度、交叉熵。并在最后用信息论中的交叉熵推导了逻辑回归,得到了和最大似然法相同的结果...

25050
来自专栏机器之心

学界 | 谷歌联合英伟达重磅论文:实现语音到文本的跨语言转录

选自arxiv 机器之心编译 参与:吴攀、李亚洲、蒋思源 机器翻译一直是人工智能研究领域的重头戏,自去年谷歌推出了神经机器翻译(GNMT)服务以来,相关技术的研...

37590
来自专栏人工智能头条

推荐收藏 | AI术语中英文对照

16710
来自专栏北京马哥教育

Python数据挖掘 | 实战案例之预测糖尿病

豌豆贴心提醒,本文阅读时间7分钟 今天给大家讲解一个实战案例:如何根据现有数据预测糖尿病。在这个案例开始之前,希望大家回忆一下大学里讲过的线性回归的知识,...

62490
来自专栏杨熹的专栏

深度学习与自然语言处理 主要概念一览CS224d-Day 1:

---- CS224d-Day 1: 要开始系统地学习 NLP 课程 cs224d,今天先来一个课程概览。 课程一共有16节,先对每一节中提到的模型,算法,工...

386110
来自专栏企鹅号快讯

掌握机器学习数学基础之线代(二)

标量、向量、矩阵和张量 矩阵向量的运算 单位矩阵和逆矩阵 行列式 方差,标准差,协方差矩阵-------(第一部分) 范数 特殊类型的矩阵和向量 特征分解以及其...

20480

扫码关注云+社区

领取腾讯云代金券