Fork me on GitHub

十. 集成学习-提升树| XGBoost

提升树

1. 提升树的核心思想

Bagging与Boosting的区别

集成模型--随机森林,且也了解到随机森林属于Bagging的成员。另外一种集成模型叫作Boosting。什么叫Bagging? 比如在随机森林里,针对于样本数据,我们同时训练了多棵决策树,然后让这些决策树

通过投票的方式来参与预测。这种方式的好处也讲过,可以很好地提升模型的稳定性。 其实任意的集成模型只要训练得合理都具备这种特性的,Boosting也不例外。

Bagging  VS  Boosting

Bagging

  Leverages unstable  base  learners  that are  weak because  of  overfitting

Boosting

  Boosting:Leverage  stable  base  learners  that  are  weak  bacause  of  underfitting  

首先,在Bagging和Boosting里,我们把每一个模型称作Weak Learner,比如随机森林里的每一棵决策树就是Weak Leaner。那怎么理解Weak Learner呢? 其实就是不太靠谱的模型,但很多不太靠谱的

模型组合在一起最终得出来的很可能是靠谱的模型,是不是很神奇?

虽然Bagging和Boosting都由Weak Learner来组成,但它们之间还是有很大区别的。有两个关键词我们还需要记住:overfitting和underfitting。 前者的意思是一个模型训练得太好了、太厉害了,导致出现过

拟合的现象,所以不靠谱; 后者的意思是这么模型有点弱,都没有充分训练过,所以不靠谱。Bagging是很多过拟合的Weak Leaner来组成Boosting是很多欠拟合的Weak Learner来组成,这就是它们

之间核心的区别。

Boosting与Bagging:

  • 结构上,Bagging是基分类器并行处理,而Boosting是串行处理;
  • 训练集,Bagging的基分类器训练是独立的,而Boosting的训练集是依赖于之前的模型;
  • 作用,Bagging的作用是减少variance,而Boosting在于减少bias;

对于Bagging,对样本进行重采样,通过重采样得到的子样本集训练模型,最后取平均。因为子样本集的相似性,而且使用相同的弱学习器,因此每个学习器有近似相等的bias和variance,因为每个学习

器相互独立,所以可以显著降低variance,但是无法降低bias

对于Boosting,采用顺序的方式最小化损失函数,所以bias自然是逐步下降,子模型之和不能显著降低variance

                    

可以举个例子: Bagging模型可以理解成由很多顶级的专家来组成,但这些专家呢,都自以为很厉害都听不进去别人的意见,所以遇到新的问题适应能力稍微弱一些。但是呢,让这些专家通过合作一起做

事情的时候就非常厉害。另外一方面,Boosting模型可以理解成由很多学渣来组成,每一个人的能力都挺弱的,而且不能够独当一面。但是呢,当很多人一起合作的时候却能带来惊人的结果。

这么看起来是不是Bagging更加靠谱呢,毕竟Bagging里的每一个模型都是专家啊! hmm…神奇的是,Boosting方法很多时候比Bagging还要厉害! 就像每一只蚂蚁可能一点都不起眼,但如果成千上万个蚂

蚁构成的群就完全不一样了,可以弄死比自己身躯大好几十倍的虫子! 这就是Boosting的力量。

而且在过拟合问题的解决上,Boosting也被证明出更加有效。关于Boosting方法有很多非常漂亮的理论。

GBDT, XGBoost 

Boosting的思路其实很早就有了,最初提出来的Boosting方法叫作Adaboost,目前用得不多。但它的思想一步步被学者们利用被改进,最后衍生出了很多流行的模型,比如GBDT、XGBoost等模型。

特别是最近几年,很多工业级应用中都倾向于使用Boosting,也证实了它在实际问题中的有效性。另外,如果之前关注过数学竞赛的话应该也知道它的地位,很多第一名的方法都是基于Boosting的方法。

