文章目录

  • 前言
  • 一、决策树原理
  • 二、决策树剪枝(pruning)

前言

在评分卡建模中,模型可解释性很重要,除了Logistic回归模型,决策树也是一个非常好理解的模型。决策树是一种贪心算法,得到的树不一定是最优的,而是效果较好的次优模型。

决策树学习步骤为:特征选择->决策树生成->剪枝。


一、决策树原理

由于决策树模型无法提前知道,所以只能先从根节点开始在属性空间中选择最优的属性进行分裂得到不同的分支,即中间节点,然后中间节点继续在属性空间中选择最优的属性进行下一次分裂,以此类推,直到满足条件后整个树得以确定。

对于分类问题常用的特征指标有信息增益,信息增益比,基尼指数(Gini),回归问题可以使用均方误差进行特征选择。

对于分类问题,每次的新分支生成都是为了将样本类别尽可能分开,即每个叶子节点下样本都属于同一类别。这里用纯度(Purity)来描述样本类别的一致性,纯度越高,则节点中类别不一致性越小。信息熵是度量样本纯度的一种常用指标,是纯度的量化表示,定义如下:H(X)=−∑i=1npilog⁡piH(X)=-\sum_{i=1}^n p_i \log p_i H(X)=−i=1∑n​pi​logpi​其中,X是一个离散随机变量,取有限值。熵越大,随机变量的不确定性越大,n为类别个数,pip_ipi​表示第i个类别的概率。

在信息论中,信息是随机变量不确定性的度量,而概率是随机变量确定性的度量。信息熵是不确定性度量的平均值,熵越大,不确定性越大,越小不确定性越小,纯度越高。

在决策树的生成或分支节点的生成过程中,需要进行两次选择:属性空间中最优划分属性的选择,以及最优属性的划分区间选择(该属性上的最优切分点的选择)。在进行切分之前,先求出当前状态下的信息熵,选择切分属性进行切分后得到各分割节点的信息熵总和。我们总希望划分后的信息熵比没划分的信息熵小,这样结果的纯度就会更高。这里,信息熵减小的值就是信息增益,而给定属性划分后得到的信息熵的和就是条件熵。条件熵定义如下:
H(D∣A)=−∑i,kp(Dk,Ai)log⁡p(Dk∣Ai)=−∑i,kp(Ai)p(Dk∣Ai)log⁡p(Dk∣Ai)=−∑i=1n∑k=1Kp(Ai)p(Dk∣Ai)log⁡p(Dk∣Ai)=−∑i=1np(Ai)∑k=1Kp(Dk∣Ai)log⁡p(Dk∣Ai)=−∑i=1n∣Di∣∣D∣∑k=1K∣Dik∣∣Di∣log⁡∣Dik∣∣Di∣\begin{aligned} H(D|A)&=-\sum_{i,k}p(D_{k},A_{i})\log p(D_{k}|A_{i})\\ &=-\sum_{i,k}p(A_i)p(D_k|A_i)\log p(D_k|A_i)\\ &=-\sum_{i=1}^n\sum_{k=1}^Kp(A_i)p(D_k|A_i)\log p(D_k|A_i)\\ &=-\sum_{i=1}^n p(A_i)\sum_{k=1}^Kp(D_k|A_i)\log p(D_k|A_i)\\ &=-\sum_{i=1}^n \frac{|D_i|}{|D|}\sum_{k=1}^K \frac{|D_{ik}|}{|D_i|}\log\frac{|D_{ik}|}{|D_i|} \\ \end{aligned} H(D∣A)​=−i,k∑​p(Dk​,Ai​)logp(Dk​∣Ai​)=−i,k∑​p(Ai​)p(Dk​∣Ai​)logp(Dk​∣Ai​)=−i=1∑n​k=1∑K​p(Ai​)p(Dk​∣Ai​)logp(Dk​∣Ai​)=−i=1∑n​p(Ai​)k=1∑K​p(Dk​∣Ai​)logp(Dk​∣Ai​)=−i=1∑n​∣D∣∣Di​∣​k=1∑K​∣Di​∣∣Dik​∣​log∣Di​∣∣Dik​∣​​
简写如下:
H(D∣A)=∑i=1nP(Ai)H(Di)=−∑i=1n∣Di∣∣D∣∑k=1K∣Dik∣∣Di∣log⁡∣Dik∣∣Di∣\begin{aligned} H(D|A)&=\sum_{i=1}^nP(A_i)H(D_i)\\ &=-\sum_{i=1}^n \frac{|D_i|}{|D|}\sum_{k=1}^K \frac{|D_{ik}|}{|D_i|}\log\frac{|D_{ik}|}{|D_i|} \end{aligned} H(D∣A)​=i=1∑n​P(Ai​)H(Di​)=−i=1∑n​∣D∣∣Di​∣​k=1∑K​∣Di​∣∣Dik​∣​log∣Di​∣∣Dik​∣​​
其中,n表示属性A划分区间的个数,∣Di∣|D_i|∣Di​∣表示第i个划分中的样本个数;∣D∣|D|∣D∣表示样本总数;K表示类别种类,本例为二分类,K=2;∑k=1K∣Dik∣∣Di∣log⁡∣Dik∣∣Di∣\sum_{k=1}^K \frac{|D_{ik}|}{|D_i|}\log\frac{|D_{ik}|}{|D_i|}∑k=1K​∣Di​∣∣Dik​∣​log∣Di​∣∣Dik​∣​ 表示属性A在第i个划分下类别的信息熵;
这里,pi=P(X=xi),i=1,2,...,np_{i}=P(X=x_{i}), i=1,2,...,npi​=P(X=xi​),i=1,2,...,n;∣Dik∣|D_{ik}|∣Dik​∣表示第i个划分下第K个类别中的样本数;∣Di∣|D_i|∣Di​∣表示第i个划分中的总样本数;

