当前位置: 首页 > article >正文

风控模型面试常问问题

一、模型样本

1)风控建模的目标定义时为什么有灰样本?

灰样本的定义是源于在选取的建模样本数据中,不满足好坏定义条件的剩余样本,例如表现期不足、好坏程度不够等。灰样本的设置可以有效扩大好、坏样本之间的特征差异,不参与模型拟合的训练环节,这样可以促进模型得到较好的区分度效果。在模型测试环节,灰样本则需要加入样本群体分析中,以测试模型的泛化能力。具体灰样本的定义逻辑与应用场景,需要结合实际样本情况和业务需求而定,但目的与思路是一致的。

2)样本不平衡为什么对模型训练与应用效果有较大影响?

当建模样本数据不平衡时,模型在训练拟合过程中更容易偏向样本量多的类别,而很少在意样本量较少的类别,这样得到的模型在预测样本量较大的类别时,模型的整体准确度虽然表现很高,但在业务场景应用中是不合理的,即模型并没有按照实际需求合理学习与应用。

3)样本不均衡建模场景,为什么最好是采用过采样而不用欠采样方式?

建模样本数据量较少时,采用过采样方式可以有效利用已有样本数据,而欠采样方法会忽略数量有限的样本数据信息;当建模样本数据量较多时,过采样与欠采样的方法都可以考虑进行选择。

对于处理建模样本不均衡的情况,常用的方法有随机过采样、SMOTE法过采样、随机欠采样等方法。

4)样本数据不均衡情况,分层抽样的方法效果更好?

对于样本数据的不均衡情况,若采用随机抽样的方法来获取训练集与验证集,很有可能得到二者的目标变量占比存在很大差异,这样不利于后续的模型训练与模型测试,理由是两个样本数据的 分布差异过于明显。

若采用分层抽样方法,便可以有效避免以上情况,使得训练数据与验证数据的 目标占比分布一致,在模型测试环节更有合理性。

5)建模样本的噪音为什么会导致模型出现过拟合现象?

在训练样本数据中,如果存在的噪音数据(异常值)数量过多或者特征明显,会直接影响模型训练的效果。因为模型在训练拟合时,会较大程度学习到噪音数据的特征分布特点,忽略样本客观数据的整体规律,也就是实际业务数据输入与输出的真实关系。因此,在模型训练之前,需要对建模样本的异常数据进行处理,从而有效避免样本噪音数据对模型拟合干扰。

6)二分类模型为什么也可以实现多分类场景?

二分类模型训练完成后输出的是对正例值的预测概率,例如信贷风控的申请模型,概率值往往代表预测为坏用户的概率,取值越大说明风险越高。如果我们根据预测概率结果划分为多个连续区间,每个区间代表的风险程度是不同的,这样可以归纳为高风险、中风险、低风险等类型,其实属于一种多分类问题的场景。 

二、特征工程

1)相关性分析有什么作用?

通过特征相关性分析,可以量化分析特征变量之间的相关程度,对于相关性较强的变量进行筛选,不仅可以有效避免模型的共线性问题,保证模型应用的稳定性与适用性,而且还可以较大程度有效缩小模型训练的变量池范围,从而提高模型学习过程的效率。

此外,根据特征变量X与目标变量Y的相关性分析结果,可以提前了解自变量与因变量的关系程度,这在判断特征变量在模型的贡献性方面有一定的参考价值。

2)相关性分析的使用场景?

特征变量的相关性分析在数据测试、数据建模等场景中是非常重要的。

对于三方数据测试,我们可以根据特征的相关性分析,得到相关字段联系的量化指标,从而为字段选择与特征引入提供很 直观的参考价值;对于数据建模,特征的相关性分析已经成为一种标配,根据字段之间的相关性系数大小,可以筛选保留信息度较大的字段,不仅可以较大程度减弱模型拟合的共线性,而且可以提 高模型的精准度与区分度。

3)ONE-HOT编码与LABEL编码的区别?

onehot与label编码都是为了解决分类变量的编码问题,将分类变量转化为模型可以理解的数字。

onehot编码后生成的变量是具有意义的,但可能导致数据过于稀疏,并且有维度爆炸的问题。

label编码就是将分类变量转化为连续的数字,但特征取值并不一定有很好的解释性,例如特征“水果”的取值为“苹果、香蕉、西瓜”,label编码后得到的是“1、2、3”,三种类别没有排序属性,但转换后的数值有排序属性,虽然可以参与计算,但并没有实际的解释意义。再例如特征“学历”的取值为“研究生、本科、专科”,label编码后得到的是“3、 2、1”,转换后的数值虽然具有一定等级排序解释意义,但数值之间的权重差异并不能量化说明实际学历的属性。

4)特征缺失值与异常值处理的先后顺序?

先处理异常值,再处理缺失值。

如果缺失值处理在前,若通过常用的统计指标(最大值、最小值、平均值等)来填充,会将异常值数据考虑在内,这相当于将噪音数据成分植入到缺失单元,在一定程度上将异常值成分扩散, 直接影响数据的合理分布。

如果异常值处理在前,可以先将噪音数据影响的排除,然后采用合适的缺失值填充方法处理,可以较好保证特征数据分布的原有形态,对后续模型训练的影响也明显更 小。

5)特征的PSI稳定性评估作用是什么?

对于信贷风控的特征数据使用,特征的综合性能评估主要体现在区分度与稳定度两个方面,如果某特征的区分度指标表现很好,例如信息值IV,但这可能只是在当前时间窗的样本数据表现,更换临近时间窗的数据,可能指标偏差很大,说明稳定性能是不满足实际业务需求的。

因此,在数据测试、数据建模等场景,对于特征变量的性能测试与字段筛选,需要考虑特征在区分度与稳定度 均表现较好。其中特征的稳定度分析可以采用PSI指标来量化分析。

6)IV值为什么不是越大越好?

在一定合理范围内,特征的IV值越高,说明特征变量对目标变量的预测能力较好,但是当IV值表现很大时,例如IV=2,很可能是由于特征分箱区间的不合理导致的,例如某分箱区间的好、坏样 本数量的差异特别明显,这样算出的IV值会很高,实际上当前区间的信息并没有较好的业务解释性,也就是分布不合理,此种情况下的特征IV值没有较好的参考价值。

7)数据清洗时为什么对主键做重复值分析?

在探索样本数据的分布情况时,比较严谨的一个分析维度是对样本主键的重复情况进行了解。

如果存在部分样本主键ID有重复情况,需要进一步研究确认数据是否正常,一种情况是除了样本ID 相同,所有特征变量取值也相同,这种情形往往直接去重处理;另一种情况是样本ID相同,所有特征变量取值不完全相同,这种情形需要结合实际业务场景,看是否还有二级主键,例如客户层下的账户层,对其随机保留或根据条件筛选都需要分析场景。无论怎样,针对样本数据的探索分析,样本主键的重复情况是数据分析考虑维度的一个细节体现。

8)缺失率大如何处理?

特征的缺失率大小和业务解释含义没有直接关系,只是在策略开发或模型构建的具体实践中,对于特征的筛选往往更关注缺失率较小的字段。

但是我们需要明确的是,特征的缺失率大小只是数据分布的实际体现,而特征能否用来策略或模型的字段使用,需要客观分析特征取值的含义。例如,某特征是从三方数据接口引入的一个字段,代表是否命中多头黑名单,若命中则为1,未命中则缺失,这种情况下此特征较大概率可以作为一个策略来使用,而且对于反欺诈模型,也可以考虑将其作为模型训练的拟合字段。

因此,不是说缺失率越大就越不好,需要结合业务的可解释性来综合考虑。

模型上线

1)机器学习模型为什么要通过生成PMML文件进行部署?

