金融风控面试题目(二)

在公众号「python风控模型」里回复关键字:学习资料
QQ学习群:1026993837 领学习资料
一、机器学习面试(74 题)
1.1 简单介绍下 logistics 回归
逻辑回归是一种二分类模型,是在线性模型外面套一个 sigmoid 函数,得到的是处于[0,1]
之间的概率值。Logistic 回归目的是从特征学习出一个 0/1 分类模型,而这个模型是将特性
的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用 logistic 函
数(或称作 sigmoid 函数)将自变量映射到(0,1)上,映射后的值被认为是属于 y=1 的概率。
1.2 如何理解模型的欠拟合?以及如何处理?
训练误差和验证误差都很大,这种情况称为欠拟合。出现欠拟合的原因是模型尚未学习到数
据的真实结构。
解决办法
1 做特征工程,添加跟多的特征项。
2 增加模型复杂度。
3 集成学习方法 boosting(如 GBDT)能有效解决高偏差问题
1.3 如何理解模型的过拟合?以及如何处理?
过拟合(overfiting / high variance)
模型在训练集上表现很好,但是在验证集上却不能保持准确,也就是模型泛化能力很差。这
种情况很可能是模型过拟合。
造成原因主要有以下几种:
1 训练数据集样本单一,样本不足。
2 训练数据中噪声干扰过大。
3 模型过于复杂。
对应的预防和解决办法如下:
1 在训练和建立模型的时候,从相对简单的模型开始,不要一开始就把特征做的非常多,模
型参数跳的非常复杂。
2 增加样本,要覆盖全部的数据类型。数据经过清洗之后再进行模型训练,防止噪声数据干
扰模型。
3 正则化。在模型算法中添加惩罚函数来防止过拟合。常见的有 L1,L2 正则化。
4 集成学习方法 bagging(如随机森林)能有效防止过拟合
5 减少特征个数(不是太推荐)
1.4 泛化误差
泛化误差是训练集上的表现与测试集上表现的差值,由 3 个部分组成:偏差、方差和噪声。
偏差度量模型的拟合能力,也就是模型预测结果与真实结果的偏离程度;方差度量数据扰动
造成的影响,也就是同样大小的数据集变动所造成的学习能力变化;噪声则刻画问题本身的
拟合难度。
1.5 经验风险与结构风险
经验风险是对模型错误程度的量化指标,衡量的是偏差。以线性模型为例,输出的预测结果
与真实结果差值的平方求均值。经验风险越小,模型效果越好。
但是模型除了要在训练集表现好,还要再测试集也有很好的鲁棒性(即泛化能力较好)。为
应对这种由于模型结构太复杂而导致的过拟合问题,为损失函数增加一个正则项,用来惩罚
5
模型的复杂度。从而让模型的结构足够简单,避免过拟合问题。
1.6 哪些机器学习算法不需要做归一化
(1)树模型不需要归一化,因为他们不关心变量的值,更关心排序或者分布,比如决策树、
随机森林、XGBoost 等。
(2)需要归一化的模型包括两类:
①基于距离计算的模型,比如 KNN
②通过梯度下降法求解的模型,比如逻辑回归
1.7 树形结构为什么不需要归一化?
因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。
树模型按照特征值进行排序,排序的顺序不变,那么所属的分支以及分裂点就不会变化。
而且树模型不能进行梯度下降,比如回归树模型,寻找最优点是通过寻找最优分裂点完成的,
树模型是阶跃的不可导,而且求导也没有意义,也就不需要归一化处理。
1.8 非树形模型为什么需要归一化?
非树形模型,比如 SVM、LR、KNN、KMeans 这些模型是需要归一化的
对于线性模型,特征值差别很大时,比如 LR,我们有两个特征,一个是(0,1),一个是
(0,10000)的,运用梯度下降的时候,损失等高线是椭圆形,需要迭代很多次才能达到最
优点。如果进行了归一化处理,那么等高线就是圆形,从而导致迭代次数变少很多。
1.9 什么是标准化和归一化?
标准化就是均值为 0,方差为 1,公式是 x-mean / std
归一化是把每个特征的值都缩放到相同的数值范围,比如[0,1],
公式为 x - x.min() / x.max() -x.mean()
1.10 数据归一化或者标准化的原因是什么?
进行归一化是各维度的量纲不同,我理解能不归一化最好不归一化
有些模型在各维度进行不均匀的伸缩之后,最优解与原来不等价需要归一化,比如 SVM。
有些模型伸缩后,最优解不变,理论上可以不归一化,比如 LR。但是,实际中往往通过迭
代求解模型参数,如果量纲太高就相当于一个很扁的高斯模型,迭代算法有可能发生不收敛
的情况,所以最好先归一化。
1.11 逻辑回归为什么要对特征进行离散化(分箱)
做风控模型一般是通过“海量离散特征+简单模型”同“少量连续特征+复杂模型”
工业界很少将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列 0、1
的特征交给 LR 模型。这样做的优势:
1 离散后的特征对于异常数据有很好的鲁棒性,比如年龄>30,是 1,否则是 0,如果有个人
年龄是 500,也不会对模型有什么影响;
2 易于模型快速迭代,离散特征的增加和减少都很容易;
3 运行速度快,稀疏向量内积乘法运算速度快,计算结果方便存储;
4 引入非线性,表达能力增强。这里可以分成两类,做 onehot 处理,将单个变量离散化成
N 个之后,每个变量有单独权重,相当于引入非线性;第二类,离散后进行特征交叉,由
M+N 个向量变成 M*N 个向量,进一步引入非线性。
6
5 离散化之后,模型跟稳定。比如 20-30 岁作为一个区间,不会因为某个人长了一岁,就突
然成为一个完全不同的人。但是 30 岁 31 岁这种临界值就很尴尬,所以怎么来确定边界很重
要
1.12 说说梯度下降法
梯度下降法(Gradient descent)是一个一阶最优化算法,在单变量的实值函数的情况,梯度
就是导数。要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或
者是近似梯度)的反方向的规定步长距离点进行迭代搜索。
1.13 梯度下降法、牛顿法和拟牛顿法
梯度下降法求一阶导数,缺点是步幅难以确定;
牛顿法求二阶导,用到海森矩阵,速度快,缺点是求海森矩阵的逆比较麻烦;
为了解决海森矩阵求逆问题,产生了拟牛顿法,不求二阶导,构造近似的海森矩阵。
逻辑回归用的是梯度下降法,xgboost 用的是牛顿法
1.14 LR 和线性回归的区别和联系
LR 在线性回归的实数范围输出值上施加 sigmoid 函数将值收敛到 0~1 范围, 其目标函数也因
此从差平方和函数变为对数损失函数。逻辑回归和线性回归首先都是广义的线性回归,
其次经典线性模型的优化目标函数是最小二乘,而逻辑回归则是似然函数,
另外线性回归在整个实数域范围内进行预测,敏感度一致,而分类范围,需要在[0,1]。逻辑
回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,因而对于这类问题来
说,逻辑回归的鲁棒性比线性回归的要好。
1.15 简单说下有监督学习和无监督学习的区别
有监督学习:对具有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预
测。(LR,RF,GBDT)
无监督学习:对未标记的样本进行训练学习,比发现这些样本中的结构知识。(KMeans,PCA)
1.16 机器学习中的正则化到底是什么意思?
L1 正则化和 L2 正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某
些参数做一些限制。对于线性回归模型,使用 L1 正则化的模型建叫做 Lasso 回归,使用 L2
正则化的模型叫做 Ridge 回归(岭回归)。L1 正则化是指权值向量 w 中各个元素的绝对值
之和,通常表示为||w||1。L2 正则化是指权值向量 w 中各个元素的平方和然后再求平方根
(可以看到 Ridge 回归的 L2 正则化项有平方符号),通常表示为||w||2。L1 正则化可以产
生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。L2 正则化可以防止模型过拟
合(overfitting)。当然,一定程度上,L1 也可以防止过拟合。
1.17 说说常见的损失函数
常用的损失函数有以下几种(基本引用自《统计学习方法》):
1.18 为什么 xgboost 要用泰勒展开,优势在哪里
xgboost 使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得
函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数
据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数
选择分开了. 这种去耦合增加了 xgboost 的适用性, 使得它按需选取损失函数, 可以用于分
类, 也可以用于回归。
1.19 协方差和相关性有什么区别
相关性是协方差的标准化格式。比如已经算出 x、y 的协方差,协方差除以 x、y 的方差,就
得到相关性。
1.20 xgboost 如何寻找最有特征?有放回还是无放回呢?
xgboost 在训练的过程中给出各个特征的增益评分,最大增益的特征会被选出来作为分裂依
据, 从而记忆了每个特征对在模型训练时的重要性 -- 从根到叶子中间节点涉及某特征的次
数作为该特征重要性排序。
xgboost 属于 boosting 集成学习方法, 样本是不放回的, 因而每轮计算样本不重复. 另一方面,
xgboost 支持子采样, 也就是每轮计算可以不使用全部样本, 以减少过拟合. 进一步地,
xgboost 还有列采样, 每轮计算按百分比随机采样一部分特征, 既提高计算速度又减少过拟
合。
1.21 L1 和 L2 的区别以及分别服从什么分布
L1 是拉普拉斯分布,L2 是高斯分布。
L1 范数: 为 x 向量各个元素绝对值之和;L2 范数: 为 x 向量各个元素平方和的 1/2 次方。
8
L1 范数可以使权值稀疏,方便特征提取;L2 范数可以防止过拟合,提升模型的泛化能力。
L1 和 L2 的差别,一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个
是 1 一个是 w 便知, 在靠进零附近, L1 以匀速下降到零, 而 L2 则完全停下来了. 这说明 L1
是将不重要的特征尽快剔除, L2 则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用,
就是把重要性在一个数量级的那些特征一起平等共事(简言之, 不养闲人也不要超人)。
1.22 防止过拟合的方法
过拟合的原因是算法的学习能力过强;一些假设条件过于可能是不成立的,比如样本独立同
分布;训练样本过少,不能对整个空间进行分布估计。
处理方法:
1 早停:如果在训练中多次迭代后发现模型性能没有有显著提高就停止训练
2 数据集扩增:原有数据增加、重采样等
3 正则化,正则化可以限制模型复杂度
4 交叉验证
5 特征选择
6 创建一个验证集是最基本的防止过拟合的方法
1.23 什么是最小二乘法?
就是最小平方法,预测结果与真实结果差额的平方和,取最小值。
1.24 怎么理解决策树、xgboost 能处理缺失值?而有的模型对缺失值比较敏感。
工具包自动处理数据缺失不代表具体的算法可以处理缺失项。
决策树一般用中位数或者众数来替换。xgboost 把缺失值当做稀疏矩阵来对待,本身的在节
点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择
较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子
树。
1.25 特征工程包括哪些内容
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
基础特征构造、数据预处理、特征衍生、特征变换、特征筛选
1.26 特征选择有哪些
特征选择有两个原因:一是减少特征数量,使模型泛化能力更强,减少过拟合;二是增强对
特征和特征值之间的理解
特征选择包括三种方法,过滤法、嵌入法和包装法。
1 Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的
个数,选择特征,包括方差过滤和相关性过滤,相关性过滤包括卡方、F 检验和互信息法。
2 Embedded 嵌入法,相当于过滤法+模型训练得分,根据特征重要性删除特征,用自定义模
型
3 Wrapper 包装法,比嵌入法快,每次删除部分特征后,重新计算特征重要性,模型是黑箱。
1.27 工作中的特征选择
风控工作中很少用过滤法这种方法。一般利用变量重要性、单调性、共线性和稳定性来筛选
变量。
1 变量重要性
IV 值、卡方检验、模型筛选(xgboost 的特征重要性)这三种方法用一种就好了,这里我们
使用 IV 值或者模型筛选多一点
2 共线性
相关系数和共线性:皮尔逊相关系数 COR 比如 0.75,但是太主观;方差膨胀系数 VIF,如
果小于 10 就没有多重共线性,可以接受,反之是需要删除的。
3 单调性 bivar 图
4 稳定性
PSI 和跨时间交叉检验,变量的 PSI 越小越好,大于 0.25 的变量可以考虑删除。
1.28 数据预处理
1. 缺失值,填充缺失值 fillna:
i. 离散:None,
ii. 连续:均值。
iii. 缺失值太多,则直接去除该列
2. 连续值:离散化。
3. 对定量特征二值化。核心在于设定一个阈值,大于阈值的赋值为 1,小于等于阈值的赋值
为 0。
4. 皮尔逊相关系数,去除高度相关的列
1.29 什么是 auc?
ROC 曲线是以真正率为纵轴,假正率为横轴的一条曲线。ROC 曲线与横坐标之间的面积就是
我们 AUC 值。AUC 反应的是分类器对样本的排序能力
预测
1 0
1 TP 真正类 FN 假负类
真实
0 FP 假正类 TN 真负类
真正率=(真正类的数量)/(真正类的数量+假负类的数量)
假正率=(假正类的数量)/(假正类的数量+真负类的数量)
1.30 怎么处理数据不平衡问题
下探
半监督学习
标签分裂
代价敏感
采样算法
1.31 特征比数据量还大时,选择什么样的分类器
线性分类器,因为维度高的时候,数据一般在维度空间里面会比较稀疏,很有可能线性可分
1.32 逻辑回归的优缺点
优点:
1)速度快;2)简单易于理解,直接看到各个特征的权重;3)能容地更新模型吸收新的数
据;4)如果想要一个概率框架,动态调整分类阈值。
缺点:特征处理复杂。需要归一化和较多的特征工程。
1.33 说说常见的优化算法及其优缺点
1)随机梯度下降
优点:容易陷入局部最优解;缺点:收敛速度较快
2)批量梯度下降
优点:可以一定程度上解决局部最优解的问题;缺点:收敛速度较慢
3)牛顿法
优点是更精确;缺点是牛顿法在迭代的时候,需要计算海森矩阵,当维度较高的时候,计算
海森矩阵比较困难。
4)拟牛顿法
拟牛顿法是为了改进牛顿法在迭代过程中,采用的方式是通过逼近 Hessian 的方式来进行求
解。
1.34 RF 和 GBDT 之间的区别与联系
1)相同点:都是由多棵树组成,最终的结果都是由多棵树一起决定。
2)不同点:
a 组成随机森林的树可以分类树也可以是回归树,而 GBDT 只由回归树组成;
b 组成随机森林的树可以并行生成,而 GBDT 是串行生成
c 随机森林的结果是多数表决表决的,而 GBDT 则是多棵树累加之和
d 随机森林对异常值不敏感,而 GBDT 对异常值比较敏感
e 随机森林是减少模型的方差,而 GBDT 是减少模型的偏差
1.35 请具体说说 Boosting 和 Bagging 的区别
1)样本选择上:
Bagging 是有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权
值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
11