信息增益定义如下:g(D,A)=H(D)−H(D∣A)g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
已知样本标签,可以根据上述信息增益的公式计算各个属性,选择信息增益最大的属性作为最优划分属性,然后在最优划分属性中选择最优切分点,假设该属性为离散变量,则N个可能取值对应N-1种划分方式,依次计算信息增益选择最优即可。

上述是一层决策树生成过程,将上层分支节点作为根节点继续进行节点生成并重复多次,直到决策树满足截止条件,即可完成整棵决策树的生成过程,决策树的生成是一种贪心算法,为了防止树结构过于庞大出现过拟合现象,需要设置截至条件,出现如下三种情况时该节点可以结束分裂:

  1. 天下大吉状态:当前节点都属同一类别,纯度最高,完美状态。
  2. 无可奈何状态:当前节点属性集为空,或有属性,但所有属性取值都相同,没有可划分属性,但依然存在类别不一致问题,只能将类别中条件概率最大的作为该节点最终决策标签,出现这种情况可能是特征工程做的不够充分的导致的,需要进一步特征工程。
  3. 穷途末路状态:当前节点样本集为空,没有可划分样本或样本太少,这时只能将父节点的标签作为该节点的预测标签,这种情况可能出现过拟合,所以需要限制叶节点的最小样本数。

另外,截止条件也可以增加其他限制,如信息增益必须大于一个增益阈值,还可以限定树的深度,中间节点的样本数等。

决策树生成的本质就是从根节点到叶节点信息熵平均值不断下降的过程。信息熵越来越低,样本纯度越来越高,分类效果也越好。但信息增益指标更倾向于选择属性空间中取值较多的属性作为最优划分属性。如果一个属性种类越多,那么对其划分得到的类别纯度越容易提高,信息增益越大。改进办法是使用信息增益比,公式如下:
gr(D,A)=g(D,A)/H(A)g_r(D,A)=g(D,A)/H(A) gr​(D,A)=g(D,A)/H(A)
其中H(A)是对数据按属性划分得到的信息熵。解决了信息增益对较多属性的偏好,但信息增益比却对较少属性有偏好。进一步改进是使用Gini系数,应用最广泛的CART分类回归树就是采用这种指标完成树结构的生成。

