风控算法面试题

  |  

摘要: 更新风控算法面试题

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


坏样本过少有哪些解决思路

  1. SMOTE、GMM增加样本,TSVM、LP 增加无标签的标签。KS 会略有提升,但 OOT 稳定性一般会有问题。
  2. 代价敏感学习来处理,有论文证明其实用性。不过坏样本过少的话,也会不稳定。
  3. 拒绝推断,人工根据重要指标,定义增加坏样本,同时结合代价敏感学习。

LR 损失函数为什么用极大似然估计而不是最小二乘法

最小二乘法的目标函数如下:

这是非凸的,不容易求解,会得到局部最优。

极大似然估计的目标函数是对数似然函数

这是关于 w, b 的高阶连续可导凸函数,可以方便通过凸优化算法求解,例如梯度下降算法。

GBDT和XGBOOST的区别有哪些

  • GBDT 以 CART 为基分类器,而 xgboost 还支持线性分类器,此时 xgboost 相当于带 l1 和 l2 正则化的 LR。
  • GBDT 在优化时只用到一阶导数信息,xgboost 则对损失函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。二阶导数使得梯度下降得更快。xgboost 支持自定义损失函数,只需要一阶和二阶导数存在即可。
  • xgboost 的损失函数中加入了正则项,用于控制模型的复杂度,降低模型偏差,防止过拟合。正则项里包含了树的叶节点个数、每个叶节点上输出的 score 的 L2 模的平方和。
  • xgboost 支持列抽样和行抽样
  • xgboost 增加了自动处理缺失值特征的策略

分箱有哪些优缺点

分箱分为有监督和无监督。

有监督分箱比较典型的有卡方分箱和Best-KS 分箱。其中卡方分箱的解释性强,以卡方检验为原理,具有很强的统计意义,可以解决多分类场景(如非违约,轻度违约,重度违约)的分箱;Best-KS 分箱将特征从小到大排序,计算出ks最大的值,将数据分成两部分。

它们的优缺点如下:

  • 优点:与目标变量结合,将目标变量信息反应到特征中
  • 缺点:计算量大

无监督分箱比较常见的有等频、等距、聚类等,优缺点如下:

  • 优点:计算简单
  • 缺点:合理性不能保证,有点拍脑袋

讲一下 KS

首先需要引入 TPR 和 FPR 这两个指标:

  • TPR:TP / (TP + FN) 所有正例中有多少个正例被分出来。
  • FPR:FP / (TN + FP) 所有负例中有多少被分为正例。

模型预测的结果通常是一个概率值,概率值越大说明这个样本是正例的可能性越大,我们需要一个阈值(threshold)来定义多大的概率以上才是正例,通常这个值设为0.5,表示概率值大于0.5表示这个样本是正例,小于0.5表示这个样本是负例。

当阈值变化时,TPR 和 FPR 也会跟着变化,于是有了 TPR 曲线和 FPR 曲线:

  • TPR曲线:横轴是阈值,纵轴是TPR,通过将阈值从1.0->0来画出很多个TPR的点,连起来得到TPR曲线。
  • FPR曲线:横轴是阈值,纵轴是FPR,通过将阈值从1.0->0来画出很多歌FPR的点,连起来得到FPR曲线。

KS 值就是 TPR 曲线和 FPR 曲线相距最远的距离值(同一个阈值的 TPR 和 FPR 差值)。

在实际应用的时候有两个经验:

  1. 实际系统中是既有规则又有模型的,规则和模型是互相配合相互转化的。有时规则紧了,模型 KS 就低了,此时并不代表模型不好。
  2. KS 最大值的点,一般会恰好是实际业务中的 Cutoff 点,实际业务中,我们会结合流量成本、逾期率监管要求、利润最大化原则,综合起来寻找 Cutoff 点。

串讲一下树模型

决策树

决策树模型通过递归的方式选择最优特征,并用最优特征对数据集进行分割;

随机森林

以Cart树作为基分类器,将若干个弱分类器的分类结果进行投票选择,从而组成一个强分类器;

AdaBoost

基于分类器的错误率分配不同的权重系数,最后得到累加加权的的预测结果;

GBDT

GBDT的基本想法是让新的基模型(GBDT以CART分类回归树为基模型)去拟合前面模型的偏差,从而不断将模型的偏差降低;

XGBoost

相比于经典的GBDT,xgboost做了一些改进,从而在效果和性能上有明显的提升:

  • GBDT将目标函数泰勒展开到一阶,而xgboost将目标函数泰勒展开到了二阶。保留了更多有关目标函数的信息,对提升效果有帮助;
  • GBDT以CART树作为基分类器,而XGBOOST也支持线性分类器;
  • xgboost加入了和叶子权重的L2正则化项,因而有利于模型获得更低的方差;
  • xgboost增加了自动处理缺失值特征的策略。通过把带缺失值样本分别划分到左子树或者右子树,比较两种方案下目标函数的优劣,从而自动对有缺失值的样本进行划分,无需对缺失特征进行填充预处理;

LightGBM 相比 XGBoost 的变化,有哪些优势

1. 速度和内存上的优化

  • xgboost用的是预排序(pre-sorted)的方法,空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如排序后的索引,为了后续快速的计算分割点),这里需要消耗训练数据两倍的内存。 其次,时间上也有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。
  • LightGBM用的是直方图(Histogram)的决策树算法,直方图算法的基本思想是先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

由于只保存特征离散化后的值,而这个值一般用8位整型存储就足够了,内存消耗可以降低为原来的1/8。

2. 决策树生长策略的不同

  • xgboost 通过 level-wise (Depth) 策略生长树,Level-wise 过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上 Level-wise 是一种低效的算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。
  • LightGBM 通过 leaf-wise (best-first) 策略来生长树,Leaf-wise 则是一种更为高效的策略,每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同 Level-wise 相比,在分裂次数相同的情况下,Leaf-wise 可以降低更多的误差,得到更好的精度。Leaf-wise 的缺点是可能会长出比较深的决策树,产生过拟合。因此 LightGBM 在 Leaf-wise 之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。

3. 对类别型特征的处理

  • xgboost 不支持直接导入类别型变量,需要预先对类别型变量作亚编码等处理。如果类别型特征较多,会导致哑变量处理后衍生后的特征过多,学习树会生长的非常不平衡,并且需要非常深的深度才能来达到较好的准确率。
  • LightGBM 可以支持直接导入类别型变量(导入前需要将字符型转为整数型,并且需要声明类别型特征的字段名),它没有对类别型特征进行独热编码,因此速度比独热编码快得多。LightGBM 使用了一个特殊的算法来确定属性特征的分割值。基本思想是对类别按照与目标标签的相关性进行重排序,具体一点是对于保存了类别特征的直方图根据其累计值 sum_gradient / sum_hessian 重排序,在排序好的直方图上选取最佳切分位置。

LightGBM 优势总结

  1. 占用的内存更低,只保存特征离散化后的值,而这个值一般用8位整型存储就足够了,内存消耗可以降低为原来的1/8;
  2. 决策树生长策略不同,高效率同时防止过拟合;
  3. LightGBM 直接支持类别特征;

Share