算法与实战 - 常见的数据处理技巧
文章目录
在数据分析/挖掘项目中,通常会包括需求确定、数据处理、模型建立、落地应用。其中,数据处理又包括几个主要的内容,如下图所示:
在这个过程中,数据处理实际上有很多工作要做,在项目中通常花的时间比建立模型更长——数据决定了模型效果的上限,好的数据通常让模型有更好的效果。
因此,本文介绍在数据分析/挖掘中常见的数据问题及相应的处理,即上图中的2-5步——
- 数据清洗(缺失值与异常值处理)
- 数据转换,即通过数学公式等方式将现有变量转化为更有效的变量
- 共线性问题,介绍共线性的判断和处理
- 变量筛选,即在多个变量中如何选出最有效的变量作为模型输入
1. 缺失值与异常值
缺失值和异常值应该是所有项目中都会遇到的问题,本节做简单介绍。
1.1 缺失值处理
缺失值是指我们抽取的数据中某些数据为空值,如NULL。常见的处理方式如下:
- 删除样本。删除掉有缺失值的样本,剩下的样本则是干净完整的。适合仅有少量样本带有缺失值的情况。
- 删除变量。这种方式通常用于删除某列大量为缺失值的情况。
- 替换。人为使用数据对缺失值进行替换,通常用众数、均值等,简单直观,但不一定符合实际分布。
- 赋值。即通过回归等方式预测最可能的替代值,严谨但成本高。
可以看到不同的处理方式适用于不同的场景,因此面对缺失值时都需要首先了解出现该问题的原因,再对症下药选择合适的方式处理。
1.2 异常值处理
异常值通常指数据样本中不符合业务逻辑的数据、出现频率很低的类别型数据、取值太大的数据等,比如没有登陆却有购买行为不合理、一天观看1000个视频取值太大、占比极低等。
很多数据挖掘模型对异常值敏感,如线性回归、Kmeans聚类等,异常值可能让模型出现过拟合、不稳定等问题。
对于异常值的处理比较简单,直接删除即可,得到比较干净的数据,提高后期模型的准确性和稳定性。
2. 数据转换
数据转换是指通过数学公式等方式将现有变量转化为更有效的变量。本节介绍四个常见场景。
2.1 衍生变量
衍生变量即是使用现有的数据,做简单的数据运算得到新的更适合于当前分析的变量。
如有观看视频总时长与观看视频个数的变量,可以得到每个视频的平均观看时长;消费总额与用户注册时长,可以得到年均消费、月均消费等。这些衍生变量在合适的场景下效果更好。
2.2 改变变量分布
对一些数据挖掘模型,变量成正态分布时效果较好,可参考特征工程——转换为正态分布。而实际场景中经常出现严重不对称的分布或者大偏差的分布,这样子的分布可能干扰模型的拟合。
通常的处理方式是对该变量做数学转换,得到新的变量(有着新的分布),使其近似正态分布。
常见的转换方式有:取对数、取倒数、开平方根、取指数等。
以取对数为例,假设我们查看用户的在线时长分布如下图左,大部分用户在线时长在左侧。
为了将其分布转化为近似正态分布,对用户的在线时长取对数,重新绘制分布直方图如下图右。
注意,这种方式虽然有时可以优化模型效果,但可解释性变差,需要做好权衡。
2.3 分箱转换
分箱转换主要针对连续型变量,通过将变量划分为不同的区间,转化为次序型变量,从而提高变量的预测效果。
以年龄为例,原本年龄可能从10-79共70个取值,通过分箱转换,每10岁为一个区间,则可转化为1-7共7个取值,可能更适合模型拟合。
2.4 数据归一化
数据归一化是指将数据按比例缩放至某个区间里,通常是[0,1]或[-1,1]。
在梯度下降中,归一化可以加速模型拟合;在涉及距离的模型中,归一化让不同的变量对模型的影响均等。
如在kmeans聚类中,需要先对数据进行归一化。
否则若某个变量的取值范围远远大于其余变量,则聚类结果基本取决于该变量。
常用的归一化方法是min-max归一化,使用下述公式将变量缩放至[0,1]区间。
3. 共线性问题
多重共线性是指自变量之间存在较强的、甚至完全的线性相关关系。 多重共线性造成的影响有:
- 模型难以分辨每个自变量对因变量的影响,模型稳定性降低,预测能力降低
- 模型结果解释性差(难以解释是共线性变量中的哪个变量产生的效果)
如在Kmeans聚类中数据经过归一化后,每个变量的重要性相同。假设存在阅读作品数、阅读时长等高度相关的特征,则模型计算距离时对阅读行为的权重相当于其他变量的两倍,影响了模型的效果。
因此,在数据处理中通常要对多重共线性进行识别和消除。
3.1 识别共线性
识别共线性问题通常有以下几种方法:
- 基于线性相关系数,如前面提到的Pearson相关系数,若高度线性相关则认为是共线性(最常用,4.1中详细介绍)
- 基于模型结果,如回归模型中系数的标准差很大,则可能有共线性问题
- 结合业务经验,如果原本没有预测作用的变量变得有很强的统计性,则可能有共线性问题
此外,在网上还看到方差膨胀因子、主成分分析、聚类等方法,识别的方式多种多样,需要根据实际情况选择合适的方法。
3.2 处理共线性
对多重共线性问题的处理则比较简单,一般有如下思路:
- 对成共线性的变量取舍,只保留其中一个
- 对成共线性的变量进行结合,生成一个新的变量
4. 变量筛选
在项目中,业务和数据分析同学会头脑风暴,找到很多可能对标签有影响的变量。
在众多的变量我们需要遵循“少而精”的原则,筛选出有效的变量来建模,原因在于——
- 提高模型效果,变量过多可能出现共线性问题,通常会降低模型效果
- 提高模型稳定性,过多变量的输入容易使模型出现过拟合等问题,后续应用中模型稳定性下降
- 提高模型训练效率,节省数据存储空间,相当于数据降维
本文介绍常见的几种变量筛选方法。
4.1 线性相关指标筛选
最常用且最简单的变量筛选方式是基于线性相关性进行筛选,包括两种思路——
- 自变量之间的线性相关性,即共线性问题,若多个自变量间中度以上相关,则只保留一个即可
- 自变量与因变量的线性相关性,如相关性很低,则考虑删除该自变量(当然也可能自变量与因变量成其他曲线关系,通过其他方式验证避免误删)
以Pearson相关系数为例,其计算公式如下:
R的取值范围为[-1, 1],正值表示正相关,绝对值越大线性相关性越强。对于R值,一般有经验性结论如下:
- ,表示低度线性相关
- ,表示中低度线性相关
- ,表示中度线性相关
- ,表示高度线性相关
4.2 R-Square筛选
R平方是在多元线性回归中经常使用的指标,表示模型输入的自变量在多大程度上可以解释因变量的变化,其计算公式如下:
在上式中,SSE为残差平方和,*度为变量数目P;SST为总平方和,*度为样本数量(N-1);SSR为回归平方和,*度为N-P-1,计算公式为 ,推导参考从统计学看线性回归(2)——一元线性回归方程的显著性检验。
因此R平方可以理解成通过自变量的解释,消除的因变量的波动,R平方越大,说明消除的波动越多,效果越好。
利用R平方筛选变量的方式一般用于线性回归或逻辑回归,筛选方式基于回归中的两个检验——具体可参考回归方程及回归系数的显著性检验。
1.使用F检验对回归方程进行检验
也称为方差分析,检验 与 是否存在线性关系。
,检验统计量为 ,给定显著性水平,则拒绝域为 。落在拒绝域说明 与 存在线性关系。
2.使用t检验或F检验对单个回归系数进行检验
也称为偏回归显著性检验,检验 与 是否存在线性关系。
以F检验为例,,检验统计量为 ,给定显著性水平,则拒绝域为 。落在拒绝域说明 与 存在线性关系。
基于这两种检验,筛选变量有如下方式——
- 向前引入法,即采用回归模型逐步引入自变量,每引入一个自变量,就对该变量进行F检验和t检验(或F检验),若检验通过,则保留该变量,否则删除该变量
- 向后剔除法,与第一种相反,先将所有变量全部放入回归模型,进行F检验和t检验(或F检验),逐个剔除不显著的变量
- 逐步回归法,前两种都属于贪心算法,筛选结果可能局部最优。该方法综合前两种方法,每引入一个自变量,就进行F检验和t检验(或F检验),若检验通过,则保留该变量。但每次加入新变量后,要对已经老变量重新检验,若不通过则删除。重复直到无法加入也无法删除为止
4.3 卡方检验筛选
卡方检验是一种非参数检验,用于检验两组变量之间是否独立。使用卡方检验筛选变量,即是检验每个自变量与因变量是否独立,若独立则考虑删除,参考卡方检验的特征选择。
卡方检验假设两组变量之间独立,得到取值的期望值,如下表中,上表为实际值,下表为期望值。
组别 | 肺癌 | 无肺癌 | 合计 |
---|---|---|---|
吸烟 | 480 | 120 | 600 |
不吸烟 | 150 | 250 | 400 |
合计 | 630 | 370 | 1000 |
组别 | 肺癌 | 无肺癌 | 合计 |
---|---|---|---|
吸烟 | 600*0.63 | 600*0.37 | 600 |
不吸烟 | 400*0.63 | 400*0.37 | 400 |
合计 | 630 | 370 | 1000 |
与实际值对比得到卡方值,计算公式如下:
卡方值越大,表示实际值与期望值偏差越大,查表判断是否拒绝即可。
以上是几种常见的筛选方法,此外,还有基于IV和WOE指标的筛选、基于算法模型(RF的特征重要性、降维算法)的筛选等。通常在变量筛选环节要尝试多种筛选方式,确定最终的结果,避免删除有用的特征。
Reference
-
《数据挖掘与数据化运营实战 思路、方法、技巧与应用》,卢辉