当模型需要跨平台部署或反复调用时,可以将模型保存为pmml文件,例如通过随机森林决策 树算法建立好一个申请信用风险评分模型,现在需要将其部署到线上进行应用。

在模型训练时是采 用python来实现的,由于python系统内部有很多现成的算法库,构建机器学习模型非常方便。但是在生产环境上,很多情况下是通过Java语言实现,不能直接使用机器学习模型。这种情况下需要在 python中把训练好的模型保存为pmml文件,然后到Java环境中可以直接来调用。

2)为什么针对评分卡模型上线后的稳定性监测维度,除了模型分数还有变量分布?

模型上线后的稳定性监测是一项重要内容,模型评分的PSI稳定性分析只是从整体上量化评估了模型的波动程度,但是分数的PSI结果无论表现好坏,是无法判断具体的原因,也就是由于哪些变量分布导致整体分数的波动,尤其是针对分数PSI值较大时(0.1以上),一定需要对模型各个变量的取值分布进行PSI分析,这样才能明确模型波动的具体原因。

假设模型分数PSI明显小于0.1时,最好同时将各变量的PSI输出,模型稳定并不代表各个变量的分布都稳定,可能部分变量的波动恰好相互抵消才保证了模型整体的稳定。因此,在模型稳定性监测方面,模型分数与变量分布的波动程度指标都要同步分析才是最合理的。

9_4标题:

三、模型评估指标

1)AUC相同的两个模型区分度是否一致?

AUC是ROC曲线下的面积大小,是由横纵坐标TPR和FPR决定的。一般情况下,AUC值越大 说明模型的区分效果越好,但当两个模型的AUC值相等时,只能说明模型针对不同分类阈值下的整 体区分效果形同,但细化到模型性能的发展变化趋势,在模型体现上可能存在很大不同,具体需要 结合实际业务是重视模型的敏感度(TPR)还是特异度(TNR)。此外,评估分类模型的综合效 果,还需要分析KS、accuracy、recall、f1-score等指标。

2)F1分数评估分类模型的优势?

对于分类模型评估指标,精准率(precision)表示预测为正例的样本中预测正确的占比,召回率(recall)表示真实为正例的样本中预测正确的占比,二者分别代表了 “查的准” 和 “查的全”。

理想情况下是希望这两个指标取值越大越好,但实际情况是二者有相互制约关系,也就是说追求精准率越高则召回率越低,而追求召回率越高则精准率越低。为了兼顾这种关系,采取F1分数,公式为 = 2*查准率*查全率 / (查准率 + 查全率)。F1分数同时考虑了精准率和召回率,让二者同时达到最高,取一个平衡。我们在图中看到的平衡点就是F1分数得来的结果。

 

3)精准率和召回率在不同场景下应用

对于分类模型评估指标精准率(precision)与召回率(recall),虽然取值越高说明模型表现越好,但现实情况二者是相互制约的,因此在不同业务场景中,对指标分析的侧重点也是有区别的。

例如,对于疾病预测等场景,实际更关注的是模型对患病情况的预测能力和敏感程度,此时模型要尽可能提升召回率,而可以接受降低精准率;对于垃圾邮件识别等场景,实际更关注的是模型对垃圾邮件识别的准确率,此时模型可以适当的降低召回率而获得更高的精准率。

4)R2adj为什么比R2更合理?

对于多元线性模型,通过指标R2来评估模型效果会存在一个缺点:当模型特征变量的数量增加时,R2取值会相应增大,反映出模型的精度很高,但如果增加的特征变量与目标变量相关性不大时,此时模型的性能本质上并没有得到提升,而R2取值增大是无意义的。

为了避免这种情况,调整后R2指标同时考虑了样本量与特征数的影响来优化R2,使得调整后R2的取值不会随着特征自变量数量的增加而趋近于1,这样使得模型效果评估更为准确。

四、降低过拟合

1)L1/L2正则化的作用?

L1正则化是所有权重绝对值之和,可以产生稀疏模型,用于特征选择;

L2正则化是所有权重的平方和再开平方根,可以获得值很小的参数。

在模型拟合过程中,L1与L2都会倾向于让变量权值尽可能小,从而获取一个所有参数都表现较小的模型。由于参数值小的模型比较简单,可以适应不同的样本数据集,在一定程度上降低了模型过拟合程度。

2)交叉验证方法的核心思想?

交叉验证的核心思想是重复使用数据,将建模样本数据集进行拆分,然后组合成不同的训练集和测试集,在训练集中训练模型,在测试集中评价模型。在这样数据拆分的原理逻辑应用下,可以得到多个不同的训练集和测试集,其中某一个训练集的样本可能是下一个测试集的样本。

当我们对数据拆分的时候,是有偶然性发生的。针对单次样本划分构建出的模型可能有好有坏,可能做出的模型只是对这一种切分方式下的样本比较适合,但对于其他切分方式的样本数据可能效果就不好了,效果并不稳定,这对于泛化能力的证明是缺乏说服力的。交叉验证的目的是有效估计模型的测试误差,或称为泛化能力,然后根据模型验证的性能结果对比,选择精度较高的合适模型。

在实际工作场景中最常用的几种交叉验证方法,包括HoldOut交叉验证、KFold交叉验证、分层K-Fold交叉验证、Shuffle-Split交叉验证、Leave-P-Out交叉验证等。 以下是KFold的切分示意图:

 

3)模型迭代次数增加,为什么训练集误差降低而测试集的误差增大?

迭代次数过多导致模型出现过拟合现象,模型在训练样本上的学习能力过高,模型性能表现较好,模型拟合曲线与训练数据分布的契合度很高,但是对于测试新增数据的容错率降低,模型的泛化能力很弱,从而使模型误差较大。这种情况下,可以适当减少模型迭代次数、增加训练样本数据 量、添加正则化项约束等方法来降低模型过拟合情况。

五、逻辑回归&评分卡

1)逻辑回归在信贷领域的优缺点?

优点:

1. 实现简单,速度快,占用内存小,可在短时间内迭代多个版本的模型。

2. 模型的可解释性非常好,可以直接看到各个特征对模型结果的影响,可解释性在金融领域非常重要,所以在目前业界大部分使用的仍是逻辑回归模型。

3. (稳定性好)模型客群变化的敏感度不如其他高复杂度模型,因此稳健更好,鲁棒性更强。

4. 特征工程做得好,模型的效果不会太差,并且特征工程可以并行开发,大大加快开发的速度。

5. 模型的结果可以很方便的转化为策略规则,且线上部署简单。

缺点和局限性:

1. 容易欠拟合,相比集成模型,准确度不是很高。

2. 对数据的要求比较高,逻辑回归对缺失值、异常值、共线性都比较敏感,且不能直接处理非线性的特征。所以在数据清洗和特征工程上会花去很大部分的时间。

3. 在金融领域对场景的适应能力有局限性,例如数据不平衡问题,高维特征,大量多特征,逻辑回归在这方面不如决策树适应能力强。

2)逻辑回归为什么在金融领域应用广泛?

在金融领域中,实际业务的分类场景较多,例如风控场景的是否违约、是否流失等,营销场景 的是否价值客户、是否使用优惠等。

而对于解决分类问题的逻辑回归模型,相比决策树、贝叶斯、 K近邻、神经网络等模型,最突出的一个优点是模型的可解释性非常好,可以很直观的了解到各个 入模特征对模型结果的影响趋势与变化程度,而对于模型的可解释性,在金融业务领域是非常重要的,尤其是银行机构,对模型应用的业务解释能力要求较高,促使逻辑回归模型在银行等金融机构 的信贷等业务中应用非常广泛。

此外,逻辑回归模型还有其他较明显的优点,例如模型训练速度较快,有利于模型的快速迭代更新;模型部署较为方便,可以直接在风控决策引擎上部署模型参数;模型结果易于理解,可以很方便的转化为线上策略规则来应用。

