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

        在分类任务中,除了逻辑回归、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包中响应的模块不能读取缺失数据,因而需要处理缺失值;另外,若缺失值占比很少,不需要单独分枝,要对缺失值尽心处理。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容