模型设定的四个过程(这个模型开发前重要步骤有多少童鞋忘记细心做好)
模型设定的四个过程(这个模型开发前重要步骤有多少童鞋忘记细心做好)对于样本中的分类型变量,“婚姻状况”为无序型分类变量,“学历程度”与“住房类型”为有序型分类变量,对应的数据分布结果如图2所示。编辑添加图片注释,不超过 140 字(可选) 图1 样本数据
模型开发是一整套标准化的流程,从数据清洗,特征选择,变量选取,模型拟合,就像工厂上的流水线作业。今天我们选择在整个流水线中重要的一个环节,跟大家系统性地讲讲其中的编码方式。本次我们以时下最热门的xgb给大家实操讲解。在我们平时建模时,经常会采用XGBoost来训练模型,但是往往会遇到样本数据中存在或多或少的分类型字符变量,例如学历程度、住房类型等。因此,我们也常采用one-hot编码方式来进行处理,将分类型字符变量转换为数值型变量,以保证模型可以正常拟合训练。但是,为什么在XGBoost算法下需要对分类型变量做转换处理,原因是对于XGBoost模型来讲,使用的学习树都是cart回归树,意味着此类提升树算法只接受数值型特征输入,不直接支持类别型特征。在这种场景下,我们必须在XGBoost模型训练前,对分类型特征进行合适的特征编码处理。虽然one-hot编码比较常用,但结合不同的实际业务场景,掌握多种特征编码方法并进行应用,可以为我们的模型训练和模型优化提供更合适的处理途径。
本文将围绕以上业务场景,给大家介绍下针对XGBoost建模样本中分类型变量的几种常用特征编码方法,包括One-Hot编码、Label编码、Ordinal编码、Frequency编码、Mean编码等。在具体内容介绍中,我们通过具体的样本实操案例来同步实现,并重点描述下各特征编码方式的基本特点与应用思路。
1、案例样本介绍
本文案例样本数据如图1所示,其中,字段“婚姻状况”、“学历程度”、“住房类型”都为分类字符型变量。
编辑
添加图片注释,不超过 140 字(可选)
图1 样本数据
对于样本中的分类型变量,“婚姻状况”为无序型分类变量,“学历程度”与“住房类型”为有序型分类变量,对应的数据分布结果如图2所示。
编辑
添加图片注释,不超过 140 字(可选)
图2 样本描述分析
熟悉了样本的基本情况后,我们来根据不同的特征编码方式,来实现以上各分类变量的转换过程。
2、One-Hot编码
One-Hot编码(独热编码),是将分类变量转换为多个二进制新变量的过程,其中1代表具有当前标签属性,0代表不具有当前标签属性,生成的新字段数量与原特征类别数量相同,这种方法是最常用的特征编码方式。例如,某分类变量“信用评级”的取值分别为A、B、C、D,那么经过One-Hot编码转换后,会生成4个新的变量,同时取值结果为1/0(是/否)。这里需要注意的是,当分类型特征的取值数量较少时,One-Hot编码是非常有效果的,可以产生比较重要的新变量。但是当特征取值数量较多时,One-Hot编码会生成高维稀疏的特征,这样在XGBoost等树模型的训练过程中,很容易导致过拟合现象的出现。在Python语言中,One-Hot编码可以通过get_dummies( )函数来实现,具体代码如图3所示,输出结果如图4所示。
编辑
添加图片注释,不超过 140 字(可选)
图3 One-Hot编码代码
、
在Python语言中,One-Hot编码可以通过get_dummies( )函数来实现,代码如图3所示,部分结果如图4所示。
编辑
添加图片注释,不超过 140 字(可选)
图4 One-Hot编码结果
3、Label编码
Label编码(标签编码),假设某分类变量有n个取值类别,则按照特征数据的大小将特征编码为0~n-1之间的整数。在Python语言中,Label编码可以通过LabelEncoder( )函数来实现,具体代码如图3所示,输出结果如图4所示。
编辑
添加图片注释,不超过 140 字(可选)
图5 Label编码代码
编辑
添加图片注释,不超过 140 字(可选)
图6 Label编码结果
4、Ordinal编码
Ordinal编码(序号编码),是按照提前指定好的序号值给当前定序分类变量的类别进行编码。Ordinal编码与Label编码的逻辑很类似,最大区别在于Ordinal编码按顺序对类别进行赋值,以保证编码后保留原有的有序性。此外,Ordinal编码一般以序号1开始编码。例如,某分类变量“信用评级”的取值A、B、C、D,可以按照D-1、C-2、B-3、A-4的逻辑进行编码转换。在Python语言中,Ordinal编码可以通过temp_dict来赋值标签,具体实现代码如图7所示,输出结果如图8所示。
编辑
添加图片注释,不超过 140 字(可选)
图7 Ordinal编码代码
编辑
添加图片注释,不超过 140 字(可选)
图8 Ordinal编码结果
5、Frequency编码
Frequency编码(频率编码),是将特征取值类别的频率作为新的标签,这种方法可以反映出特征数据与目标变量的关系,具体实现代码如图7所示,输出结果如图8所示。
编辑
添加图片注释,不超过 140 字(可选)
图7 Frequency编码代码
编辑
添加图片注释,不超过 140 字(可选)
图8 Frequency编码结果
6、Mean编码
Mean编码(平均编码),也称目标编码,是对特征标签的每一个类别取值,通过目标变量在样本数据的平均值来表示,这种方法可以体现出特征相似类别之间的关系,具体实现代码如图9所示,输出结果如图10所示。
编辑
添加图片注释,不超过 140 字(可选)
图9 Mean编码代码
编辑
添加图片注释,不超过 140 字(可选)
图10 Mean编码结果
7、特征编码应用
以上介绍的几种特征编码方法,是我们在建模过程中经常采用到的,具体应用需要结合样本数据的实际情况。现回归到我们本文的场景需求,也就是通过特征编码处理后,采用XGBoost分类算法来建立模型。下面我们选取One-Hot编码后的数据训练模型,实现代码如图11所示。
编辑
添加图片注释,不超过 140 字(可选)
图11 XGBoost模型训练
模型训练后输出评估指标Accuracy与AUC结果如图12所示,分别为0.8518、0.5131。
编辑
添加图片注释,不超过 140 字(可选)
图11 模型评估指标
现将模型各变量的重要性系数输出,实现代码与输出结果分别如图12、13所示。由各特征变量的重要性可以看出,经过One-Hot编码处理后的某些特征变量(住房类型_自置有按揭、住房类型_其他、学历程度_高中/中专、学历程度_专科、住房类型_租房等),在模型中有着相对比较高的贡献度,这也能体现出特征编码在数据建模流程特征工程中的有效性。
编辑
添加图片注释,不超过 140 字(可选)
图12 特征重要性代码
编辑
添加图片注释,不超过 140 字(可选)
图13 特征重要性分布
综合以上内容,我们针对XGBoost建模过程中分类特征变量处理的业务场景,给大家介绍了几种常用特征编码方法,包括One-Hot编码、Label编码、Ordinal编码、Frequency编码、Mean编码等。同时,围绕实际案例样本数据,重点描述下各特征编码方式的基本特点与应用思路。最后,选取One-Hot编码处理的数据进行XGBoost模型训练,并得到较为合理的模型效果。当然,特征编码还有其他方法,但无论处理逻辑怎样变换,其目的就是通过合理且有效的方式,将分类特征引入到模型拟合变量池中,而且在实际建模中,可以尝试采用不同的特征编码处理方法,对比分析选择其中效果相对更好的方式。为了便于大家对不同特征编码方式在实际建模应用的进一步熟悉,我们准备了与本文内容同步的样本数据与Python代码,供大家参考学习,详情请移至知识星球查看相关内容。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
...
~原创文章