3)逻辑回归和线性回归的区别?

逻辑回归是一种广义线性模型,它引入了 Sigmod 函数,是非线性模型,但本质上还是一个线性回归模型,因为除去 Sigmod 函数映射关系,其他的算法原理,步骤都是线性回归的。

逻辑回归和线性回归首先都是广义的线性回归,在本质上没多大区别,区别在于逻辑回归多了个 Sigmod 函数,使样本映射到[0,1]之间的数值,从而来处理分类问题。

另外逻辑回归是假设变量服从伯努利分布,线性回归假设变量服从高斯分布。逻辑回归输出的是离散型变量,用于分类,线性回归输出的是连续性的,用于预测。逻辑回归是用最大似然法去计算预测函数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合。

4)逻辑回归做分类的样本应该满足什么分布?

应该满足伯努利分布,逻辑回归的分类标签是基于样本特征通过伯努利分布产生的,分类器要做的就是估计这个分布。

5)逻辑回归解决过拟合的方法有哪些?

1. 减少特征数量,在实际使用中会用很多方法进行特征筛选,例如基于 IV 值的大小,变量的稳定性,变量之间的相关性等。

2. 正则化,常用的有L1正则化和L2正则化。

6)逻辑回归为什么要对特征进行离散化?

特征离散化是将数值型特征(一般是连续型的)转变为离散特征,例如评分卡中的woe转化,就是将特征进行分箱,再将每个分箱映射到woe值上,就转换为了离散特征。特征离散处理的最终实现目的是可以较好保证模型的性能,具体表现在以下几个方面:

1. 特征离散可以有效处理异常值数据,从而避免噪音数据对模型训练的影响;

2. 特征离散后可以降低模型的复杂度,降低了模型过拟合的风险,使模型表现更为稳定;

3. 特征离散后的区间分布具有独立的权重,可以提升的模型的训练效果;

4. 特征离散后数据稀疏向量之间的内积乘法运算速度增加,有利于模型的快速训练与迭代更新;

5. 特征数据分布得到简化,可以降低模型出现过拟合的现象;

6. 特征离散后便 于特征交叉,从而引入非线性分布,有效提高模型的表达能力。

7)逻辑回归中为什么要常常做特征交叉?

特征交叉也叫作特征组合,是将单独的特征进行组合,使用相乘/相除/笛卡尔积等形成合成特征,有助于表示非线性关系。比如使用 One - Hot 向量的方式进行特征交叉。这种方式一般适用于离散的情况,我们可以把它看做基于业务理解的逻辑和操作,例如经度和纬度的交叉,年龄和性别的交叉等。

逻辑回归模型属于线性模型,线性模型不能很好处理非线性特征,特征组合可以引入非线性特征,提升模型的表达能力。另外,基本特征可以认为是全局建模,组合特征更加精细,是个性化建模,但对全局建模会对部分样本有偏,对每一个样本建模又会导致数据爆炸,过拟合,所以基本特征+特征组合兼顾了全局和个性化。

8)逻辑回归建模中为什么要做WOE?

逻辑回归模型在实际业务中是具有较好解释性的,在建模时通过woe编码方式对特征变量进行处理,主要有以下优点:

1. 对连续型与离散型变量均可woe编码;

2. 可以将特征离散后的区间映射到woe值,有较好的解释意义;

3. woe编码可以直接处理特征缺失值情况;

4. 特征woe值分布可以体现出数据分布的单调性趋势,便于特征变量的筛选;

5. woe值的正负关系可以代表离散区间样本的好坏程度;

6. woe值转换后更便于IV值的推导与分析;

7. woe编码对原数据有标准化的意义,有利于模型变量的拟合。

9)逻辑回归为什么要将高度相关特征剔除?

在损失函数最终收敛的情况下,就算有很多相关度很高的特征,也不会影响模型的效果。假设一个特征将它重复100次,生成100个高度相关的特征。那么模型训练完之后,这100个特征和原来那一个特征扮演的效果一样,每一个特征的权重都是原来特征的1/100,只是可能中间很多特征的系数正负相互抵消了,比如做评分卡,如果引入了高度相关的特征,那么最后逻辑回归的系数符号可能就会不一致。

虽然高度相关特征对模型结果没什么大的影响,但还是要剔除相关性高的特征,原因是一个可以减少特征数量,提高模型的训练速度,减少过拟合的风险。二是去掉高相关特征可以让模型的可解释性更好。尤其在做评分卡时,为了使最后每个特征的系数符号一致,必做特征相关性筛选。

10)逻辑回归的特征系数的绝对值可以认为是特征的重要性吗?

首先特征系数的绝对值越大,对分类效果的影响越显著,但不能直接表示系数更大的特征重要性更高。因为改变变量的尺度就会改变系数的绝对值,而且如果特征是线性相关的,则系数可以从一个特征转移到另一个特征,特征间相关性越高,用系数解释变量的重要性就越不可靠。

11)数据归一化作用?

1. 数据归一到0和1,这样的话梯度下降会收敛的更快,相比不归一化,不会出现扁平的情况。

2. 数据归一化之后可以提高结果的精度,尤其在与正则化同时使用时,数据归一化可以避免由于特征取值范围差距过大,对取值较小特征的参数影响更大的问题。

12)逻辑回归模型为什么相比机器学习树模型更具有解释性?

逻辑回归模型是一种广义线性模型,模型拟合训练的函数结果会直观体现各入模变量的权重关 系,通过各变量X系数大小可以判断对目标变量Y的影响程度。

同时,在模型训练前的特征筛选环节,我们对特征变量的数据分布较为关注,无论特征是否经过WOE编码处理,变量离散后的单调性趋势往往是入模选择的标准之一,而这种单调性正是需要结合实际业务理解与数据分布形态来分析,可以合理描述出特征取值的变化对风控坏账率和通过率的影响,从而保证模型在最终应用层面 有很好的解释性。

对于银行等金融机构来讲,模型的解释性是非常必要的,因此逻辑回归算法在银行风控模型的开发上一直得到广泛应用。

13)逻辑回归怎么解决多分类问题?

softmax多分类

14)评分卡模型变量的稳定性评估,为什么采用PSI比CSI更便于从业务上量化?

对于评分卡模型的变量稳定性,PSI与CSI指标都可以用来评估,但二者除了原理逻辑差别外,在业务理解分析上也有很大不同。

• PSI:可以衡量模型分数或变量取值在不同样本分布的稳定性程度,其公式为:

其中,pct_cur、pct_dev分别代表测试样本占比、开发样本占比。PSI值越小,说明字段分布的稳定性越好,在业务中一般以0.01作为评估标准。

• CSI:表示两个样本不同区间占比差值与评分的乘积,其公式为:

其中,pct_cur、pct_dev分别代表测试样本占比、开发样本占比。CSI值结果有正负值的可能,反映的是各变量评分向高分数或低分数段波动的趋势(数值正负)和程度(数值大小),但是这种波动程度只能在当前模型各变量之间来衡量评估,不能与其他模型的变量来进行对比,并没有绝对业务值的参考。

因此,同样是评估模型的稳定性,PSI更便于结合实际业务来进行量化理解数据的稳定程度,而CSI更侧重体现变量评分的波动趋势。

 

9_5标题:

六、决策树

1)决策树模型的优缺点及适用性?

优点:

1. 

易于理解,决策树可以生成 IF .. TEHN 逻辑表达的树结构,可解释性很好。

2. 

3. 

相比逻辑回归对数据的处理较简单,不太需要做例如数据离散化,归一化等操作。

4. 

5. 

决策树是目前已知的对于处理非线性交互的最好的算法。

6. 

7. 

模型的效果比较好,例如随机森林, xgboost 都是基于决策树构建的。