所以在实际问题当中,如果你拿不准使用什么模型,选择GBDT、XGBoost等模型一定是不错的选择。

2. 基于残差的训练方式

 Boosting的一种训练方式,基于残差的训练。

提升树:给了一个预测问题,张三在此数据上训练出了一个模型 - “Madel1”,但是效果不怎么好,误差比较大。

问题:如果我们只能接受去使用这个模型但不能做任何改变,那接下来需要怎么做??

接了一个项目, 然后其中一位同事给出了一些方案, 但还不完善, 我们也不能要求让他去改而且也不能不使用他的方案, 那应该怎么办? 

  保留已有的模型,这个模型还不能解决的部分我们接着去解决;这就是基于残差的训练方式。虽然每一个模型都比较弱, 但至少我们是可以确保它们每一个是有点作用的, 总比随机猜测要好。

 残差-还不能解决的问题;

 模型2的预测收入是针对模型1的残差的结果

 

 模型3的预测值是针对模型1-2的残差的结果

 

 对于回归问题,假如我们按照残差的方式学习了很多棵决策树,决策的时候怎么办?

  对于每一颗决策树的结果求和;在预测阶段其实跟Bagging是不一样的, 因为在Bagging里每棵树是独立训练的, 互不影响, 所以最后决策时需要投票决策。但Boosting的情况不一样, 训练是串行的, 一

个接一个, 每一棵树的训练都依赖于之前的残差。基于这些特点, 对于Boosting我们应该要求和而不是平均! 

最终的预测

            

XGBoost为什么这么火

Boosting里最为流行的模型称作XGBoost。 具体论文地址请参考:https://www.kdd.org/kdd2016/papers/files/rfp0697-chenAemb.pdf

XGBoost虽然模型本身跟之前GBDT没什么太大区别,但在具体实现方面它做了很多改进使得能够可以顺利地应用在大数据环境下,而且也保证很好的效果。

XGBoost算法可以并行、训练效率高、比起其他算法实际效果更好、由于可控参数多可以灵活调整

其实火爆的原因还是源于它确实效果好。但完全看得懂XGBoost本身是有门槛的,我给大家提前打个预防针。所以,如果你学完本章的内容但总感觉并没有100%掌握,千万不要气馁,其实理解起来不容

易。那XGBoost如何学习呢? 最好的资源无非是Tianqi自己写的PPT,链接请参考:https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

学习路径

近似的方法- 泰勒展开式 得到目标函数, 把一棵树参数化; 

3. XGBoost目标函数的构建 

 使用多颗树共同预测

不像随机森林样要做一个平均,随机森林训练出来的模型都是一个独立的模型,没有一个相关性,也不是基于一个残差的方式来训练的 ;

提升树需要把每颗树的结果做一个相加;

当拿到一个样本之后,分别通过每一个模型做预测,最后每个模型输出之和作为最终的预测结果。我们可以把这个过程泛化到具有K棵树的情况。

