今天分享一个数据分析中最常见的概念:数据清洗。
很多时候,数据预处理和数据清洗、特征工程等混为一谈,以至于大家分不清到底哪一步用谁。
我个人的理解是:数据预处理主要是对数据集进行探索性分析,而特征工程则是进行分析后的相应处理。以上两个名词不常说,最常听的应该还是数据清洗,差不多也就相当于上面两个步骤。
例如:在预处理阶段发现数据存在缺失值、异常值;数据特征之间存在共线性;数据特征可以互相组合形成更好的特征等等。就可以在特征工程 阶段对上述发现的问题进行相应的处理。
以下总结了在数据预处理和特征工程阶段最常见的10个问题,基本上可以涵盖大多数的处理场景:
EDA:Exploratory Data Analysis,译为:探索性数据分析。
数据 EDA 是在拿到数据之后对数据进行初步探索认识的一个过程,在数据 EDA 阶段,并不对数据做任何处理,只进行数据探索,而在特征工程阶段会对数据进行相关操作。具体的,数据 EDA 有如下作用:
对于缺失值的处理有很多方法,在缺失率低的情况下可以对缺失数据进行填充,比如使用均值、众数、随机森林算法等进行缺失值填充;
另外,如果缺失值不能简单的填充,可以将缺失数据当做特征中的某个类别处理(具体的也可以在数据 EDA 中探索数据缺失的情况下和目标变量之间的关系)
如果某个特征的缺失程度过高,也可以直接剔除该特征。需要注意的是,在 xgb 和 lgb 模型中可以自动处理缺失值,所以不需要提前进行处理。(可参考 xgb 和 lgb 章节)
异常数据的检测有两种方法,基于统计的异常点检测和基于距离的异常点检测。
基于统计的异常点检测常用的有四分位法,通过上下四分位对异常数据进行筛选,特别的,在数据 EDA 阶段可以通过箱型图、小提琴图进行类似原理的检测。
基于距离的异常点检测可以参考聚类模型,通过欧氏距离公式计算点点之间的距离,并据此筛选异常数据。
对于异常数据,可以替换也可以删除;特别的,在风控模型中,会通过 WOE 转换对数据进行处理,将数据分成一箱一箱的,据此可以消除异常值对整体数据的影响。
特征工程总体来说是对数据进行处理、转换、筛选等,对在数据 EDA 阶段发现的缺失数据、异常数据等,都会在特征工程中进行处理,另外,对于特征的衍生、组合、转换等操作也会在此进行。
特征工程的目的就是通过数据预处理、特征衍生、特征筛选从而得到规整的数据和贡献度大的特征,使模型达到更好的效果。
特征工程的一般步骤包括数据预处理,特征转换和特征筛选三部分。
常用的特征衍生主要包括业务上的衍生和非业务上的衍生,整理如下:
风控模型中样本不平衡主要是因为坏样本的数量太少,坏样本受限于用户本来就较少,也因为风控策略的严格导致坏用户过少。在针对此类数据样本一般使用如下方法:
在开始建模前的最后一个步骤就是进行特征筛选,特征筛选就是从所有的特征中筛选出贡献度最高的 m 个特征,使用筛选后的特征建模后有如下好处:
特征筛选常用的方法有过滤法、封装法和嵌入法,如何如下:
过滤法 Filter:
按照发散性或者相关性对各个特征进行评分,手动设定阈值或者待选择阈值的个数,选择特征。比较常用的方法有:方差过滤、卡方齐性检验、互信息法过滤、相关系数过滤、IV 值过滤,其中,后两个较常用。
嵌入法 Embedded:
先使用某些机器学习算法进行模型训练,得到各个特征的权重系数,根据系数从大到小选择特征。比较常用的方法有:基于随机森林、xgb、lgb 的嵌入法和使用惩罚项的模型的嵌入法(如岭回归,lasso 回归等)
上述提到的权重系数代表特征对于模型的某种贡献或重要性,比较树模型中的 feature_importances_ 属性。
包装法 Wrapper:
与嵌入法类似,包装法是一个特征选择和算法训练同时进行的方法,比较依赖于算法自身的选择。比较常用的方法有:递归消除法、启发式搜索(前向/后向选择法,逐步选择法)、随机搜索。启发式搜索较常用。
具体的,包装法在初始训练集上训练评估器,通过 coed_ 属性或者通过 feature_importances_ 属性获得每个特征的重要性;然后,从当前的一组特征中修剪最不重要的特征,重复递归该过程直到特征达到要求
推荐阅读