名称 分类or回归 特征选择指标 属性选择原则 属性选择偏好 属性类型 缺失值 异常点
ID3 分类 信息增益 越大越好 取值较多属性 离散变量 不支持 不敏感
C4.5 分类 信息增益比 越大越好 取值较少属性 离散/连续变量 支持 不敏感
CART 分类或回归 基尼系数或MSE 越小越好 离散/连续变量 支持 不敏感

在ID3中采用信息熵来度量样本标签的不一致性或纯度,C4.5采用一个启发式方法,先从候选划分属性中找出信息增益高于平均水平的属性,然后再从中选择信息增益比最高的进行划分,而CART树则采用一种新的纯度度量指标:Gini指数。基尼值计算公式如下:
Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2=1−∑k=1K(∣Ck∣∣D∣)2Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2=1-\sum_{k=1}^K(\frac{|C_k|}{|D|})^2 Gini(p)=k=1∑K​pk​(1−pk​)=1−k=1∑K​pk2​=1−k=1∑K​(∣D∣∣Ck​∣​)2
其中,k表示类别的个数,|D|表示样本总数,∣Ck∣|C_k|∣Ck​∣表示第k个类别下的样本数。直观看,基尼值反映了从数据集中随机抽取两个样本类别不一致的概率,基尼值越小,样本纯度越高,属性总体的基尼值公式如下:
Gini(D,i)=∑j=1V∣Dj∣∣D∣Gini(Dj)Gini(D,i)=\sum_{j=1}^V\frac{|D_j|}{|D|}Gini(D_j) Gini(D,i)=j=1∑V​∣D∣∣Dj​∣​Gini(Dj​)
其中,i表示属性空间的第i个属性,V表示该属性的可能取值,如性别属性{'男‘,’女‘,’未知‘};|D|表示样本总数,∣Dj∣|D_j|∣Dj​∣表示第i个属性第j个类别下的样本数;Gini(Dj)Gini(D_j)Gini(Dj​)表示第i个属性第j个取值的基尼值;Gini(Dj)Gini(D_j)Gini(Dj​)表示第i个属性的总体基尼值,也叫基尼指数。

二、决策树剪枝(pruning)

剪枝分为预剪枝和后剪枝,预剪枝是在决策树生成时进行剪枝,后剪枝是在完整决策树生成以后再进行剪枝操作。

  1. 基于泛化能力的预剪枝过程如下:
    将数据集分为训练集和测试集,在训练集上进行分支生成前,先在测试集上验证模型效果,如果分类误差或准确率等,如果分支生成后对测试集的预测效果有提升,则保留分支,否则将该分支剪掉 ,不生成,重复多次上述操作,直到满足截止条件,决策树生成完毕。
  2. 基于泛化能力的后剪枝过程如下:
    对于已生成的决策树模型,在测试集上验证当前模型的预测效果,然后递归的从叶子节点向父节点回撤,此时的父节点变为叶子结点,回撤后,如果模型在测试集预测效果有提升,则剪掉该叶子结点,否则保留原叶子节点。重复多次,直到模型预测性能不再提升,或提升效果小于一定阈值,剪枝完毕。
  3. 基于损失函数加正则项的后剪枝方法如下:
    采用信息熵作为损失函数,决策树过于复杂主要表现在叶子节点数上(深度也在一定程度反映了决策树的复杂度),因此,决策树的损失函数可以用叶子结点信息熵总和与叶子节点数量表示,总损失函数如下:
    Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| Cα​(T)=t=1∑∣T∣​Nt​Ht​(T)+α∣T∣
    其中,|T|表示叶节点个数,NtN_tNt​表示落在第t个叶节点的样本数,Ht(T)H_t(T)Ht​(T)表示第t个叶节点的信息熵,α\alphaα是惩罚项。HtH_tHt​的计算公式如下:
    Ht(T)=−∑k=1KNtkNklog⁡NtkNkH_t(T)=-\sum_{k=1}^{K}\frac{N_{tk}}{N_{k}}\log \frac{N_{tk}}{N_{k}} Ht​(T)=−k=1∑K​Nk​Ntk​​logNk​Ntk​​
    其中K为第t个叶节点下属性的可能取值数量,NtkN_{tk}Ntk​为第t个叶节点下属性的第k个取值的样本数。将公式前半部分定义为C(T),如下:
    C(T)=∑t=1∣T∣NtHt(T)=−∑t=1∣T∣∑k=1KNtklog⁡NtkNkC_(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}{N_{tk}}\log \frac{N_{tk}}{N_{k}} C(​T)=t=1∑∣T∣​Nt​Ht​(T)=−t=1∑∣T∣​k=1∑K​Ntk​logNk​Ntk​​
    则总的损失函数简写如下:
    Cα(T)=C(T)+α∣T∣C_\alpha(T)=C(T)+\alpha|T| Cα​(T)=C(T)+α∣T∣
    其中,C(T)反映了训练数据的预测误差,而|T|为正则项。
    从集成学习的角度理解,决策树模型是集成学习模型:基学习器是决策树桩,损失函数是信息熵或基尼值或均方误差,每一步特征选择均是令指标更优化,进而学习一个最优的决策树桩(基学习器)。对于回归问题,损失函数变为均方误差,其他地方与分类问题一致。

##三、 决策树的优缺点
决策树优点:

  1. 决策树易于理解和实现
  2. 同时支持连续型变量和离散型变量
  3. 异常点不敏感,不需要数据归一化
  4. CART树同时支持分类和回归,支持多分类

决策树缺点:

  1. 易过拟合,学习最优模型N-P难,基于启发式学习方法,贪心搜索局部最优。
  2. 每次分类只能根据单个特征划分,在处理特征关联性比较强的数据时需要特征工程
  3. 决策树不稳定,数据中的微小变化可能导致完全不同的树生成。
  4. 有些概念很难被决策树学习到,例如XOR。
  5. 数据不均衡时,决策结果可能会有偏差,需要先对数据集进行样本不平衡处理,

信用评分卡建模:决策树模型相关推荐

  1. 数据挖掘项目:银行信用评分卡建模分析(上篇)

    kaggle上的Give Me Some Credit一个8年前的老项目,网上的分析说明有很多,但本人通过阅读后,也发现了很多的问题.比如正常随着月薪越高,违约率会下降.但对于过低的月薪,违约率却为0 ...

  2. 数据挖掘项目:银行信用评分卡建模分析(下篇)

    以下是银行信用评分卡建模分析下篇的内容,包括特征工程,构建模型,模型评估,评分卡建立这四部分.其中如果有一些地方分析的不正确,希望大家多多指正,感谢! 上篇文章的链接:数据挖掘项目:银行信用评分卡建模 ...

  3. 银行信用评分卡建模原理

    今天学习了一下评分卡的内容,博主自己也对这个不了解,由于业务的需求,今天自学了下相关的内容.我把自己学习的一些东西整理下,发到这个博客里面. 背景 1.先讲一下背景内容,什么是评分卡:其实评分卡呢,就 ...

  4. 超详细用Python进行信用评分卡建模【kaggle的give me some credit数据集】【风控建模】

    1 信用评分卡模型简介 信用评分卡是一个通过个人数据对其还款能力.还款意愿进行定量评估的系统.在消费金融行业,信用评分卡主要有三种(A.B.C卡): A卡:申请评分卡,贷前阶段使用,在客户获取期,建立 ...

  5. Python语言实现信用评分卡建模分析

    背景介绍 信用评分技术是一种应用统计模型,其作用是为信用卡申请人计算一个风险评估分值的方法. 而这种用途的统计模型就称为信用评分卡.信用评分卡可以根据客户提供的资料.客户的历史数据以及第三方平台(支付 ...

  6. 基于Python的信用评分卡建模分析

    1.背景介绍 信用评分技术是一种应用统计模型,其作用是对贷款申请人(信用卡申请人)做风险评估分值的方法.信用评分卡模型是一种成熟的预测方法,尤其在信用风险评估以及金融风险控制领域更是得到了比较广泛的使 ...

  7. 信用评分卡建模的工作流程

    结合阅读书籍和实际工作经验,整理一篇笔记性质的博客,供参考.能帮助到需要的人就是我的满足,更欢迎大神指导不足,谢谢! 一.流程概述 下图概况了典型的评分卡开发流程,该流程的各个步骤的顺序根据具体情况的 ...

  8. 基于Python的信用评分卡模型-give me some credit数据集,AUC 0.93 KS 0.71

    信用风险计量模型可以包括跟个人信用评级,企业信用评级和国家信用评级.人信用评级有一系列评级模型组成,常见是A卡(申请评分卡).B卡(行为模型).C卡(催收模型)和F卡(反欺诈模型). 今天我们展示的是 ...

  9. [机器学习] 信用评分卡中的应用 | 干货

    背景介绍与评分卡模型的基本概念 如今在银行.消费金融公司等各种贷款业务机构,普遍使用信用评分,对客户实行打分制,以期对客户有一个优质与否的评判.交易对手未能履行约定契约中的义务而造成经济损失的风险,即 ...

  10. 信用评分卡 (part 5 of 7)

    时值蚂蚁上市之际,马云在上海滩发表演讲.马云的核心逻辑其实只有一个,在全球数字经济时代,有且只有一种金融优势,那就是基于消费者大数据的纯信用! 我们不妨称之为数据信用,它比抵押更靠谱,它比担保更保险, ...

最新文章

  1. java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))
  2. Linux 下修改hosts文件
  3. Atcoder Keyence Programming Contest 2020 D - Swap and Flip
  4. [Leetcode]@python 90. Subsets II.py
  5. 恭喜!清华大学,再添院士!
  6. python正则匹配ip_[求助] 正则表达式匹配 IP 地址的问题求助
  7. 一种C/S架构下的 RSA + AES 组合加密方案业务流程
  8. 【原】小程序常见问题整理
  9. zoj 3747 dp递推
  10. 一步一步安装 Windows Server 2008 Beta3(Code Name Longhorn)
  11. IIS下发布关于Excel导入导出时遇到的问题集锦
  12. 使用ceres库将经纬度坐标GCJ02到WGS84精确转换
  13. 无法安装visual studio code,snap vscode has install-snap change in process
  14. 用户认证授权系统方案思考
  15. new bmap.label支持html,百度地图api使用文档marker标注label使用
  16. 从零开始学习信号完整性(SIPI)--2
  17. ZCU104开发板:开发板组件描述
  18. 乌班图Ubuntu系统安装nacos
  19. 【电化学】-物质传递(迁移与扩散)
  20. 萌新如何用板绘画好原画?怎么选择数位板?零基础板绘入门干货篇

热门文章

  1. 泛函分析之集合的映射和可数集与不可数集
  2. 曾用心并深度参与的一款游戏今天发布了关服通知,回顾一下我最初的工作日报
  3. 数据流程分析【停车场管理系统】
  4. 华为手机为什么打不开微信连接到服务器,华为手机微信打不开如何解决? 华为手机微信打不开解决方法介绍!...
  5. ES6 import命令和import()函数区别
  6. PMP考试必备-常见翻译问题(三)
  7. 区块链全球社区协作工具,就用超级表格!
  8. ios 描述文件位置
  9. 荣耀 android 11 rom,华为荣耀畅玩4/4X CM11 七版通刷
  10. 了解Java对象(抽象和具体)