金融风控面试题目(一)

在公众号「python风控模型」里回复关键字:学习资料
QQ学习群:1026993837 领学习资料

风控面试包括业务、模型和技术
技术篇之算法包括 38 题,10000 字;第二部分技术之特征工程、模型评估与优化 23 题,8000字;第三部分业务与模型篇包括 23 题,一共 7250 字,其中四题是正阳准备的所有问题。主要来源于知乎、七月在线、牛客网等。
一、技术篇之算法
逻辑回归
决策树
集成学习(随机森林,Adaboost,GBDT,XGBOOST,LightGbm)
1.1 逻辑回归的优缺点,在金融领域相比其他算法有什么优势,局限性在哪?
1)优点:
实现简单,速度快,占用内存小,可在短时间内迭代多个版本的模型。
模型的可解释性非常好,可以直接看到各个特征对模型结果的影响,可解释性在金融领域非
常重要,所以在目前业界大部分使用的仍是逻辑回归模型。
模型客群变化的敏感度不如其他高复杂度模型,因此稳健更好,鲁棒性更强。
特征工程做得好,模型的效果不会太差,并且特征工程可以并行开发,大大加快开发的速度。
模型的结果可以很方便的转化为策略规则,且线上部署简单。
2)缺点和局限性:
容易欠拟合,相比集成模型,准确度不是很高。
对数据的要求比较高,逻辑回归对缺失值,异常值,共线性都比较敏感,且不能直接处理非
线性的特征。所以在数据清洗和特征工程上会花去很大部分的时间。
在金融领域对场景的适应能力有局限性,例如数据不平衡问题,高维特征,大量多类特征,
逻辑回归在这方面不如决策树适应能力强。
1.2 逻辑回归是线性模型吗?逻辑回归和线性回归的区别?
逻辑回归是一种广义线性模型,它引入了 Sigmod 函数,是非线性模型,但本质上还是一个
线性回归模型,因为除去 Sigmod 函数映射关系,其他的算法原理,步骤都是线性回归的。
逻辑回归和线性回归首先都是广义的线性回归,在本质上没多大区别,区别在于逻辑回归多
了个 Sigmod 函数,使样本映射到[0,1]之间的数值,从而来处理分类问题。另外逻辑回归是
假设变量服从伯努利分布,线性回归假设变量服从高斯分布。逻辑回归输出的是离散型变量,
用于分类,线性回归输出的是连续性的,用于预测。逻辑回归是用最大似然法去计算预测函
数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合。
1.3 逻辑回归做分类的样本应该满足什么分布?
应该满足伯努利分布,逻辑回归的分类标签是基于样本特征通过伯努利分布产生的,分类器
要做的就是估计这个分布。
1.4 逻辑回归解决过拟合的方法有哪些?
减少特征数量,在实际使用中会用很多方法进行特征筛选,例如基于 IV 值的大小,变量的
稳定性,变量之间的相关性等。
正则化,常用的有 L1 正则化和 L2 正则化。
4
1.5 什么是特征的离散化和特征交叉?逻辑回归为什么要对特征进行离散化?
特征离散化是将数值型特征(一般是连续型的)转变为离散特征,例如评分卡中的 woe 转
化,就是将特征进行分箱,再将每个分箱映射到 woe 值上,就转换为了离散特征。特征交
叉也叫作特征组合,是将单独的特征进行组合,使用相乘/相除/笛卡尔积等形成合成特征,
有助于表示非线性关系。比如使用 One-Hot 向量的方式进行特征交叉。这种方式一般适用于
离散的情况,我们可以把它看做基于业务理解的逻辑和操作,例如经度和纬度的交叉,年龄
和性别的交叉等。
实际工作中很少直接将连续型变量带入逻辑回归模型中,而是将特征进行离散化后再加入模
型,例如评分卡的分箱和 woe 转化。这样做的优势有以下几个:1)特征离散化之后,起到
了简化模型的作用,使模型变得更稳定,降低了模型过拟合的风险。2)离散化之后的特征
对异常数据有很强的鲁棒性,实际工作中的哪些很难解释的异常数据一般不会做删除处理,
如果特征不做离散化,这个异常数据带入模型,会给模型带来很大的干扰。3)离散特征的
增加和减少都很容易,且稀疏向量的内积乘法运算速度快,易于模型的快速迭代。4)逻辑
回归属于广义线性模型,表达能力有限,特征离散化之后,每个离散变量都有单独的权重,
相当于给模型引入了非线性,能够提高模型的表达能力。5)离散化后的特征可进行特征交
叉,进一步引入非线性,提高模型的表达能力。
1.6 在逻辑回归中,为什么要常常做特征组合(特征交叉)?
逻辑回归模型属于线性模型,线性模型不能很好处理非线性特征,特征组合可以引入非线性
特征,提升模型的表达能力。另外,基本特征可以认为是全局建模,组合特征更加精细,是
个性化建模,但对全局建模会对部分样本有偏,对每一个样本建模又会导致数据爆炸,过拟
合,所以基本特征+特征组合兼顾了全局和个性化。
1.7 做评分卡中为什么要进行 WOE 化?
更好的解释性,变量离散化之后可将每个箱体映射到 woe 值,而不是通常做 one-hot 转换。
woe 化之后可以计算每个变量的 IV 值,可用来筛选变量。
对离散型变量,woe 可以观察各个 level 间的跳转对 odds 的提升是否呈线性。
对连续型变量,woe 和 IV 值为分箱的合理性提供了一定的依据,也可分析变量在业务上的
可解释性。
用 woe 编码可以处理缺失值问题。
1.8 高度相关的特征带入逻辑回归到底有什么影响?为什么逻辑回归要将高度相关特征剔
除?
在损失函数最终收敛的情况下,就算有很多相关度很高的特征,也不会影响模型的效果。假
设一个特征将它重复 100 次,生成 100 个高度相关的特征。那么模型训练完之后,这 100
个特征和原来那一个特征扮演的效果一样,每一个特征的权重都是原来特征的 1/100,只是
可能中间很多特征的系数正负相互抵消了,比如做评分卡,如果引入了高度相关的特征,那
么最后逻辑回归的系数符号可能就会不一致。
虽然高度相关特征对模型结果没什么大的影响,但还是要剔除相关性高的特征,原因是一个
可以减少特征数量,提高模型的训练速度,减少过拟合的风险。二是去掉高相关特征可以让
模型的可解释性更好。尤其在做评分卡时,为了使最后每个特征的系数符号一致,必须做特
征相关性筛选。
5
1.9 逻辑回归的特征系数的绝对值可以认为是特征的重要性吗?
首先特征系数的绝对值越大,对分类效果的影响越显著,但不能表示系数更大的特征重要性
更高。因为改变变量的尺度就会改变系数的绝对值,而且如果特征是线性相关的,则系数可
以从一个特征转移到另一个特征,特征间相关性越高,用系数解释变量的重要性就越不可靠。
1.10 为什么做数据归一化?
数据归一到 0 和 1,这样的话梯度下降会收敛的更快,相比不归一化,不会出现扁平的情况。
数据归一化之后可以提高结果的精度,尤其在与正则化同时使用时,数据归一化可以避免由
于特征取值范围差距过大,对取值较小特征的参数影响更大的问题。
1.11 决策树模型的优缺点及适用性?
优点:
易于理解,决策树可以生成 IF..TEHN 逻辑表达的树结构,可解释性很好。
相比逻辑回归对数据的处理较简单,不太需要做例如数据离散化,归一化等操作。
决策树是目前已知的对于处理非线性交互的最好的算法。
模型的效果比较好,例如随机森林,xgboost 都是基于决策树构建的。
缺点:
很容易在训练过程中生成过于复杂的树结构,造成过拟合。
不适合处理高维数据,当属性数量过大时,部分决策树就不适用了。
泛化能力能力比较差,对于没有出现过的值几乎没有办法。
1.12 简述一下决策树的原理以及树的构建过程。
决策树时基于树的结构进行决策的,学习过程包括特征选择,决策树的生成和剪枝过程。决
策树的学习过程通常是递归地选择最优特征,并用最优特征对数据集进行分割。开始时,构
建根节点,选择最优特征,该特征有几种值就划分为多少子集,每个子集递归调用此方法,
返回结点,返回的结点就是上一层的子节点,直到所有特征都已经用完,或者数据集只有一
维特征为止。
1.13 简述一下 ID3,C4.5,CART 三类决策树的原理和异同点。
ID3 选择最佳分割点是基于信息增益的,信息增益越大,表明使用这个属性来划分所获得的
“纯度提升”越大。C4.5 对 ID3 进行了改进,因为 ID3 使用的信息增益对数据划分时,可
能出现每个结点只包含一个样本,这些子节点的纯度已经达到最大,但是,这样的决策树并
不具有泛化能力,无法对新样本进行预测。且 ID3 不能处理连续型变量和缺失值。而 C4.5
使用信息增益率来选择属性,克服了信息增益选择属性时偏向选择值多的属性的不足。且可
以处理连续型变量和缺失值。
C4.5 是基于 ID3 的改进版,只能用于分类。而 CART 树既可以做分类,也可以做回归。CART
的本质是对特征空间进行二元划分,所以 CART 生成的是一颗二叉树,且可以对类别型变
量和数值型变量进行分裂。对分类型变量进行划分时,分为等于该属性和不等于该属性,在
对连续型变量进行划分时,分为大于和小于,在做分类是使用的是 GINI 系数作为划分标准,
在做回归时使用的是均方误差。
Q:分类树和回归树的区别在哪里?
分类树以 C4.5 为例,在对一个特征进行划分时,是穷举这个特征的每一个阈值,找到使得
特征<=阈值和特征>阈值分成的两个分支的熵的最大值,按照该标准分支得到两个新的节
6
点,用同样的方法继续分支,直到得到种类唯一的叶子节点,或者达到预设的终止条件为止。
回归树的流程是类似分类树的,区别在于划分时的标准不再是最大熵,而是最小化均差,如
果节点的预测值错的越离谱,均方差越大,通过最小化均差能够找到最可靠的分支依据。
1.14 决策树对缺失值是如何处理的?
决策树处理缺失要考虑以下三个问题:
当开始选择哪个属性来划分数据集时,样本在某几个属性上有缺失怎么处理:
忽略这些缺失的样本。
填充缺失值,例如给属性 A 填充一个均值或者用其他方法将缺失值补全。
计算信息增益率时根据缺失率的大小对信息增益率进行打折,例如计算属性 A 的信息增益
率,若属性 A 的缺失率为 0.9,则将信息增益率乘以 0.9 作为最终的信息增益率。
2. 一个属性已经被选择,那么在决定分割点时,有些样本在这个属性上有缺失怎么处理?
忽略这些缺失的样本。
填充缺失值,例如填充一个均值或者用其他方法将缺失值补全。
把缺失的样本,按照无缺失的样本被划分的子集样本个数的相对比率,分配到各个子集上去,
至于那些缺失样本分到子集 1,哪些样本分配到子集 2,这个没有一定准则,可以随机而动。
把缺失的样本分配给所有的子集,也就是每个子集都有缺失的样本。
单独将缺失的样本归为一个分支。
3.决策树模型构建好后,测试集上的某些属性是缺失的,这些属性该怎么处理?
如果有单独的缺失值分支,依据此分支。
把待分类的样本的属性 A 分配一个最常出现的值,然后进行分支预测。
待分类的样本在到达属性 A 结点时就终止分类,然后根据此时 A 结点所覆盖的叶子节点类
别状况为其分配一个发生概率最高的类。
1.15 为什么决策树不需要对数据做归一化等预处理?
决策树是一种概率模型,所以不需要做归一化,因为它不关心变量的值,而是关心变量的分
布和变量之间的条件概率,所以归一化这种数值缩放,不影响分裂结点位置。
1.16 如何解决决策树的过拟合问题?
预剪枝的方法:通过提前停止树的构建而对树剪枝,是目前解决过拟合的主要方法。常用的
剪枝条件包括限制树的深度,限制叶节点最小样本数,限制叶节点的最小样本权重,限制叶
节点的信息增益值的阈值等。
后剪枝的方法:首先构造完整的决策树,允许树过度拟合数据,然后应单个结点代替子树,
节点的分类采用子树的主要分类。剪枝方法有错误率降低剪枝,悲观错误剪枝,代价复杂度
剪枝
1.17 什么是集成学习?集成学习有哪些框架?简单介绍各个框架的常用算法。
集成学习是一种优化手段和策略,通常是结合多个简单的弱分类器来集成模型组,去做更可
靠的决策。一般的弱分类器可以是决策树,SVM,kNN 等构成,其中的模型可以单独来训
练,并且这些弱分类器以某种方式结合在一起去做出一个总体预测。集成学习就是找出哪些
弱分类器可以结合在一起,以及如何结合的方法。目前集成学习主要有 bagging,boosting,
stacking 三种:
bagging:对训练集进行随机子抽样,对每个子训练集构建基模型,对所有的基模型的预测
结果进行综合产生最后的预测结果。如果是分类算法,则用多数投票法确定最终类别,如果
7
是回归算法,则将各个回归结果做算术平均作为最终的预测值。常用的 bagging 算法:随机
森林
boosting:训练过程为阶梯状,基模型按照次序进行训练(实际上可以做到并行处理),先
给定一个初始训练数据,训练出第一个基模型,根据基模型的表现对样本进行调整,在之前
基模型预测错误的样本上投入更多的关注,然后用调整后的样本训练下一个基模型,重复上
述过程N次,将N个基模型进行加权结合,输出最后的结果。常用的算法有GBDT,XGBOOST
等。
stacking:是一种组合分类器的方法,以两层为例,第一层由多个基学习器组成,其输入为
原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练(一般用 LR
进行回归组合),从而得到完整的 stacking 模型。要得到 stacking 模型,关键在于如何构造
第二层的特征,构造第二层特征的原则是尽可能的避免信息泄露,因此对原始训练集常常采
用类似于 K 折交叉验证的划分方法。各个基模型要采用相同的 Kfold,这样得到的第二层特
征的每一折(对应于之前的 K 折划分)都将不会泄露进该折数据的目标值信息 ,从而尽可
能的降低过拟合的风险。
1.18 简单描述一下模型的偏差和方差?bagging 和 boosting 主要关注哪个?
偏差描述的是预测值与真实值的差距,偏差越大,越偏离真实数据。
方差描述的是预测值的变化范围,离散程度,方差越大,数据分布越分散。
bagging 主要关注的是降低方差,boosting 主要关注降低偏差。
1.19 简述一下随机森林的原理,随机森林的构造过程。
随机森林是 bagging 算法的代表,使用了 CART 树作为弱分类器,将多个不同的决策树进行
组合,利用这种组合来降低单棵决策树的可能带来的片面性和判断不准确性。对于普通的决
策树,是在所有样本特征中找一个最优特征来做决策树的左右子树划分,而随机森林会先通
过自助采样的方法(bootstrap)得 到 N 个训练集,然后在单个训练集上会随机选择一部分特
征,来选择一个最优特征来做决策树的左右子树划分,最后得到 N 棵决策树,对于分类问
题,按多数投票的准则确定最终结果,对于回归问题,由多棵决策树的预测值的平均数作为
最终结果。随机森林的随机性体现在两方面,一个是选取样本的随机性,一个是选取特征的
随机性,这样进一步增强了模型的泛化能力。
1.20 随机森林的优缺点?
优点:
训练可以高度并行化,训练速度快,效率高。
两个随机性的引入,使得随机森林不容易过拟合,具有很好的抗噪声能力。
由于每次不再考虑全部的特征属性,二是特征的一个子集,所以相对于 bagging 计算开销更
小,效率更高。
对于数据的适应能力强,可以处理连续型和离散型的变量,数据无需规范化。
可以输出变量的重要程度,被认为是一种不错的降维方法。
缺点:
在某些噪声较大的分类问题和或回归问题上容易过拟合。
模型的可解释性比较差,无法控制模型内部的运行。
对于小数据或者低维数据,效果可能会不太好。
1.21 随机森林为什么不容易过拟合?
8
随机森林由很多棵树组合在一起,单看每一棵树可以是过拟合的,但是既然是过拟合,就会
拟合到非常小的细节,随机森林通过引入随机性,让每一棵树过拟合的细节不同,再将这些
树组合在一起,过拟合的部分就会抵消掉,不过随机森林还是可能会出现过拟合的现象,只
是出现的概率相对较低。
1.22 随机森林输出特征重要性的原理?
随机森林对于特征重要性的评估思想:判断每个特征在随机森林中的每颗树上做了多大的贡
献,然后取个平均值,最后比一比特征之间的贡献大小。其中关于贡献的计算方式可以是基
尼指数或袋外数据错误率。
基于基尼系数:如果特征 X 出现在决策树 J 中的结点 M,则计算节点 M 分枝前后的 Gini
指数变化量,假设随机森林由 N 棵树,则计算 N 次的 Gini 系数,最后将所有的 Gini 系数做
一个归一化处理就得到了该特征的重要性。
基于袋外数据错误率:袋外数据指的是每次随机抽取未被抽取达到的数据,假设袋外的样本
数为 O,将这 O 个数据作为测试集,代入已生成好的随机森林分类器,得到预测的分类结
果,其中预测错误的样本数为 X,则袋外数据误差为 X/O,这个袋外数据误差记为 errOOB1,
下一步对袋外数据的特征 A 加入噪声干扰,再次计算袋外误差 errOOB2,假设随机森林由 N
个分类器,则特征 A 的重要性为:sum(errOOB2-errOOB1)/N,其依据就是,如果一个特征很
重要,那么其变动后会非常影响测试误差,如果测试误差没有怎么改变,则说明特征 A 不
重要。
1.23 简单描述一下 Adaboost 的算法原理和流程。
Adaboost 基于分类器的错误率分配不同的权重系数,最后得到累加加权的的预测结果。
算法流程:
给数据中每一个样本一个权重,若有 N 个样本,则每个样本的权重为 1/N.
训练数据的每一个样本,得到第一个分类器。
计算该分类器的错误率,根据错误率计算给分类器分配的权重。
将第一个分类器分错的样本权重增加,分对的样本权重减少,然后再用新的样本权重训练数
据,得到新的分类器。
迭代这个训练步骤直到分类器错误为 0 或达到迭代次数。
将所有的弱分类器加权求和,得到分类结果(分类器权重),错误率低的分类器获得更高的
决定系数,从而在数据进行预测起关键作用。
1.24 Adaboost 的优点和缺点?
优点:
分类精度高,构造简单,结果可理解。
可以使用各种回归分类模型来构建弱学习器,非常灵活。
不容易过拟合。
缺点:
训练时会过于偏向分类困难的数据,导致 Adaboost 容易受噪声数据干扰。
依赖于弱分类器,训练时间可能比较长。
1.25 简单说一下 GBDT 的原理。
GBDT 是 boosting 的一种方法,主要思想是每一次建立单个分类器时,是在之前建立的模型
的损失函数的梯度下降方向。损失函数越大,说明模型越容易出错,如果我们的模型能让损
9
失函数持续的下降,则说明我们的模型在持续不断的改进,而最好的方式就是让损失函数在
其梯度的方向上下降。
GBDT 的核心在于每一棵树学的是之前所有树结论和的残差,残差就是真实值与预测值的差
值,所以为了得到残差,GBDT 中的树全部是回归树,之所以不用分类树,是因为分类的结
果相减是没有意义的。
Shrinkage(缩减)是 GBDT 的一个重要演进分支,Shrinkage 的思想在于每次走一小步来
逼近真实的结果,要比直接迈一大步的方式更好,这样做可以有效减少过拟合的风险。它认
为每棵树只学到了一小部分,累加的时候只累加这一小部分,通过多学习几棵树来弥补不足。
这累加的一小部分(步长*残差)来逐步逼近目标,所以各个树的残差是渐变的而不是陡变
的。
GBDT 可以用于回归问题(线性和非线性),也可用于分类问题。
1.26 为什么对于高维稀疏特征不太适合用 GBDT?
GBDT 在每一次分割时需要比较大量的特征,特征太多,模型训练很耗费时间。
树的分割往往只考虑了少部分特征,大部分的特征都用不到,所有的高维稀疏的特征会造成
大量的特征浪费。
1.27 GBDT 和随机森林的异同点?
相同点:
都是由多棵树构成,最终的结果也是由多棵树决定。
不同点:
随机森林可以由分类树和回归树组成,GBDT 只能由回归树组成。
随机森林的树可以并行生成,而 GBDT 只能串行生成,所以随机森林的训练速度相对较快。
随机森林关注减小模型的方差,GBDT 关注减小模型的偏差。
随机森林对异常值不敏感,GBDT 对异常值非常敏感。
随机森林最终的结果是多数投票或简单平均,而 GBDT 是加权累计起来。
1.28 GBDT 的优缺点?
优点:
GBDT 每一次的残差计算都增大了分错样本的权重,而分对的权重都趋近于 0,因此泛化性
能比较好。
可以灵活的处理各种类型的数据。
缺点:
对异常值比较敏感。
由于分类器之间存在依赖关系,所以很难进行并行计算。
1.29 简单介绍一下 XGBOOST。
XGBOOST 是一种梯度提升的算法,用来解决分类和回归问题。它的基学习器可以是 CART
树,也可以是线性分类器。当用 CART 树做基学习器时,训练的时候采用前向分布算法进
行贪婪的学习,每次迭代都学习一棵 CART 树来拟合之前 t-1 棵树的预测结果与训练样本
真实值的残差。XGBoost 对 GBDT 进行了一系列优化,比如损失函数进行了二阶泰勒展开、
目标函数加入正则项、特征粒度上支持并行计算和默认缺失值处理等,在可扩展性和训练速
度上有了巨大的提升。
10
1.30 XGBOOST 和 GBDT 的区别在哪里?
传统的 GBDT 是以 CART 树作为基分类器,xgboost 还支持线性分类器,这个时候 xgboost
相当于带 L1 和 L2 正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题),线
性分类器的速度是比较快的,这时候 xgboost 的速度优势就体现了出来。
传统的 GBDT 在优化时只使用一阶导数,而 xgboost 对损失函数做了二阶泰勒展开,同时用
到了一阶和二阶导数,并且 xgboost 支持使用自定义损失函数,只要损失函数可一阶,二阶
求导。
xgboost 在损失函数里加入了正则项,用来减小模型的方差,防止过拟合,正则项里包含了
树的叶节点的个数, 每个叶子节点上输出的 score 的 L2 模的平方和。
xgboost 里有一个参数叫学习速率(learning_rate), xgboost 在进行完一次迭代后,会将叶
子节点的权重乘上学习速率,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实
际应用中,一般把 learing_rate 设置得小一点,然后迭代次数(n_estimators)设置得大一点。
xgboost 借 鉴 了 随 机 森 林 的 原 理 , 支 持 行 抽 样 (subsample) 和 列 抽 样
(colsample_bytree,colsample_bylevel), 行抽样指的是随机森林里对数据集进行有放回抽样,
列抽样指的是对特征进行随机选择,不仅能降低过拟合,还能减少计算,这也是 xgboost 异
于传统 gbdt 的一个特性。
1.31 为什么 XGBOOST 要用泰勒展开,优势在哪里?
xgboost 使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准,使用泰勒展开取得
函数做自变量的二阶导数形式,可以在不选定损失函数具体形式的情况下,仅仅依靠输入数
据的值就可以进行叶子分裂优化计算,本质上也就把损失函数的选取和模型算法的优化分开
来了,这种去耦合增加了 xgboost 的适用性,使得它按需选取损失函数,既可以用于分类,
也可以用于回归。
1.32 XGBOOST 是如何寻找最优特征的?
xgboost 在训练过程中给出各个特征的增益评分,最大增益的特征会被选出来作为分裂依据,
从而记忆了每个特征在模型训练时的重要性,从根到叶子中间节点涉及某特征的次数作为该
特征重要性排序。
1.33 XGBOOST 是如何处理缺失值的?
xgboost 为缺失值设定了默认的分裂方向,xgboost 在树的构建过程中选择能够最小化训练误
差的方向作为默认的分裂方向,即在训练时将缺失值划入左子树计算训练误差,再划入右子
树计算训练误差,然后将缺失值划入误差小的方向。
1.34 XGBOOST 的并行化是如何实现的?
xgboost 的并行不是在 tree 粒度上的并行,xgboost 也是一次迭代完才能进行下一次迭代(第
t 次迭代的损失函数包含了第 t-1 次迭代的预测值),它的并行处理是在特征粒度上的,在
决策树的学习中首先要对特征的值进行排序,然后找出最佳的分割点,xgboost 在训练之前,
就预先对数据做了排序, 然后保存为 block 结构,后面的迭代中重复地使用这个结构,大
大减小计算量。这个 block 结构也使得并行成为了可能,在进行节点的分裂时,需要计算每
个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多
线程进行。
可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应
的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,
11
贪心算法效率就会变得很低,所以 xgboost 还提出了一种可并行的近似直方图算法,用于高
效地生成候选的分割点。
1.35 XGBOOST 采样时有放回的还是无放回的?
xgboost 属于 boosting 方法的一种,所以采样时样本是不放回的,因而每轮计算样本不重复,
另外,xgboost 支持子采样,每轮计算可以不使用全部的样本,以减少过拟合。另外一点是
xgboost 还支持列采样,每轮计算按百分比随机抽取一部分特征进行训练,既可以提高速度
又能减少过拟合。
1.36 XGBOOST 的调参步骤是怎样的?
PS:这里使用 Gridsearch cv 来穷举检索最佳的参数,如果时间允许,可以通过设置步数先
粗调,再细调。
保持 learning rate 和其他 booster 相关的参数不变,调节和 estimators 的参数。learing_rate 可
设为 0.1, max_depth 设为 4-6 之间,min_child_weight 设为 1,subsample 和 colsample_bytree
设为 0.8 ,其他的参数都设为默认值即可。
调节 max_depth 和 min_child_weight 参数,首先,我们先大范围地粗调参数,然后再小范
围地微调。
gamma 参数调优
subsample 和 colsample_bytree 调优
正则化参数调优,选择 L1 正则化或者 L2 正则化
缩小 learning rate,得到最佳的 learning rate 值
1.37 XGBOOST 特征重要性的输出原理?
xgboost 是用 get_score 方法输出特征重要性的,其中 importance_type 参数支持三种特征重要
性的计算方法:
importance_type=weight(默认值),使用特征在所有树中作为划分属性的次数。
importance_type=gain,使用特征在作为划分属性时 loss 平均的降低量。
importance_type=cover,使用特征在作为划分属性时对样本的覆盖度。
1.38 LightGBM 相比 XGBOOST 在原理和性能上的差异?
1.速度和内存上的优化:
xgboost 用的是预排序(pre-sorted)的方法, 空间消耗大。这样的算法需要保存数据的特征
值,还保存了特征排序的结果(例如排序后的索引,为了后续快速的计算分割点),这里需
要消耗训练数据两倍的内存。 其次,时间上也有较大的开销,在遍历每一个分割点的时候,
都需要进行分裂增益的计算,消耗的代价大。
LightGBM 用的是直方图(Histogram)的决策树算法,直方图算法的基本思想是先把连续的
浮点特征值离散化成 k 个整数,同时构造一个宽度为 k 的直方图。在遍历数据的时候,根据
离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统
计量,然后根据直方图的离散值,遍历寻找最优的分割点。
2.准确率上的优化:
xgboost 通过 level(depth)-wise 策略生长树, Level-wise 过一次数据可以同时分裂同一层
的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上 Level-wise
是一种低效的算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为
实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。
12
LightGBM 通过 leaf-wise(best-first)策略来生长树, Leaf-wise 则是一种更为高效的策略,
每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同
Level-wise 相比,在分裂次数相同的情况下,Leaf-wise 可以降低更多的误差,得到更好的精
度。Leaf-wise 的缺点是可能会长出比较深的决策树,产生过拟合。因此 LightGBM 在 Leaf-wise
之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。
3.对类别型特征的处理:
xgboost 不支持直接导入类别型变量,需要预先对类别型变量作亚编码等处理。如果类别型
特征较多,会导致哑变量处理后衍生后的特征过多,学习树会生长的非常不平衡,并且需要
非常深的深度才能来达到较好的准确率。
LightGBM 可以支持直接导入类别型变量(导入前需要将字符型转为整数型,并且需要声明
类别型特征的字段名),它没有对类别型特征进行独热编码,因此速度比独热编码快得多。
LightGBM 使用了一个特殊的算法来确定属性特征的分割值。基本思想是对类别按照与目标
标签的相关性进行重排序,具体一点是对于保存了类别特征的直方图根据其累计值
(sum_gradient/sum_hessian)重排序,在排序好的直方图上选取最佳切分位置。
二、技术之特征工程、模型评估与优化
2.1 什么是特征工程?为什么特征工程对机器学习很重要?
特征工程指的是使用专业知识和技巧来处理数据,使得特征在机器学习算法上发挥更好的作
用的过程。这个过程包含了数据预处理,特征构建,特征筛选等。特征工程的目的就是筛选
出好的特征,得到更好的训练数据,使模型达到更好的效果。
从数据中提取出来的特征好坏会直接影响到模型的效果,有的时候,如果特征工程做得好,
仅使用一些简单的机器学习算法,也能达到很好的效果。由此可见特征工程在实际的机器学
习中的重要性。
2.2 特征工程的一般步骤是什么?什么是特征工程的迭代?
特征工程常规步骤:
数据获取,数据的可用性评估(覆盖率,准确率,获取难度)
探索性数据分析,对数据和特征有一个大致的了解,同时进行数据的质量检验,包括缺失值,
异常值,重复值,一致性,正确性等。
特征处理,包括数据预处理和特征转换两部分,数据预处理主要做清洗工作(缺失值,异常
值,错误值,数据格式),特征转换即对连续特征,离散特征,时间序列特征进行转换,便
于入模。
特征构建,特征构建的目的是找寻与目标变量相关且区分度较好的特征。常用的方法有特征
交叉,四则运算,基于业务理解进行头脑风暴构建特征等。
特征筛选,大量的特征中选择少量的有用特征,也叫作特征降维,常用的方法有过滤法,包
装法,嵌入法。
特征工程的迭代:
选择特征:具体问题具体分析,通过查看大量的数据和基于对业务的理解,从数据中查找可
以提出出数据的关键。
设计特征:可以自动进行特征提取工作,也可以手工进行特征的构建。
选择特征:使用不同的特征构造方法,从多个角度来评判这个特征是否适合放入模型中。
计算模型:计算模型在该特征上所提升的准确率。
上线测试:通过在线测试的效果来评估特征是否有效。
13
2.3 常用的特征工程方法有哪些?
特征处理:数据的预处理包括异常值和缺失值,要根据实际的情况来处理。
特征转换主要有标准化,归一化,区间缩放,二值化等,根据特征类型的不同选择合适的转
换方法。
特征构建:特征之间的四则运算(有业务含义),基于业务理解构造特征,分解类别特征,
特征交叉组合等。
特征筛选:过滤法,封装法,嵌入法。
2.4 在实际的风控建模中怎么做好特征工程?
本人工作中的一些经验总结:
因为做风控模型大部分的数据源来自第三方,所以第三方数据的可用性评估非常重要,一方
面需要了解这些特征底层的衍生逻辑,判断是否与目标变量相关。另一方面考察数据的覆盖
率和真实性,覆盖率较低和真实性存疑的特征都不能使用在模型中。
基于金融的数据特点,在特征筛选这个步骤上考量的因素主要有:一个是时间序列上的稳定
性,衡量的指标可以是 PSI,方差或者 IV。一个是特征在样本上覆盖率,也就是特征的缺失
率不能太高。另外就是特征的可解释性,特征与目标变量的关系要在业务上要解释的通。
如果第三方返回有用户的原始底层数据,例如社保的缴纳记录,运营商的通话/短信记录,
则需要在特征衍生上多下功夫,基于自身对数据的敏感性和业务的理解,构建具有金融,风
险属性的特征,也可以与业务部门进行沟通找寻与业务相关的特征。
2.5 实际项目中原始数据通常有哪些问题?你是如何解决的?
一些特征的底层逻辑不清晰,字面上的意思可能与实际的衍生逻辑相悖,这个需要与第三方
数据供应商进行沟通,了解清楚特征的衍生逻辑。
数据的真实性可能存在问题。比如一个特征是历史总计,但第三方只是爬取了用户近 2 年的
数据,这样的特征就不符合用户的真实情况。所以对数据的真实性校验显得非常重要。
有缺失的特征占的比例较高。在进行缺失值处理前先分析缺失的原因,而不是盲目的进行填
充,删除等工作。另外也要分析缺失是否有风险属性,例如芝麻分缺失的用户相对来说风险
会较高,那么缺失可以当做一个类别来处理。
大量多类特征如何使用。例如位置信息,设备信息这些特征类别数较多,如果做亚编码处理
会造成维度灾难,目前常用的方法一个是降基处理,减少类别数,另一个是用 xgboost 来对
类别数做重要性排序,筛选重要性较高的类别再做亚编码处理。
2.6 在做评分卡或其他模型中,怎么衡量特征(数据)的有用性?
特征具有金融风险属性,且与目标变量的关系在业务上有良好的可解释性。
特征与目标变量是高度相关的,衡量的指标主要是 IV。
特征的准确率,这个需要了解特征的衍生逻辑,并与实际一般的情况相比较是否有异常。
特征的覆盖率,一般来说覆盖率要达到 70%以上。
特征的稳定性,特征的覆盖率,分布,区分效果在时间序列上的表现比较稳定。
特征的及时性,最好是能代表用户最近的信用风险情况。
2.7 为什么探索性数据分析(EDA)在机器学习中非常重要?
EDA 不单是看看数据的分布,而是对数据整体有一个大概的了解。通过作图、制表、方程
拟合、计算特征量等手段探索数据的结构和规律。从中发现关键性的价值信息,这些信息对
于后续建模及对模型的正确理解有很重要的意义。
14
通过 EDA 可以发现数据的异常,可以分析每个特征与目标变量之间的关系,特征与特征之
间的关系,为特征构建和特征筛选提供有价值的信息。
EDA 分析可以验证数据是不是你认为的那样,实际情况中由于数据和特征量比较大,往往
忽视这些数据是如何生成的,数据突出的问题或模型的实施中的错误会被长时间忽视,这可
能会导致基于错误信息做出决策。
2.8 缺失值的处理方式有哪些?风控建模中该如何合理的处理缺失?
首先要了解缺失产生的原因,因数据获取导致的缺失建议用填充的方式(缺失率比较低的情
况下),因用户本身没有这个属性导致的缺失建议把缺失当做一个类别。另外可以分析缺失
是否有风险属性,有的话最好当做一个类别来处理。
风控模型对于缺失率的要求比较高,尤其是评分卡。个人认为,缺失率在 30%以上的特征
建议不要用,缺失率在 10%以下的变量可用中位数或随机森林来填充,10%-30%的缺失率
建议当做一个类别。对于 xgboost 和 lightgbm 这类可以自动处理缺失值的模型可以不做处理。
2.9 如何发现数据中的异常值?对异常值是怎么处理的?
一种是基于统计的异常点检测算法例如极差,四分位数间距,均差,标准差等,这种方法适
合于挖掘单变量的数值型数据。另一种主要通过距离方法来检测异常点,将数据集中与大多
数点之间距离大于某个阈值的点视为异常点,检测的标准有欧式距离,绝对距离。
对于异常值先检查下是不是数据错误导致的,数据错误的异常作删除即可。如果无法判别异
常的原因,要根据实际情况而定,像评分卡会做 WOE 转换,所以异常值的影响不大,可以
不做处理。若异常值的数量较多,建议将异常值归为一类,数量较少作删除也可以。
2.10 对于时间序列特征,连续特征,离散特征这三类是怎么做特征转换的?
时间序列特征:将时间变量的维度进行分离(年/月/日/时/分/秒),或者与位置变量进行结
合衍生成新的特征。
连续型特征:标准化,归一化,区间缩放,离散化。在评分卡中主要用的是离散化,离散化
常用的方法有卡房分箱,决策树分箱,等频和等深分箱。
离散型特征:如果类别数不是很多,适合做亚编码处理,对于无序离散变量用独热编码,有
序离散变量用顺序编码。如果类别数较多,可用平均数编码的方法。
2.11 如何处理样本不平衡的问题?
在风控建模中出现样本不平衡主要是坏样本的数量太少,碰到这个问题不要急着试各种抽样
方法,先看一下坏用户的定义是否过于严格,过于严格会导致坏样本数量偏少,中间样本偏
多。坏用户的定义一般基于滚动率分析的结果,不过实际业务场景复杂多样,还是得根据情
况而定。
确定好坏用户定义是比较合理的之后,先尝试能不能扩大数据集,比如一开始取得是三个月
的用户数据,试着将时间线延长来增加数据。因为机器学习是使用现在的数据在整个数据分
布上进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好的分布估计。
对数据集进行抽样,一种是进行欠采样,通过减少大类的数据样本来降低数据的不平衡,另
一种是进行过采样,通过增加小类数据的样本来降低不平衡,实际工作中常用 SMOTE 方法
来实现过采样。
尝试使用 xgboost 和 lightgbm 等对不平衡数据处理效果较好的模型。
尝试从新的角度来理解问题,可以把那些小类样本当做异常点,因此该分类问题转化为异常
检测问题或变化趋势检测问题,这种方法笔者很少用到,就不详细说明了。
15
2.12 特征衍生的方法有哪些?说说你平时工作中是怎么做特征衍生的?
常规的特征衍生方法:
基于对业务的深入理解,进行头脑风暴,构造特征。
特征交叉,例如对类别特征进行交叉相乘。
分解类别特征,例如对于有缺失的特征可以分解成是否有这个类别的二值化特征,或者将缺
失作为一个类别,再进行亚编码等处理。
重构数值量(单位转换,整数小数拆分,构造阶段性特征)
特征的四则运算,例如取平均/最大/最小,或者特征之间的相乘相除。
平时工作特征衍生的做法:
因为风控模型通常需要好的解释能力,所以在特征衍生时也会考虑到衍生出来的特征是否与
目标变量相关。例如拿到运营商的通话记录数据,可以衍生一个"在敏感时间段(深夜)的
通话次数占比",如果占比较高,用户的风险也较大。
平常会将大量的时间和精力花在底层数据的衍生上,这个不仅需要对业务的理解,也需要一
定的想象力进行头脑风暴,即使衍生出来的特征 90%都效果不佳,但只要剩下的 10%是好
的特征,那对于模型效果的提升是很显著的。
对于评分卡来说,特征需要好的解释能力,所以一些复杂的衍生方法,像特征交叉,log 转
换基本不会用到。但如果是 xgboost 等复杂模型,进行特征交叉等方法或许有比较好的效果。
2.13 特征筛选的作用和目的?筛选的特征需要满足什么要求?
作用和目的:
简化模型,增加模型的可解释性, 降低模型过拟合的风险。
缩短模型的训练时间。
避免维度灾难。
筛选特征满足的要求:
具有良好的区分能力。
可解释性好,与目标变量的关系在业务上能解释的通。
在时间序列上有比较好的稳定性。
特征的用户覆盖率符合要求。
2.14 特征筛选的方法有哪些?每种方法的优缺点?实际工作中用到了哪些方法?
Filter(过滤法):按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值
的个数,选择特征。
相关系数,方差(适用于连续型变量),卡方检验(适用于类别型变量),信息熵,IV。
实际工作中主要基于 IV 和相关性系数(皮尔逊系数)。
优点:算法的通用性强;省去了分类器的训练步骤,算法复杂性低,因而适用于大规模数据
集;可以快速去除大量不相关的特征,作为特征的预筛选器非常合适。
缺点:由于算法的评价标准独立于特定的学习算法,所选的特征子集在分类准确率方面通常
低于 Wrapper 方法。
Wrapper(封装法):封装式特征选择是利用学习算法的性能评价特征子集的优劣。因此,
对于一个待评价的特征子集,Wrapper 方法需要训练一个分类器,根据分类器的性能对该特
征子集进行评价。
方法有完全搜索(递归消除法),启发式搜索(前向/后向选择法,逐步选择法),随机搜
索(训练不同的特征子集)。实际工作中主要用到启发式搜索,例如评分卡的逐步逻辑回归。
16
优点:相对于 Filter 方法,Wrapper 方法找到的特征子集分类性能通常更好。
缺点:Wrapper 方法选出的特征通用性不强,当改变学习算法时,需要针对该学习算法重新
进行特征选择;由于每次对子集的评价都要进行分类器的训练和测试,所以算法计算复杂度
很高,尤其对于大规模数据集来说,算法的执行时间很长。
Embedded(嵌入法):先使用某些机器学习的算法和模型进行训练,得到各个特征的权值
系数,根据系数从大到小选择特征。类似于 Filter 方法,但是是通过训练来确定特征的优劣。
一种是基于惩罚项,例如岭回归,lasso 回归,L1/L2 正则化。另一种是基于树模型输出的特
征重要性,在实际工作中较为常用,可选择的模型有随机森林,xgboost,lightgbm。
优点:效果最好速度最快,模式单调
缺点:如何参数设置, 需要对模型的算法原理有较好的理解。
2.15 简单介绍一下风控模型常用的评估指标。
混淆矩阵指标:精准率,查全率,假正率。当模型最后转化为规则时,一般用这三个指标来
衡量规则的有效性。要么注重精准率,要么注重查全率,两者不可兼而得之。
roc 曲线和 AUC 值,roc 曲线是一种对于查全率和假正率的权衡,具体方法是在不同阈
值下以查全率作为纵轴,假正率作为横轴绘制出一条曲线。曲线越靠近左上角,意味着越多
的正例优先于负例,模型的整体表现也就越好。AUC 是 roc 曲线下面的面积,AUC 可以
解读为从所有正例中随机选取一个样本 A,再从所有负例中随机选取一个样本 B,分类器将
A 判为正例的概率比将 B 判为正例的概率大的可能性。在对角线(随机线)左边的点上 TPR
总大于 FPR,意为正例被判为正例的概率大于负例被判为正例的概率。从另一个角度看,由
于画 roc 曲线时都是先将所有样本按分类器的预测概率排序,所以 AUC 反映的是分类器
对样本的排序能力。AUC 越大,自然排序能力越好,即分类器将越多的正例排在负例之前。
KS:用于区分预测正负样本分隔程度的评价指标,KS 越大,表示模型能将好坏样本区分开
的程度越大。KS 的绘制方法是先将每个样本的预测结果化为概率或者分数,将最低分到最
高分(分数越低,坏的概率越大)进行排序做样本划分,横轴就是样本的累计占比,纵轴则
是好坏用户的累计占比分布曲线,KS 值为两个分布的最大差值(绝对值)。KS 值仅能代
表模型的区隔能力,KS 不是越高越好,KS 如果过高,说明好坏样本分的过于开了,这样
整体分数(概率)就是比较极端化的分布状态,这样的结果基本不能用。
基尼系数:其横轴是根据分数(概率)由高到低累计的好用户占总的好用户的比例,纵轴是
分数(概率)从高到低坏用户占总的坏用户的比例。由于分数高者为低风险用户,所以累计
坏用户比例的增长速度会低于累计好用户比例,因此,基尼曲线会呈现向下弯曲的形式,向
下突出的半月形的面积除以下方三角形的面积即是基尼系数。基尼系数越大,表示模型对于
好坏用户的区分能力越好。
2.16 为什么 roc 适合不平衡数据的评价?
roc 曲线的纵轴是 TPR= ,横轴是 FPR= ,TPR 聚焦于正例,FPR 聚焦于与负例,
所以 roc 兼顾了正样本和负样本的权衡,使其成为一个比较均衡的评估方法。
因为 TPR 用到的 TP 和 FN 都是正样本,FPR 用到的 FP 和 TN 都是负样本,所以说正样本
或负样本发生了改变,TPR 和 FPR 也不会相互影响,因此即使类别分布发生了改变,数据
变得不平衡了,roc 曲线也不会产生大的变化。roc 曲线的优点,即具有鲁棒性,在类别
分布发生明显改变的情况下依然能客观地识别出较好的分类器。
17
2.18 什么是模型的欠拟合和过拟合?
欠拟合指的是模型没有很好的捕捉到数据特征,不能很好的拟合数据。
过拟合指的是模型把数据学习的太彻底,以至于把噪声数据学习进去了,这样模型在预测未
知数据时,就不能正确的分类,模型的泛化能力太差。
2.19 如何判断模型是否存在过拟合或欠拟合?对应的解决方法有哪些?
判断模型是否存在过拟合/欠拟合主要用学习曲线,学习曲线指的是通过画出不同训练集大
小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方
差偏高(过拟合)或偏差过高(欠拟合)。当训练集和测试集的误差收敛但却很高时,即为
欠拟合,当训练集和测试集的误差之间有大的差距时,为过拟合。
解决欠拟合的方法:增加效果好的特征,添加多项式特征,减小正则化参数等。
解决过拟合的方法:使用更多的数据,选择更加合适的模型,加入正则项等。
2.20 什么是正则化?什么是 L1 正则化和 L2 正则化?
正则化是在模型的 loss function 的基础上,加上了一些正则化项或者称为模型复杂度惩罚项,
它会向学习算法略微做些修正,从而让模型能更好地泛化。这样反过来能提高模型在不可见
数据上的性能。
L1 正则化就是在 loss function 后边所加正则项为 L1 范数,加上 L1 范数容易得到稀疏解,
所以 L1 正则化会趋向于产生少量的特征。
L2 正则化就是 loss function 后边所加正则项为 L2 范数的平方,加上 L2 正则相比于 L1 正则
来说,得到的解比较平滑(不是稀疏),所以 L2 正则化会使特征的解趋近于 0,但不会为
0。
2.21 正则化为什么可以防止过拟合?
最简单的解释是正则化对模型参数添加了先验,在数据少的时候,先验知识可以防止过拟合。
举个例子:抛一枚硬币 5 次,得到的全是正面,则得出结论:正面朝上的概率为 1,这类似
于模型的过拟合,如果加上硬币朝上的概率是 0.5 的先验,结果就不会这么离谱,这就是正
则。
2.22 什么是交叉验证?交叉验证的目的是什么?有哪些优点?
交叉验证概念:
交叉验证,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试
集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同
的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓"交叉"。
交叉验证的目的:
评估给定算法在特定数据集上训练后的泛化性能,比单次划分训练集和测试集的方法更加稳
定,全面。
交叉验证的优点:
如果只是对数据随机划分为训练集和测试集,假如很幸运地将难以分类的样本划分进训练集
中,则在测试集会得出一个很高的分数,但如果不够幸运地将难以分类的样本划分进测试集
中,则会得到一个很低的分数。所以得出的结果随机性太大,不够具有代表性。而交叉验证
中每个样本都会出现在训练集和测试集中各一次,因此,模型需要对所有样本的泛化能力都
很好,才能使其最后交叉验证得分,及其平均值都很高,这样的结果更加稳定,全面,具有
说服力。
18
对数据集多次划分后,还可以通过每个样本的得分比较,来反映模型对于训练集选择的敏感
性信息。
对数据的使用更加高效,可以得到更为精确的模型。
2.23 交叉验证常用的方法有哪些?
标准 K 折交叉验证:K 是自定义的数字,通常取 5 或 10,如果设为 5 折,则会训练 5 个模
型,得到 5 个精度值。
分层 K 折交叉验证:如果一个数据集经过标准 K 折划分后,在测试集上只有一种类别,则
无法给出分类器整体性能的信息,这种情况用标准 K 折是不合理的。而在分层 K 折交叉验
证中,每个折中的类别比例与整个数据集类别比例相同,这样能对泛化性能做出更可靠的估
计。
留一法交叉验证:每次划分时,把单个数据点作为测试集,如果数据量小,能得到更好的估
计结果,数据量很大时则不适用。
打乱划分交叉验证:每次划分数据时为训练集取样 train_size 个点,为测试集取样 test_size
个点,将这一划分划分方法重复 n_splits 次。这种方法还允许每次迭代中使用部分数据,可
通过设置 train_size 和 test_size 之和不为 0 来实现,用这种方法对数据进行二次采样可能对
大型数据上的试验很用用。另外也有分层划分的形式( StratifiedShuffleSplit),为分类任务
提供更可靠的结果。
分组交叉验证:适用于数据中的分组高度相关时,以 group 数组作为参数,group 数组表示
数据中的分组,在创建训练集和测试集的时候不应该将其分开,也不应该与类别标签弄混。
三、业务+模型篇
3.1 互联网金融场景下的的风控模型种类?
获客阶段:用户响应模型,风险预筛选模型。
授信阶段:申请评分模型,反欺诈模型,风险定价模型,收益评分模型。
贷后阶段:行为评分模型,交易欺诈模型,客户流失模型。
催收阶段:早期催收模型,晚期催收模型。
3.2 简单描述一下风控建模的流程?
前期准备工作:不同的模型针对不同的业务场景,在建模项目开始前需要对业务的逻辑和需
求有清晰的理解,明确好模型的作用,项目周期时间和安排进度,以及模型效果的要求。
模型设计:包括模型的选择(评分卡还是集成模型),单个模型还是做模型的细分,是否需
要做拒绝推论,观察期,表现期的定义,好坏用户的定义,数据的获取途径等都要确定好。
数据拉取及清洗:根据观察期和表现期的定义从数据池中取数,并进行前期的数据清洗和稳
定性验证工作,数据清洗包括用户唯一性检查,缺失值检查,异常值检查等。稳定性验证主
要考察变量在时间序列上的稳定性,衡量的指标有 PSI,平均值/方差,IV 等。
特征工程:主要做特征的预处理和筛选,如果是评分卡,需要对特征进行离散化,归一化等
处理,再对特征进行降维,降维的方法有 IV 筛选,相关性筛选,显著性筛选等。另外会基
于对业务的深入理解做特征构造工作,包括特征交叉,特征转换,对特征进行四则运算等。
模型建立和评估:选择合适的模型,像评分卡用逻辑回归,只需要做出二分类预测可以选择
xgboost 等集成模型,模型建好后需要做模型评估,计算 AUC,KS,并对模型做交叉验证来
评估泛化能力及模型的稳定性。
模型上线部署:在风控后台上配置模型规则,对于一些复杂的模型还得需要将模型文件进行
19
转换,并封装成一个类,用 Java 等其他形式来调用。
模型监控:前期主要监控模型整体及变量的稳定性,衡量标准主要是 PSI,并每日观察模型
规则的拒绝率与线下的差异。后期积累一定线上用户后可评估线上模型的 AUC,KS,与线下
进行比较,衡量模型的线上的实际效果。
3.3 评分卡,集成模型在线上是如何部署的?
评分卡的部署较为简单,因为评分卡将变量映射到了一个个区间及得分,所以在普通的风控
决策引擎上就可配置。
像一些比较复杂的模型,例如 xgboost 和 lightgbm,一般是将模型文件转换为 pmml 格式,
并封装 pmml,在风控后台上上传 pmml 文件和变量参数文件,并配置好模型的阈值。python
模型和 R 模型都可以用这种方式来部署。
3.4 对于金融场景,稳定胜于一切,那在建模过程中如何保证模型的稳定性?
在数据预处理阶段可以验证变量在时间序列上的稳定性,通过这个方法筛掉稳定性不好的变
量,也能达到降维的目的。筛选的手段主要有:计算月 IV 的差异,观察变量覆盖率的变化,
两个时间点的 PSI 差异等。
异常值的检查,剔除噪声,尤其对于逻辑回归这种对于噪声比较敏感的模型。
在变量筛选阶段剔除与业务理解相悖的变量,如果是评分卡,可以剔除区分度过强的变量,
这种变量一般不适合放入模型中,否则会造成整个模型被这个变量所左右,造成模型的稳定
性下降,过拟合的风险也会增加。
做交叉验证,一种是时间序列上的交叉验证,考察模型在时间上的稳定性,另一种是 K 折
随机交叉验证,考察模型的随机稳定性。
选择稳定性较好的模型,例如随机森林或 xgboost 这类泛化能力较好的模型。
3.5 为什么要做拒绝推断?常用的拒绝推断方法有哪些?
拒绝推断的目的:
如果只用好坏用户建模,则忽略了那些授信被拒的用户,加入拒绝用户是为了让建模样本更
接近总体的分布,防止样本有偏,同时也能增加样本数量。
公司内部策略的变动,导致当前的申请者已不能代表建模时点的申请者,所以过去被拒的用
户不一定现在也会被拒绝,因此,只使用审批通过的用户可能会造成误判。
做拒绝推断可以找出之前被拒的好用户,挖掘这些用户,改善风控流程,增加公司收益。
拒绝推断的常用方法:
硬性截断法:先用好坏用户建立初始模型,然后用这个初始模型对拒绝用户进行打分,设定
一个阈值分数(根据对拒绝用户的风险容忍度),低于这个阈值的为坏用户,高于这个阈值
的为好用户。再将已标记好的拒绝用户放入样本中,重新建立模型。
分配法:此方法适用于评分卡,先用好坏用户建立初始评分卡模型,再将样本跟据评分高低
进行分组,计算各分组的违约率。然后对拒绝用户进行打分并按此前的步骤进行分组,以各
分组的违约率为抽样比例,随机抽取改分组下的违约用户,指定其为坏用户,剩下的则是好
用户。最后将已标记的拒绝用户加入样本中,重新建立模型。
平常工作中主要用到以上两种方法,个人建议做申请模型最好做一下拒绝推断,这样模型上
线后的得分分布和拒绝率和线下才不会有很大的差异。
3.6 模型转化为规则后决策点(cutoff 点)怎么设定?
规则只是判断用户好坏,而不会像模型会输出违约概率,所以设定决策点时需要考虑到规则
20
的评估指标(精准率,查全率,误伤率,拒绝率),一般模型开发前会设定一个预期的拒绝
率,在这个拒绝率下再考量精确率,查全率和误伤率的取舍,找到最佳的平衡点。
好的模型能接受更多的好用户,拒绝掉更多的坏用户,也就是提高好坏件比例,所以可事先
设定一个预期目标的好坏件比例来选择最佳的决策点。
3.7 怎么做风控模型的冷启动?
风控模型的冷启动是指产品刚上线时,没有积累的用户数据,或者用户还没有表现出好坏,
此时需要做模型就是一个棘手的问题,常用的方法如下:
不做模型,只做规则。凭借自己的业务经验,做一些硬性规则,比如设定用户的准入门槛,
考量用户的信用历史和多头风险,而且可以接入第三方提供的反欺诈服务和数据产品的规
则。另外可以结合人审来对用户的申请资料做风险评估。
借助相同模式产品的数据来建模。如果两个产品的获客渠道,风控逻辑,用户特征都差不多
的话,可以选择之前已上线那个产品所积累的用户来建模,不过在模型上线后需要比较线上
用户的特征是否与建模用户有较大的差异,如果差异较大,需要对模型对一些调整。
无监督模型+评分卡。这种方法适用于产品上线一段时间后,表现出好坏的用户比较少,但
需要做一个模型出来,此时可用线上的申请用户做无监督模型,找出一部分坏样本和好样本,
用这些数据来做评分卡模型,当然这种模型准确性是存疑的,需要后续对模型不断迭代优化。
3.8 模型上线后是怎么监控的?
前期监控(模型上线后一个月内):
模型最后设定 cutoff 点后可以得出模型的拒绝率(线下拒绝率), 上线后需要比较模型每日
的拒绝率与线下拒绝率。如果两者差异较大,说明线上的用户与建模的用户分布有很大差异,
原因可能是没做拒绝推断,或者用户属性随着时间发生了偏移。
监控模型整体的稳定性,通常用 PSI 来衡量两个时间点的差异程度。模型的稳定性是一个需
要长期观察的指标,可绘制月/周 PSI 变化趋势图来分析稳定性的变化,从中可以发现用户
是否随着时间推移属性发生了变化,以便及时对模型做出合理的调整。
变量稳定度分析,目的是如果模型的稳定性不好,可利用变量稳定度分析来了解是哪些变量
造成的。对于不稳定的变量要分析其原因,并对模型做出调整,弃用不稳定的变量或者找其
他变量来替换。
后期监控(用户表现出了好坏程度):
此时已积累了一些线上的好坏用户,可做模型的线上效果的评估,评估的指标有 AUC, KS,
基尼系数,如果模型的线下效果好,但线上效果却不理想,这个模型是要做优化的。
好坏用户的评分分布。绘制线上好坏用户的评分分布图,如果符合期望(高分段好用户占比
多,低分段坏用户占比多),则说明模型的线上的区隔能力较好。
变量鉴别力分析。用线上的好坏用户来计算变量的 IV 值,评价变量的预测能力,预测能力
不好的变量可以考虑弃用。
3.9 怎么设计反欺诈模型?
本人之前没做过风控的反欺诈模型,因为公司的反欺诈检测都是外包给第三方的,所以对于
如何设计反欺诈模型只能给出自己的一些见解:
反欺诈模型不太适合用二分类监督模型来做,一是诈骗的类型很多,是一个多分类的问题,
不可能只做单一类型的反欺诈模型。二是大部分数据都是没有标签的,各种监督学习模型几
乎无用武之地,而且区分噪声和异常点难度很大,甚至需要一点点想象力和直觉。三是欺诈
类型不断在变化,如果用历史数据建的模型来识别之前从未出现过的欺诈类型,几乎是做不
21
到的。
个人觉得做模型之前需要确定两个问题,一是如何发现欺诈点,二是如何验证欺诈点。第一
个问题可以用数据可视化的手段,做一下时序分析,或者用无监督学习来识别异常点。第二
个问题可以用统计学的方法来验证异常点与总体是有显著性差异的,但有差异不一定就是欺
诈,所以需要与领域专家进行讨论,也可以直接叫来领域专家来分析用户哪些行为是欺诈的。
反欺诈规则+机器学习模型来检测欺诈用户,不能单纯依靠机器学习模型来检测欺诈。规则
和模型用到的变量一般有:用户的设备,位置信息,关系网络,异常操作记录和第三方黑名
单等。总之反欺诈模型难度很高
3.10 当模型上线后发现稳定性不佳,或者线上的区分效果不好,你是怎么对模型作调整的?
模型稳定性不佳先检查当初建模时有没有考量过特征的稳定性,在模型前期监控一般会做变
量的稳定性分析,如果发现稳定性不佳的变量,考虑弃用或用其他变量替代。另外可以分析
下线上用户和建模用户的分布差异,考虑在建模时增加拒绝推断的步骤,让建模样本的分布
更加接近于实际整体的申请用户。
线上的效果不好可以从变量角度分析,做一下变量鉴别度分析,剔除掉效果不好的变量,挖
掘新的变量入模。如果一个模型已上线较长的时间,用户的属性也慢慢发生偏移,建议重新
取数做一个新的模型替代旧模型。
3.11 如何衡量一个风控模型的效果?
1.评分卡建模之前的评估:
主要评估建模样本的稳定性,根据评分卡的目的不同,比较对象为总体或者近段时间的样本。
2.分箱过程的评估
变量分箱的同时会计算 WOE,这里是对 WOE 进行可解释性上的评估,包括变化趋势,箱
体之间 WOE 差异,WOE 绝对值大小等。
3.对逻辑回归模型的评估
将数据集随机划分为训练集和测试集,计算 AUC, KS 及 Gini 系数
通过交叉验证的方法,评估模型的泛化能力,评判指标选择 AUC。
绘制学习曲线,评估模型是否有过拟合的风险,评判指标为准确率(Accuracy)。
4.转化评分之后的评估
对 score 进行可解释上的评估,评估原则与 WOE 评估大致相同。
绘制评分分布图,观察分布的形状及好坏用户分布的重叠程度。
绘制提升图和洛伦兹曲线,评估评分卡的可解释性和好坏用户区分效果。
评估准确性,根据对精确率和查全率的重视程度绘制 PR 曲线,并根据业务目标设定 cutoff
点。
5.评分卡上线后的评估
绘制评分分布表和评分分布图,计算评分的 PSI,评估其稳定性。
评估每个入模变量的稳定性。
3.12 在实际应用中,如何权衡模型的性能,可解释性和部署的难易程度?
首先要考虑到部署的难易程度,评分卡可以像普通规则一样在风控后台部署,但是像 xgboost
等比较复杂的模型需要考虑平台支不支持,一般来说能用评分卡解决的就最好用评分卡,部
署简单而且可解释性好。然后关于可解释性和模型效果的权衡,个人认为模型的效果达到要
求的情况下再去考虑可解释性,如果用评分卡做出来的效果不好,则可以考虑用集成模型或
者神经网络等复杂的机器学习模型,只要你的风控后台支持部署。
22
3.13 对于高维稀疏特征,或者是弱特征,你是怎么处理的?
对于高维稀疏特征,逻辑回归的效果要比 GBDT 好。这是由于逻辑回归的正则项是对特征
权重的惩罚,以至于特征的权重不至于过大,而树模型的惩罚项主要是深度和叶子节点数目,
而对于高维稀疏特征,10000 个样本可能 9990 个值是 0,那只需要一个节点就可以划分 9990
和剩下的 10 个样本,可见惩罚项之小,所以 GBDT 对于高维稀疏特征很容易过拟合。平时
工作中如果用的是逻辑回归评分卡,则可以对稀疏特征进行离散化,离散成值为 0 或不为 0,
再用 woe 进行编码。而如果使用 xgboost 等集成模型,最好还是不要用高维的稀疏特征。
弱特征指的是与目标变量关系不大的特征,或者是区分能力较弱的特征。在大数据风控中弱
特征的种类很多,包括社交,通话,位置等信息,而且建模时弱特征会多达数百个。如果是
用评分卡建模,弱特征一般会被舍弃掉,因为评分卡的入模特征数不宜过多,一般在 15 个
以下,所以要找寻比较强的特征。而对于 xgboost 等模型,本身对数据的要求不是很高,并
且精度好,一些弱特征进行交叉组合或许能给模型带来不错的效果。
3.14 对于成千上万维的特征你是怎么做特征筛选的,如何保证其模型的可解释性和稳定
性?
可先做特征的粗筛选,例如缺失率高,方差为 0,非常稀疏的特征可以先剔除。
根据变量的稳定性再次进行粗筛,衡量指标有月 IV 差异,两个时间点的 PSI 差异等。
根据 IV 值的高低筛选变量,或者直接用集成模型的特征重要性进行筛选。
为了保证模型的可解释性,需要将共线性的特征剔除。
最后考察各个特征与目标变量的关系,要求在业务上有良好的可解释能力,并且特征与目标
变量的关系最好是呈单调线性变化的,这样也能保证模型的稳定性。
3.15 如何根据风险因素对用户分层,构建客群差异化的模型?
做客群差异化模型之前最好做一下用户画像,在风控领域中做用户画像的目的是:
系统性的梳理用户群体,找到异同点对用户进行划分群体,分类的维度很多,可以是静态属
性,购买偏好,也可以是褥羊毛党等风险属性。
便于更深刻的理解业务,理解用户需求,风控离不开业务,只有深刻理解业务后,才能发现
更多潜在的风险。
便于后续的数据挖掘,了解坏用户的行为特征,并且根据用户特征做关联规则分析。
对不同类型的用户,做针对性的风控规则和风控模型。
平常工作中的做法:
对用户做静态属性的划分,比如按性别,年龄,收入,职业等。例如刚毕业工作的年轻人和
收入比较稳定的中年人,他们的借款需求,风险程度就不一样,可以先对用户群体做这样的
划分,再对每个群体单独建立模型。
根据用户风险属性做差异化模型,例如对手机分期业务做一个套现风险模型,挖掘套现风险
属性,目标变量变成是否为套现用户。
3.16 额度,利率的风险定价模型你是如何设计的?
首先做风险定价模型需要熟悉产品的属性和特点,像小额现金贷和大额分期贷两种产品的额
度定价逻辑就不同。另外也要了解产品的盈利模式和预期的利润,这点需要与业务部门做好
沟通,通常关于额度,利率也是业务或者产品制定的。
风险定价模型一般采用评分卡模型,最后设定 cutoff 点后对通过的用户进行风险等级划分,
对于风险高的用户给的额度较低,或者利率较高。一般来说中低额度的用户占大部分,高额
23
度用户占小部分,最后可以得出一个平均额度或利率,这个值事先可以根据预期的利润/资
损来计算。
3.17 风控流程中不同环节的评分卡是怎么设计的?
申请评分 A 卡用在贷前审核阶段,主要的作用是决定用户是否准入和对用户进行风险定价
(确定额度和利率),用到的数据是用户以往的信用历史,多头借贷,消费记录等信息,并
且做 A 卡一般需要做拒绝推断。A 卡一般预测用户的首笔借款是否逾期,或者预测一段时
间内是否会逾期,设计的方式也多种多样,有风险差异化评分卡,群体差异化评分卡,或者
做交叉评分卡等。
行为 B 卡主要用在借贷周期较长的产品上,例如手机分期。作用一是防控贷中风险,二是
对用户的额度做一个调整。用到的数据主要是用户在本平台的登录,浏览,消费行为数据,
还有借还款,逾期等借贷表现数据。
催收 C 卡主要是对逾期用户做一个画像分析,通过深度挖掘用户特征,对逾期用户进行分
群,做智能催收策略等。
最后四题是正阳的所有面试题,这里只提出问题部分会给出解题思路。
3.18 正阳之风控建模
谈谈你对风控模型的理解?
模型如何设计? 可以从滚动率、迁徙率来回答,也可以从反欺诈、ABC 卡回答。
对客群进行细分建模的本质是什么? 其实分客群进行建模,实质也是一种交叉特征,能提
高模型稳定性。
拒绝推断应该怎么做,作用是什么?效果怎么样? (多查资料,博学审问慎思明辨)
简要说明下标准评分卡开发流程 (多查资料,博学审问慎思明辨)
3.19 正阳之特征工程
如何对数据做质量检验? 在完成数据匹配工作之后,建模之前,我们需要对数据进行整体
的质量检测,主要有两个方面: 1、数据分布。 2、数据集中度检测。 3、数据脏乱情况。
缺失值(是否隐藏风险)、离群值、错误值、重复值,根据其是否符合业务逻辑,判断数据
是否存在异常。
特征工程流程 关键词: 特征预处理、特征选择、特征衍生、特征提取等。用到的技术主要
有连续变量离散化、分类变量哑编码、卡方分箱、特征编码、共线性检验、PCA 降维、交
叉验证等。
筛选变量的常用方法 筛选变量有很多种方法,随机森林、GBDT、逻辑回归显著性、VIF
共线性、相关性图谱等、随机逻辑回归筛选、递归法筛选等。
好的特征需要具备哪些优势? 1、稳定性高 2、区分度高 3、差异性大 4、符合业务逻辑
如何衍生特征? 变量的衍生并不复杂,通常我们会从三种角度出发: 1、数学运算。求和、
比例、频率、平均等。 2、时间窗口。有些变量的意义只有在一段时间内才有效,所以针对
时间比如说注册如期、交易日期等变量,需要计算其到现在的时间段,完成变量的衍生。 3、
交叉组合。GBDT\XGBoost 模型、用户画像分等等都可以做特征衍生。 衍生出来的特征要
符合实际业务含义,并且要保持稳定。
3.20 正阳之机器学习算法
简单介绍你熟悉的几种算法及其在应用场景中的差别!
一些基本公式的推导,比如 LR、xgb 之类的,这些可以自己推导一下。
24
简单评价几种常用算法的优缺点: 1、逻辑回归 优点:简单、稳定、可解释、技术成熟、
易于监测和部署 缺点:一定不能有缺失数据;必须是数值型特征,需要编码;准确度不高 2、
决策树 优点:对数据质量要求不高,易解释 缺点:准确度不高 3、其他元模型 4、组合模
型 优点:准确度高,稳定性强,泛化能力强,不易过拟合 缺点:不易解释,部署困难,计
算量大
3.21 正阳之模型评估
模型评估的常用方法? 从三方面回答: 1、区分度:主要有 KS 和 GINI 指标,理解 KS 的
定义及用法 2、准确性:主要有 roc 曲线和 AUC 指标,理解 AUC 的定义及用法 3、稳定性:
主要有 PSI 指标,理解 PSI 的定义及用法
auc 和 ks 的关系? 有人说 auc 是衡量整个模型的排序能力,KS 是衡量某个分段的区分能力。
5、模型部署
模型的部署上线应用类似的问题,偏开发,分析人员可能不太擅长。主要就是 api 接口安装、
测试、等级划分、额度设计、风险定价、ABtest 的设计等等。
6、模型监测
上述一些运营数据和风控指标的关注
7、模型调优
模型调优的方法
A 类调优
D 类调优