假设已经训练了K颗树,则对于第i 个样本的(最终)预测值为:

 最后的结果相当于所有K棵树预测之和。这里的 fk(xi代表第k 棵树对第 i 个样本的预测值。简单来讲,这里的函数 f 可以看作是每一棵训练好的决策树。

目标函数的构建

预测已经知道如何做了,那损失函数怎么办? 在线性回归模型里,损失函数其实可以定义成真实值与预测值之间的误差,之后再通过优化算法去找出让这个误差最小化的参数值。

其实在XGBoost也是一样的,在上面我们已经知道了如何得到最终的预测结果。那既然知道了如何表示预测结果,那我们的损失函数自然而然也就有了。在这一点上跟其他模型没什么区别。

k颗树,样本x, 通过每颗树得到每个样本的预测值, fk(xi代表第k 棵树对第 i 个样本的预测值;

目标函数包括:损失函数,正则项 - 控制复杂度; 

 这里的目标函数由两个部分来构成,其中一项是损失函数,另外一项是控制模型的复杂度项。

  • 如果是回归问题,我们可以使用最小二乘作为损失函数;
  • 如果是分类问题,我们可以使用交叉熵作为损失函数;

这里的函数l(。,。)表示预测值与真实值之间的差异。所以,从这里也可以看出XGBoost既可以用在回归问题上,也可以用在分类问题上,因为框架本身是通用的。

除了损失函数,我们在使用模型的时候一般也会加入控制复杂度的项,也叫作正则。 回顾一下,在线性回归或者逻辑回归上我们考虑过L1、L2这些常用的正则。正则的作用无非就是控制模型的复杂度,

从而把容易过拟合的模型不给予考虑。那这里问题是: 我们该如何给XGBoost模型定义复杂度? 这个问题的本质其实: 一棵决策树的复杂度如何定义? 或者换个角度:一棵复杂的决策树模型有什么特点?

对于一棵决策树来讲, 树的深度、叶节点个数、叶节点对应的预测值等这些特征跟它的复杂度相关;一棵树越完整意味着这棵树越容易过拟合。

那让这棵树容易过拟合的,无非跟几个经典的特性相关,比如一个树的深度越深就越容易过拟合; 一个树越深也意味着它的叶节点越多,所以叶节点个数也可以作为衡量复杂度的一个很重要的要素。

除了这几个方面,在回归问题上,叶节点对应的预测值也是可以用来控制模型的复杂度的。比如这个预测值越大就说明模型越复杂,预测值越小说明模型越简单。那最后一点又如何去理解呢?

比如我们做回归分析,最终的预测结果是所有决策树预测结果之和。所以从这个角度可以这么想,如果一棵决策树的预测是比较少,那相当于这棵树带来的影响就会越小,当然这也说明我们需要更多的

树。

树的复杂度

    

 回归问题,误差的平方;

 

4. 泰勒展开式与目标函数的近似

目标函数的近似

首先我们来简化一下上述的目标函数。我们即将要使用的方法其实是一个近似的方法,从而去简化我们的目标函数。对于函数的近似,有一个非常著名的定理,这个叫作泰勒展开式。通过泰勒展开式我

们可以近似一个函数到一阶、二阶或者更高阶。

其实之前讲过的梯度下降法也可以从泰勒展开式做进一步的分析、或者牛顿法(没有涉及到)也是跟泰勒展开式有紧密的关系。如何使用泰勒展开式的性质来近似目标函数。

使用泰勒级数近似目标函数

 到此我们得到了一个新的目标函数。但貌似仍然比较难去优化。最主要的难点在于还不知道如何去参数化 f​(xi​) 和每一棵树的复杂度。只有我们知道如何参数化上面两项才能找出让这些参数最小化的那

棵树。 所以,接下来的一步就是参数化每一棵树,并用参数的方式来表达上述两项。 

5. 树的参数化

f ( x )的定义和树的复杂度

我们构造了一个新的目标函数,但仍然不知道如何去优化目标函数,因为还不知道目标函数中的 f(xiω f)如何去参数化。

重新定义一棵树

假设有5个样本,每个样本落到下面三个叶子节点上(① ② ③),q(x) 样本x在树中哪个叶节点上; 

 树的复杂度

3个叶节点,希望叶子节点个数越小越好,希望w值越小越好;

 新的目标函数

n=5,5个样本,一次计算每个样本 ,转换下计算逻辑,按每个叶节点的下标来计算(如先计算下1,3,再计算下2....,之前是一个个来计算的如先计算1、再计算2、再计算3...)

从围绕样本下标循环 转换为基于每个叶节点来循环

 剩下的事情就最小化新的目标函数了。 这个过程其实等同于寻找一棵最好的树,使得让这个目标函数最小。那这棵树如何寻找呢? 这其实就是优化问题了。

6. 利用贪心算法构建每一棵树

需要寻找一种树的结构使得预定义的目标函数最小。但这个结构又如何去寻找呢? 找出最好的树的结构跟找出最好的参数不太一样,没有像参数优化那么直观,因为这是一个结构化的问题。这个问题的本

质其实是搜索问题,我们需要找出一个高效的搜索算法去寻找最好的结构。对于搜索问题其实有很多中方法,比如brute-force算法,A*算法,贪心算法等等。 那对于我们的问题能使用什么样的算法呢?

如何寻找树的形状

找出树的score 

 用贪心算法构建一棵树

8个样本,

这就是我们想要的答案! 其实训练过程跟决策树非常类似,无非是每次考虑的评估方式不一样。在决策树里,每次考虑的是信息增益或者方差的增益,只不过在xgboost的构建当中我们每次考虑的是自定

义的目标函数的差异罢了。所以从整个过程也可以看得到,虽然一开始一步步试图构建参数化的目标函数,但最后还是回到了基于贪心算法的树的构建,跟决策树的构建很类似。只不过我们在构建决策

树时并没有试图去创建什么目标函数,而是直接通过信息增益来搭建,所以直接看到的是结果,省略了中间很多步骤而已。以上是所有核心的算法细节,具体系统上的优化细节建议翻翻论文里的内容。

XGBoost很好用,具体API可以参考:https://xgboost.readthedocs.io/en/latest/

GBDT工程版本

Gradient Boosting集成学习:

XGBoost, LightGBM, CatBoost,  NGBoost实际上是对GBDT方法的不同实现, 针对同一目标、 做了不同的优化处理; 

XGBoost  

 

LightGBM 

LightGBM:

  • 2017年经微软推出,XGBoost的升级版
  • Kaggle竞赛使用最多的模型之一,必备机器学习神器
  • Light => 在大规模数据集上运行效率更高
  • GBM => Gradient Boosting Machine

Motivation:

  • 常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制
  • GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。对于工业级海量的数据,普通的GBDT算法是不能满足其需求的
  • LightGBM的提出是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业场景

                                

LightGBM与XGBoost:

  • 模型精度:两个模型相当
  • 训练速度:LightGBM训练速度更快 => 1/10
  • 内存消耗:LightGBM占用内存更小 => 1/6
  • 特征缺失值:两个模型都可以自动处理特征缺失值
  • 分类特征:XGBoost不支持类别特征,需要对其进行OneHot编码,而LightGBM支持分类特征

                                

XGBoost模型的复杂度:

  • 模型复杂度 = 树的棵数 X 每棵树的叶子数量 X 每片叶子生成复杂度
  • 每片叶子生成复杂度 = 特征数量 X 候选分裂点数量 X 样本的数量

针对XGBoost的优化:

  • Histogram算法,直方图算法 => 减少候选分裂点数量
  • GOSS算法,基于梯度的单边采样算法 => 减少样本的数量
  • EFB算法,互斥特征捆绑算法 => 减少特征的数量
  • LightGBM = XGBoost + Histogram + GOSS + EFB

                                   

XGBoost的预排序(pre-sorted)算法:

  • 将样本按照特征取值排序,然后从全部特征取值中找到最优的分裂点位
  • 预排序算法的候选分裂点数量=样本特征不同取值个数减1

     

LightGBM的Histogram算法:

  • 替代XGBoost的预排序算法
  • 思想是先连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图,即将连续特征值离散化到k个bins上(比如k=255)
  • 当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点
  • XGBoost需要遍历所有离散化的值,LightGBM只要遍历k个直方图的值
  • 候选分裂点数量 = k-1

                 

GOSS算法:

  • Gradient-based One-Side Sampling,基于梯度的单边采样算法
  • 思想是通过样本采样,减少目标函数增益Gain的计算复杂度
  • 单边采样,只对梯度绝对值较小的样本按照一定比例进行采样,而保留了梯度绝对值较大的样本
  • 因为目标函数增益主要来自于梯度绝对值较大的样本 => GOSS算法在性能和精度之间进行了很好的trade off

                  

EFB算法:

  • Exclusive Feature Bundling,互斥特征绑定算法
  • 思想是特征中包含大量稀疏特征的时候,减少构建直方图的特征数量,从而降低计算复杂度
  • 数据集中通常会有大量的稀疏特征(大部分为0,少量为非0)我们认为这些稀疏特征是互斥的,即不会同时取非零值
  • EFB算法可以通过对某些特征的取值重新编码,将多个这样互斥的特征绑定为一个新的特征
  • 类别特征可以转换成onehot编码,这些多个特征的onehot编码是互斥的,可以使用EFB将他们绑定为一个特征
  • 在LightGBM中,可以直接将每个类别取值和一个bin关联,从而自动地处理它们,也就无需预处理成onehot编码

                          


LightGBM工具:

import lightgbm as lgb
官方文档:http://lightgbm.readthedocs.io/en/latest/Python-Intro.html

参数:
boosting_type,训练方式,gbdt
objective,目标函数,可以是binary,regression
metric,评估指标,可以选择auc, mae,mse,binary_logloss,multi_logloss
max_depth,树的最大深度,当模型过拟合时,可以降低 max_depth
min_data_in_leaf,叶子节点最小记录数,默认20

Bagging参数:
bagging_fraction
+bagging_freq(需要同时设置) bagging_fraction,每次迭代时用的数据比例,用于加快训练速度和减小过拟合 bagging_freq:bagging的次数。默认为0,表示禁用bagging,非零值表示执行k次bagging,可以设置为3-5 feature_fraction,设置在每次迭代中使用特征的比例,例如为0.8时,意味着在每次迭代中随机选择80%的参数来建树 early_stopping_round,如果一次验证数据的一个度量在最近的round中没有提高,模型将停止训练 参数: lambda,正则化项,范围为0~1 min_gain_to_split,描述分裂的最小 gain,控制树的有用的分裂 max_cat_group,在 group 边界上找到分割点,当类别数量很多时,找分割点很容易过拟合时 num_boost_round,迭代次数,通常 100+ num_leaves,默认 31 device,指定cpu 或者 gpu max_bin,表示 feature 将存入的 bin 的最大数量 categorical_feature,如果 categorical_features = 0,1,2, 则列 0,1,2是 categorical 变量 ignore_column,与 categorical_features 类似,只不过不是将特定的列视为categorical,而是完全忽略 模型参数配置: param = {'boosting_type':'gbdt',   'objective' : 'binary', #任务类型   'metric' : 'auc', #评估指标   'learning_rate' : 0.01, #学习率   'max_depth' : 15, #树的最大深度   'feature_fraction':0.8, #设置在每次迭代中使用特征的比例   'bagging_fraction': 0.9, #样本采样比例   'bagging_freq': 8, #bagging的次数   'lambda_l1': 0.6, #L1正则   'lambda_l2': 0, #L2正则 } 祖传参数LightGBM LGBMClassifier经验参数 clf = lgb.LGBMClassifier(   num_leaves=2**5-1, reg_alpha=0.25, reg_lambda=0.25, objective='binary',   max_depth=-1, learning_rate=0.005, min_child_samples=3, random_state=2021,   n_estimators=2000, subsample=1, colsample_bytree=1, ) num_leavel=2**5-1 #树的最大叶子数,对比XGBoost一般为2^(max_depth) reg_alpha,L1正则化系数 reg_lambda,L2正则化系数 max_depth,最大树的深度 n_estimators,树的个数,相当于训练的轮数 subsample,训练样本采样率(行采样) colsample_bytree,训练特征采样率(列采样) 祖传参数XGBoost XGBoost VS LightGBM XGBoost效果相对LightGBM可能会好一些 xgb = xgb.XGBClassifier(   max_depth=6, learning_rate=0.05, n_estimators=2000,   objective='binary:logistic', tree_method='gpu_hist',   subsample=0.8, colsample_bytree=0.8,   min_child_samples=3, eval_metric='auc', reg_lambda=0.5 )   max_depth ,树的最大深度   learning_rate, 学习率   reg_lambda,L2正则化系数   n_estimators,树的个数,相当于训练的轮数   objective,目标函数, binary:logistic 用于二分类任务   tree_method, 使用功能的树的构建方法,hist代表使用直方图优化的近似贪婪算法   subsample,训练样本采样率(行采样)   colsample_bytree,训练特征采样率(列采样) subsample, colsample_bytree是个值得调参的参数, 典型的取值为0.5-0.9(取0.7效果可能更好)

  参数对比         

 

 

CatBoost 

CatBoost算法:

  • 俄罗斯科技公司Yandex开源的机器学习库(2017年)
  • https://arxiv.org/pdf/1706.09516.pdf
  • CatBoost = Catgorical + Boost
  • 高效的处理分类特征(categorical features),首先对分类特征做统计,计算某个分类特征(category)出现的频率,然后加上超参数,生成新的数值型特征(numerical features)
  • 同时使用组合类别特征,丰富了特征维度
  • 采用的基模型是对称决策树,算法的参数少、支持分类变量,通过可以防止过拟合

CatBoost,LightGBM,XGBoost对比:

  • 2015 年航班延误数据,包含分类和数值变量
  • https://www.kaggle.com/usdot/flight-delays/data
  • 一共有约 500 万条记录,使用10%的数据,即50条记录
  • CatBoost 过拟合程度最小,在测试集上准确度最高0.816,同时预测用时最短,但这个表现仅仅在有分类特征,而且调节了one-hot最大量时才会出现
  • 如果不利用 CatBoost 算法在这些特征上的优势,表现效果就会变成最差,AUC 0.752
  • 使用CatBoost需要数据中包含分类变量,同时适当地调节这些变量时, 才会表现不错

                          

CatBoost,LightGBM,XGBoost对比:

  • 处理特征为分类的神器
  • 支持即用的分类特征,因此我们不需要对分类特征进行预处理(比如使用LabelEncoding 或 OneHotEncoding)
  • CatBoost 设计了一种算法验证改进,避免了过拟合。因此处理分类数据比LightGBM 和XGBoost 强
  • 准确性比 XGBoost 更高,同时训练时间更短
  • 支持 GPU 训练
  • 可以处理缺失的值 

                

CatBoost工具:

  • https://github.com/dmlc/xgboost
  • https://catboost.ai/docs/concepts/python-reference_catboostclassifier.html
构造参数:
learning_rate,学习率
depth, 树的深度
l2_leaf_reg,L2正则化系数
n_estimators,树的最大数量,即迭代次数
one_hot_max_size,one-hot编码最大规模,默认值根据数据和训练环境的不同而不同
loss_function ,损失函数,包括Logloss,RMSE,MAE,CrossEntropy,回归任务默认RMSE,分类任务默认Logloss
eval_metric,优化目标,包括RMSE,Logloss,MAE,CrossEntropy,Recall,Precision,F1,Accuracy,AUC,R2



fit函数参数:
X,输入数据数据类型可以是:list; pandas.DataFrame; pandas.Series
y=None
cat_features=None,用于处理分类特征
sample_weight=None,输入数据的样本权重
logging_level=None,控制是否输出日志信息,或者其他信息
plot=False,训练过程中,绘制,度量值,所用时间等
eval_set=None,验证集合,数据类型list(X, y)tuples
baseline=None
use_best_model=None
verbose=None

model = CatBoostClassifier(iterations=1000, #最大树数,即迭代次数
                              depth = 6, #树的深度
                               learning_rate = 0.03, #学习率
                               custom_loss='AUC', #训练过程中,用户自定义的损失函数
                               eval_metric='AUC', #过拟合检验(设置True)的评估指标,用于优化
                               bagging_temperature=0.83, #贝叶斯bootstrap强度设置
                               rsm = 0.78, #随机子空间
                               od_type='Iter', #过拟合检查类型
                               od_wait=150, #使用Iter时,表示达到指定次数后,停止训练
                               metric_period = 400, #计算优化评估值的频率
                               l2_leaf_reg = 5, #l2正则参数
                               thread_count = 20, #并行线程数量
                               random_seed = 967 #随机数种子
                              )

LighGBM效率高,在Kaggle比赛中应用多

CatBoost对于分类特征多的数据,可以高效的处理,过拟合程度小,效果好

XGBoost, LightGBM, CatBoost参数较多,调参需要花大量时间

Boosting集成学习包括AdaBoosting和Gradient Boosting

Boosting只是集成学习中的一种(Bagging, Stacking)

 

Thinking1:XGBoost与GBDT的区别是什么?

Thinking2:XGBoost与LightGBM的区别是什么?

Thinking3:举一个你之前做过的预测例子(用的什么模型,解决什么问题,比如我用LR模型,对员工离职进行了预测,效果如何... 请分享到课程微信群中)

 

金融评分卡模型的搭建 

大约从14年开始,国内兴起了AI+金融的热潮,很多人陆续跳进了金融科技创业的队伍当中。过去4、5年之间金融科技确实迎来了飞速的发展,AI技术对于金融行业也带来了巨大的冲击。金融的核心是风

险控制。自然而然地,AI的主战场也变成了如何使用AI技术精准的做风险控制。在风控领域,有一个很重要的问题是:如何通过用户的信息来判断用户的逾期与否?

AI来临之前,我们是怎么做风控的呢? 比如我们想贷款买车子怎么办? 需要收集各种各样的材料,然后拿着户口本、房产证去银行申请贷款,而且还需要做一些抵押。 之后银行通过漫长的审核过程来决

定要不要给放贷。 这个流程短则几周,长就不一定了。这种方法效率很低,需要大量的人工智能审核过程。对于小额贷款需求猛增的现在,这种低效的流程显然是满足不了社会需求的。

那怎么办呢? 方法就是AI结合数据的方式迅速做决策。目前很多金融科技公司的贷款审核周期都不到10秒,即可以放贷,而且逾期率控制得也非常好。这是怎么做到的呢? 答案无非是通过分析用户的数

据! 比如我们通过收集用户的基本信息、地域信息、社交信息等来判断一个人的逾期概率。

那这些信息又是如何拿到的呢? 数据的获取还是有很多门道的,一方面可以让用户自己去授权,另一方面也可以通过第三方来获取数据。而且有些公开的数据是可以抓取的,比如社交网络上的数据。

所以,我们的问题是:基于用户相关的信息来预测此用户是否违约。此项目中,我们采用的数据集是拍拍贷竞赛数据,链接为:https://www.kesci.com/home/competition/56cd5f02b89b5bd026cb39c9/content/1

在这个项目中,我们希望给大家更多的自由度,按照自己的想法去灵活地使用各项已经学到的知识点去完成。所以在项目的设计上,没有设计太多条条框框,目的是为了让大家可以敞开地去想,然后按

照自己的思路去完成项目。本项目中我们需要使用的模型是XGBoost,请不要使用其他的模型。

在此项目中,我们仅仅使用Master表格里的数据,先忽略Loginfo和Userupdateinfo。具体字段的细节可以参考上述链接。由于数据来自于公司内部,很多字段其实没有标记出到底是什么。但这倒是没有

关系,并不妨碍我们去构建模型的。

和鲸社区-“魔镜杯”风控算法大赛

https://www.heywhale.com/home/competition/56cd5f02b89b5bd026cb39c9/content/1

 

 
posted @ 2021-11-06 18:39  kris12  阅读(509)  评论(0)    收藏  举报
levels of contents