美文网首页工作
搭建金融信贷风控中的机器学习模型-(8)梯度提升算法

搭建金融信贷风控中的机器学习模型-(8)梯度提升算法

作者: GQRstar | 来源:发表于2019-09-28 08:17 被阅读0次

            在分类任务中,除了逻辑回归、SVM、决策树等简单模型外,还有例如随机森林之类的集成模型,GBDT就是其中一类代表的梯度提升模型。

    1.梯度提升(Gradient Boosting)的概念

            在求解函数f(x)最值问题中,变量的最优解是在参数空间内搜索,梯度下降法是基本的数值方法之一,以最小值为例说明基本步骤:
    1.初始化w=w^0
    2.for i in range[0:N]:
    - 求解梯度d_i=-\frac{\partial f}{\partial w}|w^i
    - 更新w^{i+1}=w^i+\lambda_id_i,\lambda_i为当前步长
    则最终解为w^*=w^0+\sum_{i=1}^N\lambda_id_i
            如果将变量扩展到函数空间,考虑给定数据集{x_i,y_i|i=1,2,3...,M},建立xy的回归模型y=f(x),需要优化损失函数L(y,f(x))。即求解损失函数的最优解f(x),即
    f^*(x)=argmin_fL(y,f(x))。求解的步骤与梯度下降法一致,基本步骤仍为:
    1.初始化:f(x)=f^0(x)
    2.for i in range[0:N]:
    - 求解梯度g_i(x)=-\frac{\partial L(y,f(x))}{\partial f(x)}|f^i(x)
    - 更新f^{i+1}(x)=f^i(x)+\lambda_ig_i(x),\lambda_i=argmin_{\lambda}L(y,f^i(x)+\lambda g_i(x))
    则最终解为f^*(x)=f^0(x)+\sum_{i=1}^N\lambda_i g_i(x)
            如果将上述介绍的模型定义为CART模型,即可得到Gradient Boosting Decision Tree(GBDT)。当然基模型也可以使用其他分类器或者回归器。
    GBDT的特点是

    • 基于简单决策树的组合模型
    • 沿着梯度下降的方向进行提升
    • 只接受数值型的连续变变量
    • 其优点是:准确度高,不易过拟合

    2.GBDT 模型简介

    2.1原理(以分类树为例)

    结构
    F(x)=\sum_{k=1}^Kf_k(x)若干个分类树结果加和的方式来逼近y,y是二分类标签,K是分类树的个数。
    损失函数

    • k步累计函数的损失=累计k棵树的精度损失+累计k棵树的复杂度惩罚
    • 待求变量:第k棵树
    • 目的:让累计的损失最小化
      以负二项对数损失函数为例介绍损失函数:
      l(y,F)=log(1+e^{-2yF}),y={-1,1}
      F=\frac{1}{2}log(\frac{P(y=1|x)}{P(y=-1|x)})
      关于相加性
    • 预测的类别不能相加
    • 概率不能相加
    • log-odds-ratio对数几率是可以相加的
      求解步骤
      1.初始化模型F^0(x)
      初始化模型一般为常数,与样本x分布无关,例如:
      F^0(x)=-\frac{1}{2}log(\frac{P(y=1)}{P(y=-1)})
      2.计算损失函数的负梯度(最小化损失函数):
      \hat y=-\frac{\partial l}{\partial F}|F=F^0(x)=\frac{2y}{1+e^{2yF^0(x)}}
      3.构建回归树f^1(x)=\hat y,并计算回归树的每个叶子结点的取值:
      \gamma_{1,j}=argmin_{\gamma}l(y,F^0(x)+\gamma)=argmin_{\gamma}\sum_{x\in R_{i,j}}log(1+e^{(-2y(F^0(x)+\gamma))})
      其近似解为:\gamma_{1,j}=\frac{\sum_{x \in R_{1,j}}\hat y}{\sum_{x\in R_{1,j}|\hat y|(2-|\hat y|)}}
      4.然后更新得到的模型为:
      F^1(x) = F^0(x)+\sum_{j=1}^J\eta*\gamma_{1,j}I(x\in R_{1,j}),\eta为步长

    5.迭代下去可以得到F^M(x)
    注意:

    • 模型F^M(x)不是分类树,F^M(x)的结果不是类别,需要尽心概率转化:
      P(R_{m,j}=1)=\frac{1}{1+e^{-F^M(x)}}
    • 模型f^m(x)不是分类树,是损失函数对F^{m-1}(x)的负梯度
    • 选择的损失函数不同,得到的梯度也略有不同

    3.GBDT的升级版:XGBoost

    3.1原理

            GBDT模型是将损失函数进行线性逼近,本质是对损失函数做一阶泰勒展开:
    Loss(y,F_k(x)+f(x))=Loss(y,F^k(x))+\frac{\partial Loss}{\partial F}|F^k(x)*f(x)+o(f(x))
    如果用多项式代替线性,将泰勒展开到二阶,就得到精度更高的下降法:
    Loss(y,F^k(x)+f(x))=Loss(y,F^k(x))+gf(x)+\frac{1}{2}hf^2(x)+o(f^2(x))+\Omega(f)\cong Loss(y,F^k(x))+gf(x)+\frac{1}{2}hf^2(x)+\Omega(f),
    其中g=\frac{\partial Loss}{\partial F}|F^k(x),h=\frac{\partial^ 2Loss}{\partial F^2}
    由于Loss(y,F^k(x)为常数,所以对损失函数的最小化,等价于对\hat l=gf(x)+\frac{1}{2}hf^2(x)+\Omega(f)的最小化。
    gf(x)+\frac{1}{2}hf^2(x)是模型在预测精度上的为残差,\Omega(f)代表模型的复杂度,在XGBoost中模型的复杂度一般表示为\Omega(f)=\gamma T+\frac{\gamma}{2}\sum w^2_j,T代表叶子结点个数,w_j为叶子结点的取值,避免过拟合。
    综上,加入第t棵树后的损失函数的表达式(忽略常数项)可以近似为:
    \hat l^t(x)=gf(x)+\frac{1}{2}hf^2(x)+\Omega(f)=\sum_{i=1}^n[g_if_i(x)+\frac{1}{2}h_if_i^2(x)]+\gamma T+\frac{\gamma}{2}\sum_{j=1}^Tw^2_j=\sum_{j=1}^T[(\sum_{x_i \in I_j}g_i)w_j+\frac{1}{2}(\sum_{x_i \in I_j}h_i)w^2_j]+\gamma T
    为了让\hat l_t最小化,w的取值是w^*=\frac{\sum_{x_i \in I_j}g_i}{\sum_{x_i \in I_j}h_i+\lambda}
    此时,\hat l_t=-\frac{1}{2}\sum_{j=1}^T\frac{(\sum_{x_i \in I_j}g_i)^2}{\sum_{x_i \in I_j}h_i+\lambda T}

    3.2确定树结构

    假设树的结构已经确定,则\hat l_t为树的得分,我们的任务是得到得分最小的树。理想情况下,可以枚举所有的可能挑选得分最小的结构,当样本或变量较多时,枚举法几乎不可能。,因此采用近似算法:
    1.贪婪法:生长一棵树,寻找最优特征以及最优分裂点形成子树,当数据量较大时,速度较慢

    贪婪法1
    贪婪法2
    2.近似法:在贪婪法中用分位点代替每种可能的取值,降低了精度但速度快
    近似法

    3.3其他优化

    优化

    3.4 特征重要性

    特征重要性
    主要步骤

    4.XGBoost模型在信贷风控中的应用

            在构造XGBoost模型用于违约预测时,依然需要对数据做预处理工作和特征工程。需要注意的是:

    • 极端值的处理不是必须的,因为在构建每棵树时,CART模型对于极端值不敏感;
    • XGBoost模型可以处理缺失值,即对缺失值单独分枝,但python包中响应的模块不能读取缺失数据,因而需要处理缺失值;另外,若缺失值占比很少,不需要单独分枝,要对缺失值尽心处理。

    相关文章

      网友评论

        本文标题:搭建金融信贷风控中的机器学习模型-(8)梯度提升算法

        本文链接:https://www.haomeiwen.com/subject/cjeryctx.html