8. 

缺点:

1. 

很容易在训练过程中生成过于复杂的树结构,造成过拟合。

2. 

3. 

不适合处理高维数据,当属性数量过大时,部分决策树就不适用了。

4. 

5. 

泛化能力能力比较差,对于没有出现过的值几乎没有办法。

6. 

2)决策树的原理以及树的构建过程

决策树时基于树的结构进行决策的,学习过程包括特征选择,决策树的生成和剪枝过程。决策树的学习过程通常是递归地选择最优特征,并用最优特征对数据集进行分割。开始时,构建根节点,选择最优特征,该特征有几种值就划分为多少子集,每个子集递归调用此方法,返回结点,返回的结点就是上一层的子节点,直到所有特征都已经用完,或者数据集只有一维特征为止。

3)ID3、C4.5、CART原理和异同点

1. 

ID3:选择最佳分割点是基于信息增益的,信息增益越大,表明使用这个属性来划分所获得的"纯度提升"越大。C4.5对ID3进行了改进,因为ID3使用的信息增益对数据划分时,可能出现每个结点只包含一个样本,这些子节点的纯度已经达到最大,但是,这样的决策树并不具有泛化能力,无法对新样本进行预测。且ID3不能处理连续型变量和缺失值。而C4.5使用信息增益率来选择属性,克服了信息增益选择属性时偏向选择值多的属性的不足。且可以处理连续型变量和缺失值。

2. 

3. 

C4.5:是基于ID3的改进版,只能用于分类。而 CART 树既可以做分类,也可以做回归。

4. 

5. 

CART:本质是对特征空间进行二元划分,所以 CART 生成的是一颗二叉树,且可以对类别型变量和数值型变量进行分裂。对分类型变量进行划分时,分为等于该属性和不等于该属性,在对连续型变量进行划分时,分为大于和小于,在做分类时使用的是 GINI 系数作为划分标准,在做回归时使用的是均方误差。

6. 

4)分类树和回归树的区别在哪里?

分类树以C4.5为例,在对一个特征进行划分时,是穷举这个特征的每一个阈值,找到使得特征<=阈值和特征>阈值分成的两个分支的熵的最大值,按照该标准分支得到两个新的节点,用同样的方法继续分支,直到得到种类唯一的叶子节点,或者达到预设的终止条件为止。

回归树的流程是类似分类树的,区别在于划分时的标准不再是最大熵,而是最小化均差,如果节点的预测值错的越离谱,均方差越大,通过最小化均差能够找到最可靠的分支依据。

5)决策树对缺失值是如何处理的?

决策树处理缺失要考虑以下3个问题:

1. 

当开始选择哪个属性来划分数据集时,样本在某几个属性上有缺失怎么处理:

2. 

a. 

忽略这些缺失的样本。

b. 

c. 

填充缺失值,例如给属性 A 填充一个均值或者用其他方法将缺失值补全。

d. 

e. 

计算信息增益率时根据缺失率的大小对信息增益率进行打折,例如计算属性 A 的信息增益率,若属性 A 的缺失率为0.9,则将信息增益率乘以0.9作为最终的信息增益率。

f. 

3. 

一个属性已经被选择,那么在决定分割点时,有些样本在这个属性上有缺失怎么处理?

4. 

a. 

忽略这些缺失的样本。

b. 

c. 

把待分类的样本的属性 A 分配一个最常出现的值,然后进行分支预测。

d. 

e. 

待分类的样本在到达属性 A 结点时就终止分类,然后根据此时 A 结点所覆盖的叶子节点类别状况为其分配一个发生概率最高的类。

f. 

6)决策树为什么不需要做归一化?

因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。树形结构按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。

7)如何解决决策树的过拟合问题?

有预剪枝和后剪枝两种方法,具体如下。

1. 

预剪枝的方法:通过提前停止树的构建而对树剪枝,是目前解决过拟合的主要方法。常用的剪枝条件包括限制树的深度,限制叶节点最小样本数,限制叶节点的最小样本权重,限制叶节点的信息增益值的阈值等。

2. 

3. 

后剪枝的方法:首先构造完整的决策树,允许树过度拟合数据,然后应单个结点代替子树,节点的分类采用子树的主要分类。剪枝方法有错误率降低剪枝,悲观错误剪枝,代价复杂度剪枝。

4. 

8)为什么信息增益偏向取值较多的特征(缺点)?

当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是固定的,因此信息增益更大,因此信息增益比较偏向取值较多的特征。

9)决策树算法的停止条件?

1. 

最小节点数:当节点的数据量小于一个指定的数量时,不继续分裂。两个原因:一是数据量较少时,再做分裂容易强化噪声数据的作用;二是降低树生长的复杂性。提前结束分裂一定程度上有利于降低过拟合的影响。

2. 

3. 

熵或者基尼值小于阀值:当熵或者基尼值过小时,表示数据的纯度比较大,如果熵或者基尼值小于一定程度数,节点停止分裂。

4. 

5. 

决策树的深度达到指定的条件:决策树的深度是所有叶子节点的最大深度,当深度到达指定的上限大小时,停止分裂。

6. 

7. 

所有特征已经使用完毕,不能继续进行分裂

8. 

10)决策树怎么做回归?

七、集成学习

1)什么是集成学习?

集成学习是一种优化手段和策略,通常是结合多个简单的弱分类器来集成模型组,分类器之间有差异性,符合好而不同的原则。

一般的弱分类器可以是决策树, SVM , kNN 等构成,其中的模型可以单独来训练,并且这些弱分类器以某种方式结合在一起去做出一个总体预测。集成学习就是找出哪些弱分类器可以结合在一起,以及如何结合的方法。

2)为什么要集成学习?

强分类器较难获得,集成学习将若分类器组合形成强分类器,实现难度更低;

3)集成学习有哪些框架和常用算法?

目前集成学习主要有 bagging , boosting两种:

1. 

bagging:对训练集进行随机子抽样,对每个子训练集构建基模型,对所有的基模型的预测结果进行综合产生最后的预测结果。如果是分类算法,则用多数投票法确定最终类别,如果是回归算法,则将各个回归结果做算术平均作为最终的预测值。常用的 bagging 算法:随机森林

2. 

3. 

boosting:训练过程为阶梯状,基模型按照次序进行训练(实际上可以做到并行处理),先给定一个初始训练数据,训练出第一个基模型,根据基模型的表现对样本进行调整,在之前基模型预测错误的样本上投入更多的关注,然后用调整后的样本训练下一个基模型,重复上述过程 N 次,将 N 个基模型进行加权结合,输出最后的结果。常用的算法有 GBDT , XGBOOST 等。

4. 

4)bagging和boosting 主要关注哪个?

偏差描述的是预测值与真实值的差距,偏差越大,越偏离真实数据。

方差描述的是预测值的变化范围,离散程度,方差越大,数据分布越分散。

bagging 主要关注的是降低方差, boosting 主要关注降低偏差。因为 bagging 采取分而治之的策略,对训练样本多次采样,训练多个模型做综合,减小分类器的方差; boosting 通过逐步聚焦于基分类器分错的样本,减小集成分类器的偏差。

4)集成学习常用的基分类器是决策树,为什么?

1. 

决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重;

2. 

3. 

决策树的表达能力和泛化能力,可以通过调节树的层数来做折中;

4. 

5. 

数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外, 在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性;

6. 

7. 

除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性;

8. 

5)集成学习一定要用弱分类器吗?

不一定,但通常用弱分类器集成,在 RF中通过随机特征或样本构造多样性,这样的单个模型效果通常较弱。弱只是实现多样性的一个结果。