1.36 逻辑回归相关问题
逻辑回归用一句话概括就是,逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方
法,运用梯度下降来求解参数,来解决二分类的问题。
1 逻辑回归的损失函数
损失函数即它的极大似然函数
对似然函数取对数就转换为最常见的形式
2 逻辑回归的求解方法
由于对应的极大似然函数无法直接求解,常用的方法是使用梯度下降法来不断逼近最优解
3 逻辑回归是如何分类的 ?
逻辑回归通过 logistic 函数将一个范围不定的连续值映射到 (0, 1) 的区间内,然后划定一
个阈值,输出值大于这个阈值的是一类,小于这个阈值的是另一类。阈值会根据实际情况选
择,一般会选择 0.5。
1.37 逻辑回归的优缺点总结
优点:
1. 结构简单,可解释性强,从特征的权重可以看到不同特征对最后结果的影响。
2. 训练速度快,分类时,计算量只和特征数目相关,占用计算资源少。
3. 输出结果方便调整,结果都是概率值,可以很容易调整阈值实现分类。
4. 效果不错,只要特征工程做的好,效果就不会太差。
缺点:
1. 准确率不是太高,因为结构简单,很难拟合复杂数据的真实分布。
2. 很难处理数据不平衡的问题,如果正负样本的比例差距较大,模型区分能力不会很好。
3. 处理非线性数据比较麻烦,在不引入其他方法的情况下,只能处理线性可分的数据。
1.38 什么是共线性,跟过拟合有什么关联
共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。
共线性会造成冗余,导致过拟合。
解决方法:排除变量的相关性/加入权重正则。
1.39 机器学习中,有哪些数据预处理和特征选择的工程方法
1 数据预处理
1)无量纲化
①标准化②区间缩放法(归一化)
2) 对定量特征二值化
3)对定性特征哑编码
4)缺失值计算
12
5)数据变换
2 特征选择
1)Filter 过滤法
① 方差选择法② 相关系数法③卡方检验④互信息法
2)Embedded 嵌入法
3)Wrapper 递归特征消除法或者包装法
1.40 什么是偏差和方差
泛化误差可以分解成偏差的平方加上方差加上噪声。偏差度量了学习算法的期望预测和真实
结果的偏离程度,刻画了学习算法本身的拟合能力,方差度量了同样大小的训练集的变动所
导致的学习性能的变化,刻画了数据扰动所造成的影响,噪声表达了当前任务上任何学习算
法所能达到的期望泛化误差下界,刻画了问题本身的难度。偏差和方差一般称为 bias 和
variance,一般训练程度越强,偏差越小,方差越大,泛化误差一般在中间有一个最小值,
如果偏差较大,方差较小,此时一般称为欠拟合,而偏差较小,方差较大称为过拟合。
1.41 解决 bias 和 Variance 问题的方法是什么
高偏差, 可以用 boosting 模型, 对预测残差进行优化, 直接降低了偏差. 也可以用高模型容
量的复杂模型(比如非线性模型, 深度神经网络), 更多的特征, 来增加对样本的拟合度.
高方差, 一般使用平均值法, 比如 bagging, 或者模型简化/降维方法, 来降低方差.
1.42 决策树怎么给特征评分
cart 树通过 Gini 指数选择分离点的特征,一个特征被选中的次数越多,那么该特征评分越高。
1.43 请写出你了解的机器学习数据预处理
数据预处理
1.数据选择、清洗、采样
- 数据格式化;
- 数据清洗,填充缺失值、去掉脏数据,将不可信的样本丢掉,缺省值极多的字段考虑不用;
- 采样:针对正负样本不平衡的情况,当正样本远大于负样本时,且量都很大时,使用下采
样,量不大时,可采集更多的数据或 oversampling 或修改损失函数;采样过程中可利用分层
抽样保持不同类别数据的比例。
2.不同类型数据的特征处理
- 数值型:幅度调整/归一化、log 等变化、统计值(例如 max、min、mean、std)、离散化、
分桶等
- 类别型:one-hot 编码等
- 时间型: 提取出连续值的持续时间和间隔时间;提取出离散值的“年”、“月”、“日”、
“一年中哪个星期/季度”、“一周中的星期几”、“工作日/周末”等信息
- 文本型:使用 tf-idf 特征
- 统计型:加减平均、分位线、次序、比例
1.44 给你一个有 1000 列和 1 百万行的训练数据集。这个数据集是基于分类问题的。经理要
求你来降低该数据集的维度以及减少模型计算时间。你的机器内存有限。你会怎么做?
1.首先要关闭机器上正在运行的其他程序,比如网页浏览器。
2.我们可以随机采样数据集。这意味着,我们可以创建一个较小的数据集,比如有 1000 个
变量和 30 万行,然后做计算。
3.为了降低维度,我们可以把数值变量和分类变量分开,同时删掉相关联的变量。对于数值
变量,我们将使用相关性分析。对于分类变量,我们可以用卡方检验。
4.利用 Stochastic GradientDescent(随机梯度下降)法建立线性模型也很有帮助。
1.45 给你一个数据集,这个数据集有缺失值,且这些缺失值分布在离中值有 1 个标准偏差
的范围内。百分之多少的数据不会受到影响?为什么?
由于数据分布在中位数附近,让我们先假设这是一个正态分布。我们知道,在一个正态分布
中,约有 68%的数据位于跟平均数(或众数、中位数)1 个标准差范围内的,那样剩下的约
32%的数据是不受影响的。因此,约有 32%的数据将不受到缺失值的影响。
1.46 真阳性率和召回有什么关系?写出方程式
预测
1 0
1 TP 真正类 FN 假负类
真实
0 FP 假正类 TN 真负类
真正率=(真正类的数量)/(真正类的数量+假负类的数量)
假正率=(假正类的数量)/(假正类的数量+真负类的数量)
真阳性率=召回。是的,它们有相同的公式(TP / TP + FN)。
1.47 在分析了你的模型后,经理告诉你,你的模型有多重共线性。你会如何验证他说的是
真的?再不缺失任何信息的情况下,你能建立一个更好的模型吗?
要检查多重共线性,我们可以创建一个相关矩阵,用以识别和除去那些具有 75%以上相关
性(决定阈值是主观的)的变量。此外,我们可以计算 VIF(方差膨胀因子)来检查多重共
线性的存在。VIF 值<= 4 表明没有多重共线性,而值> = 10 意味着严重的多重共线性。
此外,我们还可以用容差作为多重共线性的指标。但是,删除相关的变量可能会导致信息的
丢失。为了留住这些变量,我们可以使用惩罚回归模型,如 Ridge 和 Lasso 回归。
1.47 什么时候 Ridge 回归优于 Lasso 回归
在对少量变量有中等或大尺度的影响的时候用 lasso 回归。在对多个变量只有小或中等尺度
影响的时候,使用 Ridge 回归。从概念上讲,我们可以说,Lasso 回归(L1)同时做变量选
择和参数收缩,而 ridge 回归只做参数收缩,并最终在模型中包含所有的系数。在有相关变
量时,ridge 回归可能是首选。此外,ridge 回归在用最小二乘估计有更高的偏差的情况下效
果最好。因此,选择合适的模型取决于我们的模型的目标。
1.48 如何在一个数据集上选择重要的变量?给出解释
1.选择重要的变量之前除去相关变量
2.用线性回归然后基于 P 值选择变量
3.使用前向选择,后向选择,逐步选择
4.使用随机森林和 Xgboost,然后画出变量重要性图
5.使用 lasso 回归
6.测量可用的特征集的的信息增益,并相应地选择前 n 个特征量。
1.49 Grandient boosting 算法(GBDT)和随机森林都是基于树的算法,它们有什么区别?
随机森林算法使用 bagging 技术做出预测。 GBDT 采用 boosting 技术做预测。在 bagging 技
术中,数据集用随机采样的方法被划分成使 n 个样本。然后,使用单一的学习算法,在所有
样本上建模。接着利用投票或者求平均来组合所得到的预测。Bagging 是平行进行的。而
boosting 是在第一轮的预测之后,算法将分类出错的预测加高权重,使得它们可以在后续一
轮中得到校正。这种给予分类出错的预测高权重的顺序过程持续进行,一直到达到停止标准
为止。随机森林通过减少方差(主要方式)提高模型的精度。生成树之间是不相关的,以把
方差的减少最大化。在另一方面,GBM 提高了精度,同时减少了模型的偏差和方差。
1.50 树模型是如何做分割的?
树模型就是输出空间的离散化以及映射的输出值
ID3 基于最大信息增益,C4.5 基于最大信息增益比,CART 基于基尼系数。
1.51 独热编码(OneHotEncoder)会增加数据集的维度,但是标签编码(LabelEncoder)不
会。为什么?
用独热编码(OneHotEncoder),数据集的维度(也即特征)增加是因为它为分类变量中存
在的的每一级都创建了一个变量。例如:假设我们有一个变量“颜色”。这变量有 3 个层级,
即红色、蓝色和绿色。
对“颜色”变量进行一位有效编码会生成含 0 和 1 值的 Color.Red,Color.Blue 和 Color.Green 三
个新变量。在标签编码中,分类变量的层级编码为 0,1 和 2,因此不生成新变量。标签编
码主要是用于二进制变量。
1.52 给你一个缺失值多余 30%的数据集?比方说,在 50 个变量中,有 8 个变量的缺失值多
余 30%。你对此如何处理。
1.把缺失值分成单独的一类,这些缺失值说不定会包含一些趋势信息。
2.我们可以毫无顾忌地删除它们。
3.可能值插补缺失值,均值众数中位数等等。
1.53 你怎么理解第一类和第二类错误?
第一类错误是当原假设为真时,我们拒绝了他,也被称为“假阳性”或者假正类。第二类错
误是当原假设为是假时,我们接受了它,也被称为“假阴性”或者假负类。
1.54 随机抽样分成训练集和验证集。但是得到的验证集精度很低,为什么?
在做分类问题时,我们应该使用分层抽样而不是随机抽样。随机抽样不考虑目标类别的比例。
相反,分层抽样有助于保持目标变量在所得分布样本中的分布。
1.55 在应用机器学习算法之前纠正和清理数据的步骤是什么?
1.将数据导入
2.看数据:重点看元数据,即对字段解释、数据来源等信息;导入数据后,提取部分数据进
行查看
3.缺失值清洗
15
- 根据需要对缺失值进行处理,可以删除数据或填充数据
- 重新取数:如果某些非常重要的字段缺失,需要和负责采集数据的人沟通,是否可以再获
得
4.数据格式清洗:统一数据的时间、日期、全半角等显示格式
5.逻辑错误的数据
- 重复的数据
- 不合理的值
6.不一致错误的处理:对矛盾内容的修正,最常见的如身份证号和出生年月日不对应
1.58 机器学习中的 L1 与 L2 范数到底是什么意思?
监督机器学习问题就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟
合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。所以,我们
需要保证模型“简单”的基础上最小化训练误差,这样得到的参数才具有好的泛化性能。
L1 范数是指向量中各个元素绝对值之和,可以做特征选择,有很好的解释性。
L2 范数也叫做岭回归,是指向量各元素的平方和然后求平方根。L2 范数可以防止过拟合,
提升模型的泛化能力。一句话总结就是:L1 会趋向于产生少量的特征,而其他的特征都是 0,
而 L2 会选择更多的特征,这些特征都会接近于 0。Lasso 在特征选择时候非常有用,而 Ridge
就只是一种规则化而已。
1.59 请详细说说决策树的构造原理
决策树是输出空间的离散化,以及离散化的映射输出值。
1.60 连续特征,既可以离散化,也可以做幅度缩放,那这两种处理方式分别适用于什么场
景?
幅度缩放一般在计算型模型里会用到,比如 LR DNN
离散化一般是线性模型会用到,比如 LR。
1.61 A/Btest 的数学原理与深入理解
A/B 测试便是基于数据来进行优选的常用方法
1.62 关于 xgboost 使用泰勒展开式的优点?泰勒展开取得函数做自变量的二阶导数形式,
可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优
化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 请问为什么在
可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优
化计算?
下图中,g 和 h 都是和损失函数有关的,所以不可能完全不考虑损失函数,这个表述是错误
的。
16
1.63 你有自己用过别的模型然后调参之类的吗?能说一下基本的调参流程吗?XGBoost 知
道吗,以 XGBoost 为例子说一下调参流程吧。
(个人的思路):一般来说采用贝叶斯优化或者遗传算法等启发式的优化算法确定相对最佳
参数(如果不熟悉的话用随机搜索也是可以的,或者网格搜索但是参数得到步长设置的很大,
一步一步确定相对最优参数的区间),然后再根据实际的模型在验证集上的表现做一些微调,
对于过拟合优先调整 max_depth 和树的数量,在实际使用过程中这两个参数对于模型的整
体效果影响很大很明显。对于欠拟合,反着来就行了。
1.64 XGBoost 和 GBDT 的区别有哪些?
(1)损失函数的二阶泰勒展开;
(2)引入了正则化;
1.65 XGB 的特征重要性程度怎么判断的?
total_gain 就是特征带来的总的分裂增益,也就是我们常规意义上的分裂总增益,weight,
被用来作为分裂节点的次数,也就是我们常规意义上的分裂总次数,gain=total_gain/weight,
计算的是每一次分裂带来的平均增益,total_cover 表示特征分裂的样本数,举个例子,假设
初始样本有 10000 个,第一次分裂的时候使用了特征 A,也就是特征 A 在这 10000 个样本上
分裂,则此时的 cover 值为 10000,假设根据特征 A 分裂出左枝的样本有 1000 个,右边有
9000 个,而在左枝特征 B 是最优特征根据这 1000 个样本进行分裂,则 B 当前的 cover 是 1000,
依次类推最后求和。而 cover 显然就是 total_cover/weight,也就是平均每次分裂所“负责”
的样本数。
1.66 XGB 的预排序算法是怎么做的?
将原始特征进行排序之后以块的形式保存到内存中,在块里面保存排序后的特征值及对应样
本的引用,以便于获取样本的一阶、二阶导数值,但意味着除了保存原始特征之外还要保存
原始特征的排序结果,耗内存。
1.67 RF 和 xgboost 哪个对异常点更敏感
xgb 明显敏感的多,当然对 rf 也是有一定影响的,rf 的每棵数的生成是独立的,异常点数量
不多的情况下异常点常常和正常样本中的某些样本合并在一个分支里。但是 xgb 不一样,异
常样本的 t-1 轮的预测值和真实标签计算出来的负梯度会一直很大。
17
1.68 xgb 何时停止分裂
人工设定的参数,max_depth,min_data_in_leaf 等等,这类通过超参数形式限制树的复杂度
的方法都会引发 xgb 的分裂的停止,也就是常说的预剪枝;人工不限制,自由生长的情况下,
当分裂增益小于 0 则基学习器停止分裂
1.69 对比一下 XGB 和 lightGBM 在节点分裂时候的区别
xgb 是 level-wise,lgb 是 leaf-wise,level-wise 指在树分裂的过程中,同一层的非叶子节点,
只要继续分裂能够产生正的增益就继续分裂下去,而 leaf-wise 更苛刻一点,同一层的非叶
子节点,仅仅选择分裂增益最大的叶子节点进行分裂。
1.70 简要说一下 Lightgbm 和 xgboost 的优缺点
优点:直方图算法—更高(效率)更快(速度)更低(内存占用)更泛化(分箱与之后的不
精确分割也起到了一定防止过拟合的作用);
缺点:直方图较为粗糙,会损失一定精度,但是在 gbm 的框架下,基学习器的精度损失可
以通过引入更多的 tree 来弥补。
1.71 xgboost 对特征缺失敏感吗,对缺失值做了什么操作,存在什么问题
不敏感,可以自动处理,处理方式是将 missing 值分别加入左节点 右节点取分裂增益最大的
节点将 missing 样本分裂进这个节点 。这种处理方式的问题在 xgboost 仅仅在特征的非缺失
的值上进行分裂然后 missing 值直接放入其中一个节点,显然当缺失值很多的情况下,比如
缺失 80%,那么 xgb 分裂的时候仅仅在 20%的特征值上分裂,这是非常容易过拟合的。
1.72 xgb 和 lgb 在特征、数据并行上存在什么差异?
1)特征并行
xgb 的特征并行与 lgbm 的最大不同在于 xgb 每个 worker 节点中仅有部分的列数据,也就是
垂直切分,每个 worker 寻找局部最佳切分点,worker 之间相互通信,然后在具有最佳切分
点的 worker 上进行节点分裂,再由这个节点广播一下被切分到左右节点的样本索引号,其
他 worker 才能开始分裂。二者的区别就导致了 lgbm 中 worker 间通信成本明显降低,只需
通信一个特征分裂点即可,而 xgb 中要广播样本索引。
2)数据并行
当数据量很大,特征相对较少时,可采用数据并行策略。lgbm 中先对数据水平切分,每个
worker 上的数据先建立起局部的直方图,然后合并成全局的直方图,采用直方图相减的方
式,先计算样本量少的节点的样本索引,然后直接相减得到另一子节点的样本索引,这个直
方图算法使得 worker 间的通信成本降低一倍,因为只用通信以此样本量少的节点。xgb 中的
数据并行也是水平切分,然后单个 worker 建立局部直方图,再合并为全局,不同在于根据
全局直方图进行各个 worker 上的节点分裂时会单独计算子节点的样本索引,因此效率贼慢,
每个 worker 间的通信量也就变得很大。
1.73 为什么 xgboost 不用后剪枝?
后剪枝计算代价太高了,合并一次叶节点就要计算一次测试集的表现,数据量大的情况下非
常消耗时间,而且也并不是特别必要,因为这样很容易过拟合测试集。
1.74 请问(决策树、RF、Boosting、Adaboost)GBDT 和 XGBoost 的区别是什么?
18
集成学习的集成对象是学习器. Bagging 和 Boosting 属于集成学习的两类方法. Bagging 方
法有放回地采样同数量样本训练每个学习器, 然后再一起集成(简单投票); Boosting 方法使用
全部样本(可调权重)依次训练每个学习器, 迭代集成(平滑加权).
决策树属于最常用的学习器, 其学习过程是从根建立树, 也就是如何决策叶子节点分裂.
ID3/C4.5 决策树用信息熵计算最优分裂, CART 决策树用基尼指数计算最优分裂, xgboost 决策
树使用二阶泰勒展开系数计算最优分裂.
下面所提到的学习器都是决策树:
1 Bagging 方法: 学习器间不存在强依赖关系, 学习器可并行训练生成, 集成方式一般为投
票;Random Forest 属于 Bagging 的代表, 放回抽样, 每个学习器随机选择部分特征去优化;
2 Boosting 方法: 学习器之间存在强依赖关系、必须串行生成, 集成方式为加权和;Adaboost
属于 Boosting, 采用指数损失函数替代原本分类任务的 0/1 损失函数;GBDT 属于 Boosting 的
优秀代表, 对函数残差近似值进行梯度下降, 用 CART 回归树做学习器, 集成为回归模
型;xgboost 属于 Boosting 的集大成者, 对函数残差近似值进行梯度下降, 迭代时利用了二阶
梯度信息, 集成模型可分类也可回归. 由于它可在特征粒度上并行计算, 结构风险和工程实
现都做了很多优化, 泛化, 性能和扩展性都比 GBDT 要好。
19
二、金融风控面试(60 题)
2.1 芝麻信用分的主要计算维度?
主要维度
1)个人属性:职业类型、学历学籍等
2)稳定性:手机稳定性、地址稳定性、账户活跃时长等
3)资产状况:账户资产、有无住房、有无车辆
4)消费能力:消费金额、消费层次、消费场景丰富度
5)社交情况:人脉圈信用度、社交广度、社交深度
6)信用历史情况:信用历史时长、信用履约记录数、信用履约场景、公共事业缴费记录
7)违约历史情况:违约场景数
2.2 有什么好的模型调参的方法么?网格搜索?贝叶斯优化?
跨时间验证 ks 够大.
跨时间验证 ks 与训练集 ks 尽量小
用数学方式来表示的话就是:
Max(offks) & Min(abs(devks - offks))
用公式来表示的话我们的优化目标就可以写成
Argmax(offks - abs(devks - offks) * w )
offks + (offks - devks) * 0.8 最大化。这个 0.8 自己来调整,看你是希望跨时间验证集上的 KS
更高,还是希望模型更稳定。
然后模型内部的参数搜索建议贝叶斯优化,推荐原因是因为快一点。精度其实差别不大。然
后精细化调参,一般都是千分位上的提升。
2.3 为什么我们做评分卡的时候要用 woe 编码,而不是用别的编码方式呢?比如 onehot 之
类的,仅仅是因为 woe 可以把特征从非线性变成线性的吗?
因为 onehot 后高维稀疏,模型学习是有困难的。一般模型会做 embedding,但是做了
embedding 就不可解释了。 所以用 woe 来代替。
使用 woe 编码通常有以下优点:
1、更好的解释性,变量离散化之后可将每个箱体映射到 woe 值,而不是通常做 one-hot 转
换。
2、woe 化之后可以计算每个变量的 IV 值,可用来筛选变量。
3、对离散型变量,woe 可以观察各个 level 间的跳转对 odds 的提升是否呈线性。
4、对连续型变量,woe 和 IV 值为分箱的合理性提供了一定的依据,也可分析变量在业务上
的可解释性。
5、用 woe 编码可以处理缺失值问题。
2.4 过采样怎么做效果才会好?
数据集清洗了嘛,还有特征呈线性了嘛,这两个不满足过采样很难保证效果的,通常 xgboost
不保证线性也行,但是要用 smote 最好做一下。
2.5 深度学习的风控模型,从经验上看,样本量大概要多少条啊
不同的模型不一样,而且也不光要注意样本量,比如 RNN 其实希望序列长度至少在 12 个月
以上,粗略的说,样本量五十万以上效果比较好
20
2.6 5 万正样本,200 负样本,B 卡,不只是提高额度,会拒绝一部分客户,怎么建模?
5 万正样本是没有做下采样的必要的,200 负样本无论用什么方法做过采样说实话由于自身
携带的信息量比较少,学习的应该也不是完全的。所以这时候建议先略作改动,评价函数加
一项,负样本的召回率,也就是说这时候不是主要关注 KS,而是对负样本究竟能抓到多少。
然后负样本学习的时候一定要加权,权重就按照 sklearn 中逻辑回归默认的 balanced 方法就
ok,而且如果是我可能生成一个决策树,把坏账从 0.4%下降到 0.12%左右我觉得就蛮好的了
2.7 对短信打标签,也就是判断出短信属于的标签是哪一类,这样一个任务是提取文本关键
词的任务吧?
我建议先确定每个词对每个类别的贡献度。简单来做就是每种类别找几个词,手动划分一下
有这个词,就属于这个类别。复杂一点来做,就训练个模型,确定每个词对每种类别的贡献
度,然后对每条记录做个预测,排名前几的标签都给他。
2.8 为什么说准入规则,pre-A, 反欺诈规则反欺诈引擎,还有风控模型,一般都不会选用相
同的特征?因为客户群体会越来越少么
基本上每个机器学习模型或多或少都会遇到我们这种问题。我们一般是不会用相同的特征做
重复筛选的。这样会导致样本偏移更严重。就是说,被拒绝的人,是由于某些特征表现差,
被拒绝的,那随着时间推移,下次建模的样本里面,就没有这些人了...这些这些特征上的样
本分布就变了。
2.9 在 ks 上训练集和测试集相差不大,但在 auc 上却相差较大,这是为啥?
下图中两条红线分别表示训练集和测试集 KS 的差距,看起来两者是差不多的,曲线下的面
积表示的是两者的 AUC 值,很明显两者的 AUC 差的就很多了,由于 ks 值能找出模型中差异
最大的一个分段,因此适合用于 cut_off,像评分卡这种就很适合用 ks 值来评估。但是 ks 值
只能反映出哪个分段是区分最大的,而不能总体反映出所有分段的效果,因此 AUC 值更能
看出总体的效果。
2.10 在 xgboost 或者 lightgbm 建模之前是否进行相关性处理,去掉相关性较
高的变量?
需要
21
lr 中我们是为了对向量空间描述的最好。
在 xgb 主要是想去掉相互替代性较强的特征。比如一个特征给他找相关性特别强的 9 个特征
放在模型里面,存成不同的名字,你会发现他本来重要性是 10,每划分一次,一个特征就
比另一个好用那么一点,这么弄了之后十个特征的重要性都变成了 1,然后被我们用
feature_importance>5 给筛掉了......这多尴尬。
太多共线性特征的存在确实会使得模型的泛化性能下降,当然,这里指的是“过多”,如果是
很少量共线性特征存在其实对于模型影响很轻微,但是如果存在大量共线性特征,尤其是比
赛的时候暴力的特征衍生,会产生相当多相关性很高的特征,从而导致 gbdt 在训练的过程
中重复采样相关性很高的特征,使得模型的效果变差,具体可见 kaggle_ieee 的 kris 分享的
方案,通过删除大量冗余的 V 特征,local cv 上升了千五,b 榜上涨千 4(事后分别测试的)。
2.11 请简单说下金融风控的架构知识?
见思维导图
2.12 xgb 变量重要性用哪一个指标?
22
1、通常我会直接用 weight,他们筛选出的变量略有区别,但是使用下来区别主要在于重要
性最低的那几个可以互相替代的特征,具体用谁其实并不重要。经验告诉我们 total_gain 效
果可能会略好。
2、xgb 筛选特征,然后用新的特征建模,但是通常不建议筛选后还用 xgb 建模,这不符合
模型融合的策略。
3、xgb 其实是没法解释的,如果希望有逻辑回归的可解释度,建议相同数据、相同变量,
带入 lr 建立一个陪跑的模型,寻求解释的时候去 lr 中找原因。特征相同的前提下,不会有
太大出入的。
4、xgb 筛选特征可以理解为用均方差最小来做特征筛选,和 IV、WOE 属于同一种筛选方式,,
描述的都是特征对分类任务的贡献度,一般用一个就行了,每个人的方法都不一样,见仁见
智。
2.13 金融风控中如何标记客户好坏的?
可以说迁徙率,也可以说逾期天数作为标记好坏的依据,因为本身样本不均衡,会偏向扩充
坏人的数量(比如以 pd1 来标记好坏,坏人肯定比 pd15 会多很多),注意很多公司建模的
时候,去除一部分灰色客户(比如去掉 pd1~pd5 的客户)
2.14 连续型特征的 badrate 呈 U 型,怎么转化为单调?
将特征值转化成中值差值的绝对值,这样就可以使该特征的 badrate 呈现单调递减的趋势。
2.15 金融风控领域中的 bivar 图是怎样的?
横轴为特征升序,纵轴为 badrate 的变化趋势。
2.16 分箱后,各箱 badrate 单调递增从业务上怎么理解呀?
我们有个先验知识,多头越多 badrate 越大,历史逾期越多 badrate 越大...等等,如果变量
分箱后不符合这个先验,可能就把他剃掉了。
bad rate 要求单调性的原因分析:
1. 逻辑回归模型本身不要求特征对目标变量的单调性。之所以要求分箱后单调,主要是从
业务角度考虑,解释、使用起来方便一点。如果有某个(分箱后的)特征对目标变量不单调,
会加剧模型解释型的复杂化
2. 对于像年龄这种特征,其对目标变量往往是一个 U 型或倒 U 型的分布,有些公司是允许
变量的 bad rate 呈(倒)U 型的。
2.17 请问回归决策树针对离散变量使用,是否先转成 one-hot?否则 1)如果是没转码的字
符变量,直接报错;2)如果转成数值,就会把我们的编码,当做连续变量进行回归处理?
正常是要做 onehot,但是特征高纬稀疏,还需要做 embedding,这样就没有解释性了,所以
个人建议可以做 WOE,或者按照每个取值的 badrate 做一个排序然后 labelencoder
2.18 在进行特征筛选时,A 和 B 相关性强,B 和 C 相关性强,这种情况去除哪个变量?
去掉 VIF 最大的或者重要性最低的。
2.19 实际分箱过程中如果用等频分箱,怎么使得每箱都有好坏样本,保证后面计算 WOE
有意义?
等频分箱之后,每一箱坏样本占比不同才有趋势呀,主要还是看趋势,也就是说等频分箱后,
23
要在根据好坏样本占比来合并初始的分箱,手动合并的话一般保持单调趋势就行了,自动的
话,可以考虑把相邻两箱 IV 值的差,小于某个阈值则合并为一箱
2.20 分箱法的主要目的?
由于分箱方法考虑相邻的值,因此是一种局部平滑方法。分箱的主要目的是去噪,将连续数
据离散化后,特征会更稳定。
一般在建立分类模型时,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模
型过拟合的风险。比如在建立申请评分卡模型时用 logsitic 作为基模型就需要对连续变量进
行离散化,离散化通常采用分箱法。离散特征的增加和减少都很容易,易于模型的快速迭代;
稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30 是 1,否则 0。如果
特征没有离散化,一个异常数据“年龄 300 岁”会给模型造成很大的干扰;
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为 N 个后,每个变量有单独的
权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
离散化后可以进行特征交叉,由 M+N 个变量变为 M*N 个变量,进一步引入非线性,提升表
达能力;
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30 作为一个区间,不会因
为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相
反,所以怎么划分区间是门学问;
2.21 模型的 ks 和 auc 有多少可以上线了?一般训练集和测试集之间的 ks 和 auc 相差多少算
是比较合理的呢?
KS 至少 20%,不然和瞎猜没啥区别。业内都认为训练集和测试集之间的 KS 相差 5 个百分点
以内才算没有明显过拟合。
2.22 简单描述一下风控建模的流程?
1 前期准备工作:不同的模型针对不同的业务场景,在建模项目开始前需要对业务的逻辑和
需求有清晰的理解,明确好模型的作用,项目周期时间和安排进度,以及模型效果的要求。
2 模型设计:包括模型的选择(评分卡还是集成模型),单个模型还是做模型的细分,是否
需要做拒绝推论,观察期,表现期的定义,好坏用户的定义,数据的获取途径等都要确定好。
3 数据拉取及清洗:根据观察期和表现期的定义从数据池中取数,并进行前期的数据清洗和
稳定性验证工作,数据清洗包括用户唯一性检查,缺失值检查,异常值检查等。稳定性验证
主要考察变量在时间序列上的稳定性,衡量的指标有 PSI,平均值/方差,IV 等。
4 特征工程:主要做特征的预处理和筛选,如果是评分卡,需要对特征进行离散化,归一化
等处理,再对特征进行降维,降维的方法有 IV 筛选,相关性筛选,显著性筛选等。另外会
基于对业务的深入理解做特征构造工作,包括特征交叉,特征转换,对特征进行四则运算等。
5 模型建立和评估:选择合适的模型,像评分卡用逻辑回归,只需要做出二分类预测可以选
择 xgboost 等集成模型,模型建好后需要做模型评估,计算 AUC,KS,并对模型做交叉验证来
评估泛化能力及模型的稳定性。
6 模型上线部署:在风控后台上配置模型规则,对于一些复杂的模型还得需要将模型文件进
行转换,并封装成一个类,用 Java 等其他形式来调用。
7 模型监控:前期主要监控模型整体及变量的稳定性,衡量标准主要是 PSI,并每日观察模
型规则的拒绝率与线下的差异。后期积累一定线上用户后可评估线上模型的 AUC,KS,与线
下进行比较,衡量模型的线上的实际效果。
24
2.23 feature_importance 和 iv 有时候选出的变量差别很大,该以哪个为准,怎么判别 ?
个人感觉 IV 和目标函数的关系更大,但是一般用 IV 做初筛,iv 很低,不用进模型,但是 IV
是单个变量的作用,而 feature_importance 有一个特征组合效应在里面。我个人是这么理解
的。所以按理也可以推出,不一定是选 IV 最高的变量组合在一起就一定能够 ks 最高,而是
特征组合在一起综合效应最高的才是 KS 能够达到最高的。
2.25 为什么要做拒绝推断?常用的拒绝推断方法有哪些?
拒绝推断的目的:如果只用好坏用户建模,则忽略了那些授信被拒的用户,加入拒绝用户是
为了让建模样本更接近总体的分布,防止样本有偏,同时也能增加样本数量。公司内部策略
的变动,导致当前的申请者已不能代表建模时点的申请者,所以过去被拒的用户不一定现在
也会被拒绝,因此,只使用审批通过的用户可能会造成误判。做拒绝推断可以找出之前被拒
的好用户,挖掘这些用户,改善风控流程,增加公司收益。
拒绝推断的常用方法:硬性截断法:先用好坏用户建立初始模型,然后用这个初始模型对拒
绝用户进行打分,设定一个阈值分数,低于这个阈值的为坏用户,高于这个阈值的为好用户。
再将已标记好的拒绝用户放入样本中,重新建立模型。分配法:此方法适用于评分卡,先用
好坏用户建立初始评分卡模型,再将样本跟据评分高低进行分组,计算各分组的违约率。然
后对拒绝用户进行打分并按此前的步骤进行分组,以各分组的违约率为抽样比例,随机抽取
改分组下的违约用户,指定其为坏用户,剩下的则是好用户。最后将已标记的拒绝用户加入
样本中,重新建立模型。
平常工作中主要用到以上两种方法,个人建议做申请模型最好做一下拒绝推断,这样模型上
线后的得分分布和拒绝率和线下才不会有很大的差异。
2.26 我 lgb 在不平衡分类上训练了一个模型,训练集上输出概率分布呈偏态分布(偏向 0,
好样本),但在测试集上呈近似正态分布。如果设置 scale_pos_weight 参数,会产生这种情
况,如果不设置,测试集上的概率分布还是和训练集类似这种现象正常吗?
正常吧,scala pos weight 相当于改变了训练集的标签分布,不过我理解,输出概率分布不一
样,对排序模型没有影响吧~,只不过和别的模型的分数不能直接比较。
scale_pos_weight 是用来调节正负样本不均衡问题的,用助于样本不平衡时训练的收敛。
如果你仅仅关注预测问题的排序或者 AUC 指标,那么你尽管可以调节此参数。如果你希望
得到真正的预测概率则不能够通过此参数来平衡样本。什么意思呢,让我们来举个例子:加
入我们现在需要通过体重来预测男女,有三个人体重分别为 50kg、60kg、70kg。假设他们
是男生的真正概率是:0.4、0.6、0.8。那么好,我现在模型预测出的概率为:0.7、0.8、0.9。
如果讲预测概率的话,显然模型效果很差,但是我们预测的男生概率的排序以及 ROC 曲线
(包括对应 AUC 值)都不会改变。
2.27 下探一般要选多少样本进行下探?下探的样本评分很低,但选取哪些呢?
按照期望得到的坏客户量进行选择。不知道下探后会收获多少坏样本对不对?上一次模型迭
代时候的测试集模拟就派上用场了。用那个百分比作为下探区间的预期百分比,然后去算吧。
2.28 现在市面上在金融风控中用的无监督算法都有哪些?
主要是基于图的离群检测和聚类,其次还有孤立森林,LOF 这种,还有通过聚类进行特征衍
生
25
2.29 针对新场景下样本量较少的情况,通常采用什么方法?
可以迁移的历史样本或者其他场景样本用来做迁移。无标签样本丢进来做半监督。
风控模型的冷启动是指产品刚上线时,没有积累的用户数据,或者用户还没有表现出好坏,
此时需要做模型就是一个棘手的问题,常用的方法如下:
不做模型,只做规则。凭借自己的业务经验,做一些硬性规则,比如设定用户的准入门槛,
考量用户的信用历史和多头风险,而且可以接入第三方提供的反欺诈服务和数据产品的规
则。另外可以结合人审来对用户的申请资料做风险评估。借助相同模式产品的数据来建模。
如果两个产品的获客渠道,风控逻辑,用户特征都差不多的话,可以选择之前已上线那个产
品所积累的用户来建模,不过在模型上线后需要比较线上用户的特征是否与建模用户有较大
的差异,如果差异较大,需要对模型对一些调整。
无监督模型+评分卡。这种方法适用于产品上线一段时间后,表现出好坏的用户比较少,但
需要做一个模型出来,此时可用线上的申请用户做无监督模型,找出一部分坏样本和好样本,
用这些数据来做评分卡模型,当然这种模型准确性是存疑的,需要后续对模型不断迭代优化。
2.30 使用 BiLSTM 对用户行为进行建模时,神经网络的输入层是什么?输出层是什么?怎
么把用户行为数据转换成神经网络输入层的向量?
打个比方啊,额度使用率按照月份的时间序列就是,前 0-30 天的额度使用率,前 30-60 的
额度使用率,前 60-90 的额度使用率...变成一个列向量。有多少特征(额度使用率是一个特
征)就有多少个列向量。然后输入层就是这些列向量,输出层一般就是用户的标签。最终可
以把输出的 score 丢进逻辑回归,或者把中间测参数拿出来也可以。
2.31 请问欺诈标签如何定义?
反欺诈的千古难题。现在使用的方法:外部黑名单,客服的反馈,明显坏的行为(例如贷款
逾期 M3+。通讯录造假) ,根据已有标签进行染色,负样本上聚类(已有标签明显多的一
类)
2.32 无监督与 xgboost 结合的反欺诈模型该如何做?
首先聚类,得到每一个簇的聚类中心,然后取出所有的聚类中心,对这些点进行异常值检测
(本质是在对簇做异常簇检测)。比如说放进孤立森林中,得到异常值作为整个簇的异常值,
带入 xgboost 进行训练。
2.33 小微正常做反欺诈,主要考虑哪些?
信用风险,行业情况。挺多的,发票流水进项,销项 的金额 、频次,和时间以及传统统计
指标 做笛卡尔乘积,还有行业指标,区域指标,企业间销售关系,专票循环网络造假骗贷
啥的。
2.34 模型上线后监控哪些指标?
主要是指标的变化趋势而不是绝对值。比如:模型 PSI、特征 PSI、分数分布、KS 变化曲线
等等。因为 KS 值这种指标,线上模型通过率越低,KS 值就会越低,具体的值监控起来没有
太大的意义。关注的是趋势。
2.35 在模型训练过程中,用 off(oot)来调参和特征筛选是不是在作弊?
理论上 off 是不允许参与建模过程的,为什么我们要做到建模过程中去。是因为,实际建模
的时候,如果 off 表现不好,我们最终还是得去动用 off,这个是一个很常见的现象。也属于
26
业务需求。所以干脆放进了标准化流程里面。如果体量比较大的话,我们最后还会有一个
off2,就是建模期间产生的新样本,这个通常会作为效验,不要也 ok。总的来说,问题所述
是指导思想,我们做的是结合实际经验的一种落地方法。
2.36 挑选样本时,灰样本不参与模型训练吗?
实际做的时候确实去掉了,不然 dev 和 off 上的 ks 有差异,我们不知道是由什么引起的,事
实上线效果会比预期的差一点 。
在某些条件下的客户,其风险处于较为模糊的灰色地带,很难将其归类为好客户或坏客户。
比如, “半年内曾出现一次 M1”, 由于此类客户并无鲜明的风险特征, 很难判断其好
坏。 因此, 为强化模型的区隔能力, 不确定的客户不适合被纳入建模样本之中。 不过在
模型完成后可加入测试, 观察其分数落点, 理论上应以中等分数居多。
2.37 业务中可能遇到的问题及业务所需要的变量?
在业务中的模型会遇到什么问题。
- 模型效果不好
- 训练集效果好,跨时间测试效果不好
- 跨时间测试效果也好,上线之后效果不好
- 上线之后效果还好,几周之后分数分布开始下滑
- 一两个月内都比较稳定,突然分数分布骤降
- 没有明显问题,但模型每个月逐步失效
然后我们来考虑一下业务所需要的变量是什么。
- 变量必须对模型有贡献,也就是说必须能对客群加以区分
- 逻辑回归要求变量之间线性无关
- 逻辑回归评分卡也希望变量呈现单调趋势 (有一部分也是业务原因,但从模型角度来看,
单调变量未必一定比有转折的变量好)
- 客群在每个变量上的分布稳定,分布迁移无可避免,但不能波动太大
2.38 对于成千上万维的特征你是怎么做特征筛选的,如何保证其模型的可解释性和稳定
性?
对于高维稀疏特征,逻辑回归的效果要比 GBDT 好,GBDT 对于高维稀疏特征很容易过
拟合。平时工作中如果用的是逻辑回归评分卡,则可以对稀疏特征进行离散化,离散成值为
0 或不为 0,再用 woe 进行编码。而如果使用 xgboost 等集成模型,最好还是不要用高维的
稀疏特征。在大数据风控中弱特征的种类很多,包括社交,通话,位置等信息,而且建模时
弱特征会多达数百个。如果是用评分卡建模,弱特征一般会被舍弃掉,因为评分卡的入模特
征数不宜过多,一般在 15 个以下,所以要找寻比较强的特征。而对于 xgboost 等模型,本
身对数据的要求不是很高,并且精度好,一些弱特征进行交叉组合或许能给模型带来不错的
效果。
2.39 如何根据风险因素对用户分层,构建客群差异化的模型?
做客群差异化模型之前最好做一下用户画像,便于后续的数据挖掘。对不同类型的用户,
做针对性的风控规则和风控模型。
平常工作中的做法:对用户做静态属性的划分,比如按性别,年龄,收入,职业等。例如刚
毕业工作的年轻人和收入比较稳定的中年人,他们的借款需求,风险程度就不一样,可以先
27
对用户群体做这样的划分,再对每个群体单独建立模型。根据用户风险属性做差异化模型,
例如对手机分期业务做一个套现风险模型,挖掘套现风险属性,目标变量变成是否为套现用
户。
2.40 对于评分卡模型,是先特征选择还是先对特征进行分箱处理?对于单特征非常多的情
况下,分箱的效果也不太好,我就考虑是不是先对特征进行选择再处理呢?
是这样的,分箱是单特征之间进行的,和特征多少是否筛选没有关系。分箱的时候首先考虑
用什么算法。lr 必须做分箱,不然鲁棒性会很差。xgboost 做了,稳定性上升,准确度下降,
有舍有得。lightgbm 绝对不要做,直方图算法加上分箱对性能影响比较大。然后分箱分两种
情况,一种是对连续变量做分箱,一种是将字符变量做合并。前期粗分箱通过等频和 IV(卡
方)进行划分。后期通常根据 bivar 图来确定。个人建议,类别变量统一做 woe 处理。省心
效果还好。
2.41 风控流程中不同环节的评分卡是怎么设计的?
申请评分 A 卡用在贷前审核阶段,主要的作用是决定用户是否准入和对用户进行风险定价
(确定额度和利率),用到的数据是用户以往的信用历史,多头借贷,消费记录等信息,并
且做 A 卡一般需要做拒绝推断。
A 卡一般预测用户的首笔借款是否逾期,或者预测一段时间内是否会逾期,设计的方式也多
种多样,有风险差异化评分卡,群体差异化评分卡,或者做交叉评分卡等。
行为 B 卡主要用在借贷周期较长的产品上,例如手机分期。作用一是防控贷中风险,二是对
用户的额度做一个调整。用到的数据主要是用户在本平台的登录,浏览,消费行为数据,还
有借还款,逾期等借贷表现数据。
催收 C 卡主要是对逾期用户做一个画像分析,通过深度挖掘用户特征,对逾期用户进行分群,
做智能催收策略等。
2.42 现在做 xgb 模型还需要分箱编码嘛?
xgb 有些做的,比如城市这个变量取值比较多,用 woe 指定一下分箱,牺牲一些精度来增强
鲁棒性。
2.43 lr 那种模型里变量分箱编码以后都是单调齐次的了,陪跑的 xgboost 模型也需要分箱编
码吗?
正常是这样的,我之前做过一家是 线上 xgb,线下 lr,解释性的问题用线下的 lr 来说明,
所以要在 xgb 前面做 bivar,为了保证 xgb 和 lr 的变量完全一致的。
2.44 怎么更新评分卡或模型,比如通过决策规则获得数据构建评分卡或模型,上线一段时
间之后,想更新模型,该用怎么建模?
refit 是指在原有模型的基础上对变量重新进行系数拟合或变量调整
rebuild 是指当前的模型对好坏客户的区分能力明显下降,且无法通过拟合系数或调整变量
来提高模型的区分度,需开发新模型
什么时候进行 refit ?
1)模型区分度下降明显但变量相对比较稳定,重新拟合系数,提高区分度
2)客群发生变化, 变量变得不稳定 ,理论上变量 PSI>5%,变量已不可用,考虑删除并重
新拟合变量系数
refit 步骤:
28
- 准备数据集
- 跑 model_report
- 调整模型变量及系数
- 修改 onekey、分数映射
- 评估上线
什么时候进行 rebuild ?
模型区分度下降, 无法通过 refit 方法调整模型时,考虑开发新模型
2.45 额度,利率的风险定价模型是如何设计的?
首先做风险定价模型需要熟悉产品的属性和特点,像小额现金贷和大额分期贷两种产品的额
度定价逻辑就不同。另外也要了解产品的盈利模式和预期的利润,这点需要与业务部门做好
沟通,通常关于额度,利率也是业务或者产品制定的。
风险定价模型一般采用评分卡模型,最后设定 cutoff 点后对通过的用户进行风险等级划分,
对于风险高的用户给的额度较低,或者利率较高。一般来说中低额度的用户占大部分,高额
度用户占小部分,最后可以得出一个平均额度或利率,这个值事先可以根据预期的利润/资
损来计算。
2.46 对于信贷评分卡模型 数据量一般在多少范围比较合适?
首先合适的样本量和预计入模特征数量有关系,模糊的说,可能是 5000 一档,5 万一档,
50 万一档。5000 档以下模型不稳定,负样本通常非常少。5000-5 万档模型逐步稳固,特征
通常不超过样本的百分之一,lr 相应的要用更少的特征。5 万到 50 万感觉提升不明显,更
多的是对正样本做下采样,进行均衡学习。50 万以上深度学习效果突出。
2.47 我们的模型基本上都是基于样本不均衡的数据的,那么问题就来了,特征工程里不做
采样处理的话,样本是极不均衡的,那么做出来的模型有的时候也会失真。如果做采样的
话,那么虽然模型有保证了,但是训练模型的好坏分布并不符合线上的实际好坏分布。这
个问题怎么解决呢?
我们是把采样权重记录下来,不参与模型训练,只作为计算 KS 和最终模型模拟时候的权重。
然后测试集是没有做采样变换的,所以直接就是真实的
2.48 那么 ks 指标计算,会考虑这个权重吗,还是继续使用采样过后的?
训练过程里面,训练集我是没有考虑还原的,只是最终报告里面还原成真实的了
2.49 最近面试数据分析师岗位,和算法岗有什么不一样么?数据敏感问题?
区别是分析师是业务+报表+算法,工程师是业务+算法+工程。数据敏感是玄学,关键要知道
数据怎么分析,数据要对比着分析,随便拿出一个值就知道这个值是什么水平还是比较困难
的。比如我们分析模型表现,分析变量稳定性。不是给出一个月份的分布我们就知道模型好
不好,而是要两个月作对比才知道。
2.50 你们公司的主要业务是什么?
属于什么类型的贷款产品(现金贷、消费分期等等)客户一般来自什么渠道,是特定的群体
(比如滴水贷只借给滴滴平台的司机),还是面向所有人的(比如常规的 p2p 公司)贷款
额度、还款周期
29
2.51 面试问你们的业务做得怎么样?
通过率是多少 pd0、pd7、pd30 大概是多少
注意:这些都反应了你的模型做的如何,通过率越高,逾期率越低,模型越好。
ps:pd0 指的是到期当天,pd1 指的是逾期一天。
2.52 金融风控业务中特征筛选的作用和目的?筛选的特征需要满足什么要求?
作用和目的:
简化模型,增加模型的可解释性, 降低模型过拟合的风险。
缩短模型的训练时间。
避免维度灾难。
筛选特征满足的要求:
具有良好的区分能力。
可解释性好,与目标变量的关系在业务上能解释的通。
在时间序列上有比较好的稳定性。
特征的用户覆盖率符合要求。
2.53 讲一讲你模型是怎么做的?
确定 y 如何标记(逾期几天为 1,几天为 0,每种产品不一样,15 天为分割点,没什么大问
题)
前期数据准备(数据来自 HIVE?MySQL?MongoDB?Spark?)
这里就可以接上学过的风控项目包括各种算法,建模技巧,基本上都是这里引出的。
2.54 问模型的效果怎么样?简单介绍一下风控模型常用的评估指标。
测试集和跨时间验证集的 KS 和 AUC 是多少上线后一个月或者几个月后,模型的 KS 是多少,
AUC 是多少
混淆矩阵指标:精准率(查准率),查全率(召回率,真正率),假正率。当模型最后转化
为规则时,一般用这三个指标来衡量规则的有效性。要么注重精准率,要么注重召回率,两
者不可兼而得之。
2.55 什么是 AUC、ks 和基尼系数
ROC 曲线和 AUC 值,ROC 曲线,具体方法是在不同阈值下以真正率作为纵轴,假正率
作为横轴绘制出一条曲线。曲线越靠近左上角,意味着越多的正例优先于负例,模型的整体
表现也就越好。AUC 是 ROC 曲线下面的面积,AUC 可以解读为从所有正例中随机选取一个
样本 A,再从所有负例中随机选取一个样本 B,分类器将 A 判为正例的概率比将 B 判为正例
的概率大的可能性。在对角线(随机线)左边的点上 TPR 总大于 FPR,意为正例被判为正例
的概率大于负例被判为正例的概率。从另一个角度看,由于画 ROC 曲线时都是先将所有样
本按分类器的预测概率排序,所以 AUC 反映的是分类器对样本的排序能力。AUC 越大,自
然排序能力越好,即分类器将越多的正例排在负例之前。
KS:用于区分预测正负样本分隔程度的评价指标,KS 越大,表示模型能将好坏样本区
分开的程度越大。KS 的绘制方法是先将每个样本的预测结果化为概率或者分数,将最低分
到最高分进行排序做样本划分,横轴就是样本的累计占比,纵轴则是好坏用户的累计占比分
30
布曲线,KS 值为两个分布的最大差值。KS 值仅能代表模型的区隔能力,KS 不是越高越好,
KS 如果过高,说明好坏样本分的过于开了,这样整体分数就是比较极端化的分布状态,这
样的结果基本不能用。
基尼系数:其横轴是根据分数(概率)由高到低累计的好用户占总的好用户的比例,纵
轴是分数(概率)从高到低坏用户占总的坏用户的比例。由于分数高者为低风险用户,所以
累计坏用户比例的增长速度会低于累计好用户比例,因此,基尼曲线会呈现向下弯曲的形式,
向下突出的半月形的面积除以下方三角形的面积即是基尼系数。基尼系数越大,表示模型对
于好坏用户的区分能力越好。
2.56 你们模型是怎么部署上线的?
最简单的,把评分卡每个区间加多少分减多少分,怎么做映射的逻辑,讲给开发小哥,他会
帮你在线上写 if else 生成一个 pmml 文件,给开发小哥调用公司自己做的决策引擎,或者是
租的,自己写变量逻辑上线用 flask 或者 Django 自己写接口上线
2.57 上线需要注意什么?
线上线下变量的逻辑必须完全一致,这是最重要的。很多公司会做类似于 A\B test,两套模
型竞争(一个 champion 做决策,和一个 challenger 空跑,也有可能 champion 70%,challenger
30%)
2.58 特征衍生的方法有哪些?说说你平时工作中是怎么做特征衍生的?
常规的特征衍生方法:
基于对业务的深入理解,进行头脑风暴,构造特征。
特征交叉,例如对类别特征进行交叉相乘。
分解类别特征,例如对于有缺失的特征可以分解成是否有这个类别的二值化特征,或者将缺
失作为一个类别,再进行亚编码等处理。
重构数值量(单位转换,整数小数拆分,构造阶段性特征)
特征的四则运算,例如取平均/最大/最小,或者特征之间的相乘相除。
平时工作特征衍生的做法:
因为风控模型通常需要好的解释能力,所以在特征衍生时也会考虑到衍生出来的特征是否与
目标变量相关。例如拿到运营商的通话记录数据,可以衍生一个"在敏感时间段(深夜)的
通话次数占比",如果占比较高,用户的风险也较大。
平常会将大量的时间和精力花在底层数据的衍生上,这个不仅需要对业务的理解,也需要一
定的想象力进行头脑风暴,即使衍生出来的特征 90%都效果不佳,但只要剩下的 10%是好的
特征,那对于模型效果的提升是很显著的。
对于评分卡来说,特征需要好的解释能力,所以一些复杂的衍生方法,像特征交叉,log 转
换基本不会用到。但如果是 xgboost 等复杂模型,进行特征交叉等方法或许有比较好的效果。
2.59 如何处理金融风控业务中的样本不平衡的问题?
下探、半监督学习、标签分裂、代价敏感、采样算法
2.60 通过一些指标监控的时候,什么样的情况下模型变得不好需要重新调整,什么样的情
况下模型良好而不需要调整?
一般有套完整的监控体系,监控 PSI KS capture_rate 超过一定阈值就可以 refit 或者 rebuild
了。
欢迎各位同学了解《python金融风控评分卡模型和数据分析(加强版)》学习更多相关知识
入口1:https://ke.qq.com/course/package/43071
入口2:https://study.163.com/series/1202915601.htm?share=2&shareId=400000000398149