bagging一般期望强的基模型,并且差异越大越好。在超参、样本、特征上都加上随机性,让模型的差异尽量大,而更大的模型空间,模型的差异有可能更大。实践中,一般随机森林都不剪枝就是一个典型的例子。boosting一般用欠拟合的弱分类器,基模型越强,留给boosting优化的空间就越小,可以自由调整两者的贡献。

八、随机森林

1)随机森林的优缺点?

优点:

1. 

训练可以高度并行化,训练速度快,效率高。

2. 

3. 

两个随机性的引入,使得随机森林不容易过拟合,具有很好的抗噪声能力。

4. 

5. 

由于每次不再考虑全部的特征属性,而是特征的一个子集,所以相对于 bagging 计算开销更小,效率更高。

6. 

7. 

对于数据的适应能力强,可以处理连续型和离散型的变量,数据无需规范化。

8. 

9. 

可以输出变量的重要程度,被认为是一种不错的降维方法。

10. 

缺点:

1. 

在某些噪声较大的分类问题和或回归问题上容易过拟合。

2. 

3. 

模型的可解释性比较差,无法控制模型内部的运行。

4. 

5. 

对于小数据或者低维数据,效果可能会不太好。

6. 

2)随机森林输出特征重要性的原理?

随机森林对于特征重要性的评估思想:判断每个特征在随机森林中的每棵树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小。其中关于贡献的计算方式可以是基尼指数或袋外数据错误率。

1. 

基于基尼系数:如果特征 X 出现在决策树 J 中的结点 M ,则计算节点 M 分枝前后的 Gini 指数变化量,假设随机森林由 N 棵树,则计算 N 次的 Gini 系数,最后将所有的 Gini 系数做一个归一化处理就得到了该特征的重要性。

2. 

3. 

基于袋外数据错误率:袋外数据指的是每次随机抽取未被抽取达到的数据,假设袋外的样本数为 O ,将这 O 个数据作为测试集,代入已生成好的随机森林分类器,得到预测的分类结果,其中预测错误的样本数为 X ,则袋外数据误差为 X / O ,这个袋外数据误差记为errOOB1,下一步对袋外数据的特征 A 加入噪声干扰,再次计算袋外误差errOOB2,假设随机森林由 N 个分类器,则特征 A 的重要性为: sum (errOOB2-errOOB1)/ N ,其依据就是,如果一个特征很重要,那么其变动后会非常影响测试误差,如果测试误差没有怎么改变,则说明特征 A 不重要。

4. 

3)随机森林模型为什么可以有效提高泛化能力?

随机森林的主要优点体现在随机性,包括 "随机选取样本" 和 "随机选取特征",这样可以有效保证模型的泛化能力。随机森林在模型训练过程中,首先通过自由采样的方法随机获取n个训练样本,然后在单个训练样本上随机选取部分特征,并从中选择最优特征来划分决策节点,最后得到n棵决策树学习器。

对于分类场景问题,随机森林采用多数投票的规则确定最终模型结果,而对于回归场景问题,随机森林是取多棵决策树预测值的平均数作为最终模型结果。

4)随机森林树深度可以比GBDT设置稍大一点?

随机森林模型在训练过程中,需要每棵随机决策树具有较强的表达能力,最终通过投票的方式决定模型的性能表现,从而可以降低过拟合现象,因此单颗树的学习深度较大,对模型是最终拟合偏差影响不大。

但是,GBDT模型的学习机制是依次加强前一棵树的表达能力,使得每颗树不需要 有太强的表达能力,否则很容易导致模型出现过拟合现象。

九、Adaboost

1)Adaboost 的算法原理和流程

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

算法流程:

1. 

给数据中每一个样本一个权重,若有 N 个样本,则每个样本的权重为1/N。

2. 

3. 

训练数据的每一个样本,得到第一个分类器。

4. 

5. 

计算该分类器的错误率,根据错误率计算给分类器分配的权重。

6. 

7. 

将第一个分类器分错的样本权重增加,分对的样本权重减少,然后再用新的样本权重训练数据,得到新的分类器。

8. 

9. 

迭代这个训练步骤直到分类器错误为0或达到迭代次数。

10. 

11. 

将所有的弱分类器加权求和,得到分类结果(分类器权重),错误率低的分类器获得更高的决定系数,从而在数据进行预测起关键作用。

12. 

2)Adaboost的优缺点?

优点:

1. 

分类精度高,构造简单,结果可理解。

2. 

3. 

可以使用各种回归分类模型来构建弱学习器,非常灵活。

4. 

5. 

不容易过拟合。

6. 

缺点:

1. 

训练时会过于偏向分类困难的数据,导致 Adaboost 容易受噪声数据干扰。

2. 

3. 

依赖于弱分类器,训练时间可能比较长。

4. 

3)Adaboost为什么分类精度较高且不易出现过拟合?

Adaboost模型的算法思想是根据分类器的错误率分配不同的权重系数,最后得到汇总加权的预测结果,也就是在模型训练过程中,使分类器分错的样本权重增加,分对的样本权重减少,然后再用新的样本权重训练数据,得到新的分类器,迭代训练步骤直到分类器错误为0或达到迭代次数,最后再将所有的弱分类器加权求和,得到分类结果(分类器权重),错误率低的分类器获得更高的决定系数,从而在数据进行预测起关键作用。

十、GBDT

1)GBDT 的原理

GBDT 是 boosting 的一种方法,主要思想是每一次建立单个分类器时,是在之前建立的模型的损失函数的梯度下降方向。损失函数越大,说明模型越容易出错,如果我们的模型能让损失函数持续的下降,则说明我们的模型在持续不断的改进,而最好的方式就是让损失函数在其梯度的方向上下降。

GBDT 的核心在于每一棵树学的是之前所有树结论和的残差,残差就是真实值与预测值的差值,所以为了得到残差,GBDT 中的树全部是回归树,之所以不用分类树,是因为分类的结果相减是没有意义的。

Shrinkage(缩减)是 GBDT 的一个重要演进分支, Shrinkage 的思想在于每次走一小步来逼近真实的结果,要比直接迈一大步的方式更好,这样做可以有效减少过拟合的风险。它认为每棵树只学到了一小部分,累加的时候只累加这一小部分,通过多学习几棵树来弥补不足。这累加的一小部分(步长*残差)来逐步逼近目标,所以各个树的残差是渐变的而不是陡变的。

GBDT 可以用于回归问题(线性和非线性),也可用于分类问题。

2)GBDT为什么不太适合用高维稀疏特征?

1. 

GBDT采用CART树算法在每个分裂节点遍历所有变量,是一个贪婪选择的过程,从候选特征集合中选出增益最大的特征做分裂,特征稀疏时,计算量大非常耗时;

2. 

3. 

如果划分过细,容易产生过拟合。加入有1w个样本,其中有10个样本的类别是1;有100维特征,其中f1特征的取值为0和1,且刚好这10个样本的f1特征值都是1,其余9990个样本的f1值是0(在高维稀疏的情况下这种情况很常见),很容易拟合出一个使用f1为分类节点的树直接将数据划分的很好,这种模型的泛化能力却很差。

4.  

高维稀疏特征通常使用LR模型,在高维稀疏空间中,往往样本更加线性可分。同时,LR正则项是对权重的惩罚,权重一旦过大,惩罚就会很大,进一步压缩权重,使之不过于太大。而树模型的正则项一般是叶子节点数或深度等。对于上面的case,决策树只需要一个节点就可以完美分割,惩罚项非常小。因此,带正则化的线性模型比较不容易对高维稀疏特征过拟合。

3)什么情景下GBDT不如LR?

先说说LR和GBDT的区别:

• 

LR是线性模型,可解释性强,很容易并行化,但学习能力有限,需要大量的人工特征工程;

• 

• 

GBDT是非线性模型,具有天然的特征组合优势,特征表达能力强,但是树与树之间无法并行训练,而且树模型很容易过拟合;

• 

当在高维稀疏特征的场景下,LR的效果一般会比GBDT好。原因如下:

先看一个例子:

假设一个二分类问题,label为0和1,特征有100维,如果有1w个样本,但其中只有10个正样本1,而这些样本的特征 f1的值为全为1,而其余9990条样本的f1特征都为0(在高维稀疏的情况下这种情况很常见)。

我们都知道在这种情况下,树模型很容易优化出一个使用f1特征作为重要分裂节点的树,因为这个结点直接能够将训练数据划分的很好,但是当测试的时候,却会发现效果很差,因为这个特征f1只是刚好偶然间跟y拟合到了这个规律,这也是我们常说的过拟合。

那么这种情况下,如果采用LR的话,应该也会出现类似过拟合的情况呀:y = W1*f1 + Wi*fi+….,其中 W1特别大以拟合这10个样本。为什么此时树模型就过拟合的更严重呢?

仔细想想发现,因为现在的模型普遍都会带着正则项,而 LR 等线性模型的正则项是对权重的惩罚,也就是 W1一旦过大,惩罚就会很大,进一步压缩 W1的值,使他不至于过大。但是,树模型则不一样,树模型的惩罚项通常为叶子节点数和深度等,而我们都知道,对于上面这种 case,树只需要一个节点就可以完美分割9990和10个样本,一个结点,最终产生的惩罚项极其之小。

这也就是为什么在高维稀疏特征的时候,线性模型会比非线性模型好的原因了:带正则化的线性模型比较不容易对稀疏特征过拟合。

3)GBDT 和随机森林的异同点?

相同点:

• 

都是由多棵树组成,最终的结果都是由多棵树一起决定。

• 

不同点:

• 

集成学习:RF属于bagging思想,而GBDT是boosting思想

• 

• 

偏差-方差权衡:RF不断的降低模型的方差,而GBDT不断的降低模型的偏差

• 

• 

训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本

• 

• 

并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)

• 

• 

最终结果:RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合

• 

• 

数据敏感性:RF对异常值不敏感,而GBDT对异常值比较敏感

• 

• 

泛化能力:RF不易过拟合,而GBDT容易过拟合

• 

9_6标题:

十一、XGBoost

1)简单介绍一下XGBoost

首先需要说一说GBDT,它是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。

XGBoost对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。

2)XGBoost与GBDT有什么不同?

• 基分类器:XGBoost的基分类器不仅支持CART决策树,还支持线性分类器,此时XGBoost相当于带L1和L2正则化项的Logistic回归(分类问题)或者线性回归(回归问题)。

• 导数信息:XGBoost对损失函数做了二阶泰勒展开,GBDT只用了一阶导数信息,并且XGBoost还支持自定义损失函数,只要损失函数一阶、二阶可导。

• 正则项:XGBoost的目标函数加了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过拟合。

• 列抽样:XGBoost支持列采样,与随机森林类似,用于防止过拟合。

• 缺失值处理:对树中的每个非叶子结点,XGBoost可以自动学习出它的默认分裂方向。如果某个样本该特征值缺失,会将其划入默认分支。

• 并行化:注意不是tree维度的并行,而是特征维度的并行。XGBoost预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。

3)XGBoost为什么使用泰勒二阶展开?

• 精准性:相对于GBDT的一阶泰勒展开,XGBoost采用二阶泰勒展开,可以更为精准的逼近真实的损失函数

• 可扩展性:损失函数支持自定义,只需要新的损失函数二阶可导。使用泰勒展开取得二阶导数形式, 可以在不选定损失函数具体形式的情况下用于算法优化分析。本质上也就把损失函数的选取和模型算法优化/参数选择分开了。这种去耦合增加了XGBoost的适用性,使得它可以按需选取损失函数,可以用于分类,也可以用于回归。

4)XGBoost如何寻找最优特征?是有放回还是无放回的呢?

XGBoost在训练的过程中给出各个特征的增益评分,选择增益效果最大的特征作为分裂依据,从而得到每个特征对模型训练的重要性——从根到叶子中间节点涉及特征的次数作为该特征重要性排序。

XGBoost利用梯度优化模型算法,样本是不放回的。

5)XGBoost为什么可以并行训练?

• XGBoost的并行,并不是说每棵树可以并行训练,XGB本质上仍然采用boosting思想,每棵树训练前需要等前面的树训练完成才能开始训练。

• XGBoost的并行,指的是特征维度的并行:在训练之前,每个特征按特征值对样本进行预排序,并存储为Block结构,在后面查找特征分割点时可以重复使用,而且特征已经被存储为一个个block结构,那么在寻找每个特征的最佳分割点时,可以利用多线程对每个block并行计算。

6)XGBoost为什么运行快?

• 分块并行:训练前每个特征按特征值进行排序并存储为Block结构,后面查找特征分割点时重复使用,并且支持并行查找每个特征的分割点

• 候选分位点:每个特征采用常数个分位点作为候选分割点

• CPU cache 命中优化: 使用缓存预取的方法,对每个线程分配一个连续的buffer,读取每个block中样本的梯度信息并存入连续的Buffer中。

• Block 处理优化:Block预先放入内存;Block按列进行解压缩;将Block划分到不同硬盘来提高吞吐

7)XGBoost防止过拟合的方法?

XGBoost在设计时,为了防止过拟合做了很多优化,具体如下:

• 目标函数添加正则项:叶子节点个数+叶子节点权重的L2正则化

• 列抽样:训练的时候只用一部分特征(不考虑剩余的block块即可)

• 子采样:每轮计算可以不使用全部样本,使算法更加保守

• shrinkage: 可以叫学习率或步长,为了给后面的训练留出更多的学习空间

• 树深度:树的最大深度,相当于叶子节点数

8)XGBoost如何处理缺失值?

XGBoost模型的一个优点就是允许特征存在缺失值。对缺失值的处理方式如下:

• 在特征k上寻找最佳 split point 时,不会对该列特征 missing 的样本进行遍历,而只对该列特征值为 non-missing 的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找 split point 的时间开销。

• 在逻辑实现上,为了保证完备性,会将该特征值missing的样本分别分配到左叶子结点和右叶子结点,两种情形都计算一遍后,选择分裂后增益最大的那个方向(左分支或是右分支),作为预测时特征值缺失样本的默认分支方向。

• 如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子结点。

 

9)XGBoost中叶子结点的权重如何计算出来?

XGBoost目标函数最终推导形式如下:

利用一元二次函数求最值的知识,当目标函数达到最小值Obj*时,每个叶子结点的权重为wj*。具体公式如下:

10)XGBoost中的一棵树的停止生长条件?

• 当新引入的一次分裂所带来的增益Gain<0时,放弃当前的分裂。这是训练损失和模型结构复杂度的博弈过程。

• 当树达到最大深度时,停止建树,因为树的深度太深容易出现过拟合,这里需要设置一个超参数max_depth。

• 当引入一次分裂后,重新计算新生成的左、右两个叶子结点的样本权重和。如果任一个叶子结点的样本权重低于某一个阈值,也会放弃此次分裂。这涉及到一个超参数:最小样本权重和,是指如果一个叶子节点包含的样本数量太少也会放弃分裂,防止树分的太细。

11)XGBoost如何处理不平衡数据?

对于不平衡的数据集,例如欺诈场景坏客户少,肯定是极其不平衡的,这对XGBoost的训练有很大的影响,XGBoost有两种自带的方法来解决:

1. 如果你在意AUC,采用AUC来评估模型的性能,那你可以通过设置scale_pos_weight来平衡正样本和负样本的权重。例如,当正负样本比例为1:10时,scale_pos_weight可以取10;

2. 如果你在意概率(预测得分的合理性),你不能重新平衡数据集(会破坏数据的真实分布),应该设置max_delta_step为一个有限数字来帮助收敛(基模型为LR时有效)。

除此之外,还可以通过上采样、下采样、SMOTE算法或者自定义代价函数的方式解决正负样本不平衡的问题。

12)XGBoost中如何对树进行剪枝?

• 在目标函数中增加了正则项:使用叶子结点的数目和叶子结点权重的L2模的平方,控制树的复杂度。

• 在结点分裂时,定义了一个阈值,如果分裂后目标函数的增益小于该阈值,则不分裂。

• 当引入一次分裂后,重新计算新生成的左、右两个叶子结点的样本权重和。如果任一个叶子结点的样本权重低于某一个阈值(最小样本权重和),也会放弃此次分裂。

• XGBoost 先从顶到底建立树直到最大深度,再从底到顶反向检查是否有不满足分裂条件的结点,进行剪枝。

13)XGBoost为什么不做后剪枝?

后剪枝计算代价太高了,合并一次叶子节点就要计算一次测试集的表现,数据量大的情况下非常消耗时间,而且也并不是特别必要,因为这样很容易造成过拟合。

14)XGBoost如何选择最佳分裂点?

XGBoost在训练前预先将特征按照特征值进行了排序,并存储为block结构,以后在结点分裂时可以重复使用该结构。

因此,可以采用特征并行的方法利用多个线程分别计算每个特征的最佳分割点,根据每次分裂后产生的增益,最终选择增益最大的那个特征的特征值作为最佳分裂点。如果在计算每个特征的最佳分割点时,对每个样本都进行遍历,计算复杂度会很大,这种全局扫描的方法并不适用大数据的场景。

XGBoost还提供了一种直方图近似算法,对特征排序后仅选择常数个候选分裂位置作为候选分裂点,极大提升了结点分裂时的计算效率。

15)XGBoost的可扩展性如何体现?

• 基分类器的scalability:弱分类器可以支持CART决策树,也可以支持LR和Linear。

• 目标函数的scalability:支持自定义loss function,只需要其一阶、二阶可导。有这个特性是因为泰勒二阶展开,得到通用的目标函数形式。

• 学习方法的scalability:Block结构支持并行化,支持 Out-of-core计算。

16)XGBoost如何评价特征的重要性

我们采用三种方法来评判XGBoost模型中特征的重要程度:

• weight :该特征在所有树中被用作分割样本的特征的总次数。

• gain :该特征在其出现过的所有树中产生的平均增益。

• cover :该特征在其出现过的所有树中的平均覆盖范围。

注意:覆盖范围这里指的是一个特征用作分割点后,其影响的样本数量,即有多少样本经过该特征分割到两个子节点。

17)XGBooost参数调优的一般步骤

首先需要初始化一些基本变量,例如:

• max_depth = 5

• min_child_weight = 1

• gamma = 0

• subsample, colsample_bytree = 0.8

• scale_pos_weight = 1

(1) 确定learning rate和estimator的数量

learning rate可以先用0.1,用cv来寻找最优的estimators

(2) max_depth和 min_child_weight

我们调整这两个参数是因为,这两个参数对输出结果的影响很大。我们首先将这两个参数设置为较大的数,然后通过迭代的方式不断修正,缩小范围。

• max_depth,每棵子树的最大深度,check from range(3,10,2)。

• min_child_weight,子节点的权重阈值,check from range(1,6,2)。

如果一个结点分裂后,它的所有子节点的权重之和都大于该阈值,该叶子节点才可以划分。

(3) gamma

也称作最小划分损失min_split_loss,check from 0.1 to 0.5,指的是,对于一个叶子节点,当对它采取划分之后,损失函数的降低值的阈值。

• 如果大于该阈值,则该叶子节点值得继续划分

• 如果小于该阈值,则该叶子节点不值得继续划分

(4) subsample, colsample_bytree

• subsample是对训练的采样比例

• colsample_bytree是对特征的采样比例

both check from 0.6 to 0.9

(5) 正则化参数

• alpha 是L1正则化系数,try 1e-5, 1e-2, 0.1, 1, 100

• lambda 是L2正则化系数

(6) 降低学习率

降低学习率的同时增加树的数量,通常最后设置学习率为0.01~0.1

18)XGBoost模型如果过拟合了怎么解决?

当出现过拟合时,有两类参数可以缓解:

第一类参数:用于直接控制模型的复杂度,包括max_depth、min_child_weight、gamma 等参数。

第二类参数:用于增加随机性,从而使得模型在训练时对于噪音不敏感,包括subsample、colsample_bytree,还有就是直接减小learning rate,但需要同时增加estimator 参数。

19)XGBoost为什么相比某些模型对缺失值不敏感?

对存在缺失值的特征,一般的解决方法是:

• 离散型变量:用出现次数最多的特征值填充;

• 连续型变量:用中位数或均值填充;

一些模型如SVM和KNN,其模型原理中涉及到了对样本距离的度量,如果缺失值处理不当,最终会导致模型预测效果很差。而树模型对缺失值的敏感度低,大部分时候可以在数据缺失时时使用。原因就是,一棵树中每个结点在分裂时,寻找的是某个特征的最佳分裂点(特征值),完全可以不考虑存在特征值缺失的样本,也就是说,如果某些样本缺失的特征值缺失,对寻找最佳分割点的影响不是很大。因此,对于有缺失值的数据在经过缺失处理后:

• 当数据量很小时,优先用朴素贝叶斯

• 数据量适中或者较大,用树模型,优先XGBoost

• 数据量较大,也可以用神经网络

• 避免使用距离度量相关的模型,如KNN和SVM

20)XGBoost和LightGBM的区别?

1. 树生长策略:XGB采用level-wise的分裂策略,LGB采用leaf-wise的分裂策略。XGB对每一层所有节点做无差别分裂,但是可能有些节点增益非常小,对结果影响不大,带来不必要的开销。Leaf-wise是在所有叶子节点中选取分裂收益最大的节点进行的,但是很容易出现过拟合问题,所以需要对最大深度做限制 。

2. 分割点查找算法:XGB使用特征预排序算法,LGB使用基于直方图的切分点算法,其优势如下:

a. 减少内存占用,比如离散为256个bin时,只需要用8位整形就可以保存一个样本被映射为哪个bin(这个bin可以说就是转换后的特征),对比预排序的exact greedy算法来说(用int_32来存储索引+ 用float_32保存特征值),可以节省7/8的空间。

b. 计算效率提高,预排序的Exact greedy对每个特征都需要遍历一遍数据,并计算增益,复杂度为𝑂(#𝑓𝑒𝑎𝑡𝑢𝑟𝑒×#𝑑𝑎𝑡𝑎)。而直方图算法在建立完直方图后,只需要对每个特征遍历直方图即可,复杂度为𝑂(#𝑓𝑒𝑎𝑡𝑢𝑟𝑒×#𝑏𝑖𝑛𝑠)。

c. LGB还可以使用直方图做差加速,一个节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算

但实际上xgboost的近似直方图算法也类似于lightgbm这里的直方图算法,为什么xgboost的近似算法比lightgbm还是慢很多呢?xgboost在每一层都动态构建直方图, 因为xgboost的直方图算法不是针对某个特定的feature,而是所有feature共享一个直方图(每个样本的权重是二阶导),所以每一层都要重新构建直方图,而lightgbm中对每个特征都有一个直方图,所以构建一次直方图就够了。

1. 支持离散变量:无法直接输入类别型变量,因此需要事先对类别型变量进行编码(例如独热编码),而LightGBM可以直接处理类别型变量。

2. 缓存命中率:XGB使用Block结构的一个缺点是取梯度的时候,是通过索引来获取的,而这些梯度的获取顺序是按照特征的大小顺序的,这将导致非连续的内存访问,可能使得CPU cache缓存命中率低,从而影响算法效率。而LGB是基于直方图分裂特征的,梯度信息都存储在一个个bin中,所以访问梯度是连续的,缓存命中率高。

3. LightGBM 与 XGboost 的并行策略不同:

a. 特征并行 :LGB特征并行的前提是每个worker留有一份完整的数据集,但是每个worker仅在特征子集上进行最佳切分点的寻找;worker之间需要相互通信,通过比对损失来确定最佳切分点;然后将这个最佳切分点的位置进行全局广播,每个worker进行切分即可。XGB的特征并行与LGB的最大不同在于XGB每个worker节点中仅有部分的列数据,也就是垂直切分,每个worker寻找局部最佳切分点,worker之间相互通信,然后在具有最佳切分点的worker上进行节点分裂,再由这个节点广播一下被切分到左右节点的样本索引号,其他worker才能开始分裂。二者的区别就导致了LGB中worker间通信成本明显降低,只需通信一个特征分裂点即可,而XGB中要广播样本索引。

b. 数据并行 :当数据量很大,特征相对较少时,可采用数据并行策略。LGB中先对数据水平切分,每个worker上的数据先建立起局部的直方图,然后合并成全局的直方图,采用直方图相减的方式,先计算样本量少的节点的样本索引,然后直接相减得到另一子节点的样本索引,这个直方图算法使得worker间的通信成本降低一倍,因为只用通信以此样本量少的节点。XGB中的数据并行也是水平切分,然后单个worker建立局部直方图,再合并为全局,不同在于根据全局直方图进行各个worker上的节点分裂时会单独计算子节点的样本索引,因此效率贼慢,每个worker间的通信量也就变得很大。

c. 投票并行(LGB):当数据量和维度都很大时,选用投票并行,该方法是数据并行的一个改进。数据并行中的合并直方图的代价相对较大,尤其是当特征维度很大时。大致思想是:每个worker首先会找到本地的一些优秀的特征,然后进行全局投票,根据投票结果,选择top的特征进行直方图的合并,再寻求全局的最优分割点。

21)XGBoost建模之前是否进行相关性处理?

需要,逻辑回归中我们做相关性是为了对向量空间描述的更好。在XGBoost中主要是想去掉互相替代性较强的特征。比如一个特征给他找相关性特别强的9个特征放到模型里面,存成不同的名字,就会发现本来重要性是10,每划分一次,一个特征就比另一个好用那么一点,10个特征的重要性都变成了1,若使用feature_importance>5就会将特征给筛选掉了。

太多共线性特征的存在确实会使得模型的泛化性能下降,当然,这里指的是“过多”,如果是很少量共线性特征存在其实对于模型影响很轻微,但是如果存在大量共线性特征,尤其是比赛的时候暴力的特征衍生,会产生相当多相关性很高的特征,从而导致gbdt在训练的过程中重复采样相关性很高的特征,使得模型的效果变差。

十二、LightGBM

1)LightGBM为什么比XGBoost的算法效率更快?

XGBoost是使用基于特征预排序(pre-sorted)方法的决策树算法预排序算法,每次根据单个特征算分裂增益时,需要遍历所有样本的特征取值,时间效率复杂度为data*features。

LightGBM是使用基于特征直方图(histogram)方法的决策树算法,只需要遍历特征直方图分桶数 n次,时间效率复杂度为n*features。从内存消耗与时间效率上对比,LightGBM明显优于 XGBoost。

2)为什么LightGBM相比XGBoost算法来讲,可以有效降低模型过拟合程度?

XGBoost采用的是level-wise的分裂策略,对树的每一层所有节点无论增益大小都会进行无差别分裂,这样使得某些增益非常小的节点,虽然对结果影响不大,但还是强制分裂给算法效率带来 了不必要的开销。

LightGBM是采用了leaf-wise的分裂策略,即在当前树的所有叶子节点中,通过选择分裂收益最大的节点进行分裂。在这种情况下,当树节点的分裂次数相同时,leaf-wise方法 相比level-wise方法可以降低更多误差,得到较高的精度。但是,leaf-wise方法很容易促使树的深 度过大,导致模型出现过拟合现象。一般情况下,采用LightGBM构建模型时,需要重点对参数树的深度进行限制,以避免模型过拟合。

 

 

PSI的相关知识

计算步骤

step1:将变量预期分布(excepted)进行分箱(binning)离散化,统计各个分箱里的样本占比。

注意:

• 

a) 分箱可以是等频、等距或其他方式,分箱方式不同,将导致计算结果略微有差异;

• 

• 

b) 对于连续型变量(特征变量、模型分数等),分箱数需要设置合理,一般设为10或20;对于离散型变量,如果分箱太多可以提前考虑合并小分箱;分箱数太多,可能会导致每个分箱内的样本量太少而失去统计意义;分箱数太少,又会导致计算结果精度降低。

• 

step2: 按相同分箱区间,对实际分布(actual)统计各分箱内的样本占比。

step3:计 算各分箱内的A - E和Ln(A / E),计算index = (实际占比 - 预期占比)* ln(实际占比 / 预期占比) 。

step4: 将各分箱的index进行求和,即得到最终的PSI。

 

PSI的使用场景

PSI的实际分布和预期分布在不同的场景、不同类型下是不尽相同的。

如果按照使用场景划分,有以下三个阶段:

• 在建模时:以训练样本作为预期分布,以测试集或者跨时间样本(OOT)作为实际分布

• 灰度上线:以离线建模的样本作为预期分布,以灰度的陪跑样本作为实际分布

• 正式上线:以上线后第一个月的样本作为预期分布,以除第一个月后的每月样本作为实际分布

如果按照类型划分,有模型和入模变量两种:

• 模型分数:对模型输出的概率结果或者分数结果进行PSI稳定性的检验,使用场景可以为以上三种

• 变量值:对入模变量进行PSI稳定性的检验,使用场景同样为以上三种

举个例子,比如模型已经正式上线,我们通过监控报表发现近期通过率在不断地升高。这种波动或者异常说明模型可能在衰减,结果在发生偏移。为了验证我们的猜想,就需要计算模型逐月的PSI稳定性指标。

一般情况下,PSI稳定性指标的参考值如下:

0-0.1为好,0.1-0.25为一般,0.25以上为差

 


http://www.kler.cn/a/458238.html

相关文章:

  • 如何使用 JPA 实现分页查询并返回 VO 对象
  • Docker常用场景
  • 免费容器镜像服务--统信容器镜像平台
  • 简易屏幕共享工具-基于WebSocket
  • Creo许可错误解决方法
  • [羊城杯 2024]不一样的数据库_2
  • 计算机专业考研 408 学科学习方法
  • Linux(centos)安装 MySQL 8 数据库(图文详细教程)
  • 进阶岛-L2G5000
  • Kafka 监控都有哪些?
  • 【Golang 面试题】每日 3 题(八)
  • 可视化逻辑表达式编辑器
  • 计算机毕业设计Spark+大模型股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
  • 服务器开发Go语言的算法与数据结构
  • 随身 WiFi 连接 X-Wrt 共享网络与 IPv6 中继配置
  • 深入解析 Tengine:高性能 Web 服务器与反向代理的企业级应用
  • 【每日学点鸿蒙知识】Webview加载内容、router返回问题、Webview定制错误页面、html格式字符串、Toggle高
  • 深入探索Django:常用实用方法指南
  • 2025:Massa重新定义去中心化的一年
  • Nginx实现反向代理
  • 做一个网页控制ROS2机器人导航并且查看相机图像
  • 【探花交友】SpringCache
  • 应用于CPO封装模块内的光纤互联方案
  • django --递归查询评论
  • 如何将项目打包成 Docker 镜像并推送到 Docker Hub
  • 敏捷开发中的自动化脚手架在 HarmonyOS 的应用