文章目录
在数据分析/挖掘项目中,通常会包括 需求确定、数据处理、模型建立、落地应用。其中,数据处理又包括几个主要的内容,如下图所示:
在这个过程中,数据处理实际上有很多工作要做,在项目中通常花的时间比建立模型更长—— 数据决定了模型效果的上限,好的数据通常让模型有更好的效果。
因此,本文介绍在数据分析/挖掘中常见的数据问题及相应的处理,即上图中的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]区间。
X ′ = X − X m i n X m a x − X m i n X'=\frac{X-X_{min}}{X_{max}-X_{min}} X′=Xmax−XminX−Xmin
3. 共线性问题
多重共线性是指自变量之间存在较强的、甚至完全的线性相关关系。 多重共线性造成的影响有:
- 模型难以分辨每个自变量对因变量的影响,模型稳定性降低,预测能力降低
- 模型结果解释性差(难以解释是共线性变量中的哪个变量产生的效果)
如在Kmeans聚类中数据经过归一化后,每个变量的重要性相同。假设存在阅读作品数、阅读时长等高度相关的特征,则模型计算距离时对阅读行为的权重相当于其他变量的两倍,影响了模型的效果。
因此,在数据处理中通常要对多重共线性进行识别和消除。
3.1 识别共线性
识别共线性问题通常有以下几种方法:
- 基于线性相关系数,如前面提到的Pearson相关系数,若高度线性相关则认为是共线性(最常用,4.1中详细介绍)
- 基于模型结果,如回归模型中系数的标准差很大,则可能有共线性问题
- 结合业务经验,如果原本没有预测作用的变量变得有很强的统计性,则可能有共线性问题
此外,在网上还看到方差膨胀因子、主成分分析、聚类等方法,识别的方式多种多样,需要根据实际情况选择合适的方法。
3.2 处理共线性
对多重共线性问题的处理则比较简单,一般有如下思路:
- 对成共线性的变量取舍,只保留其中一个
- 对成共线性的变量进行结合,生成一个新的变量
4. 变量筛选
在项目中,业务和数据分析同学会头脑风暴,找到很多可能对标签有影响的变量。
在众多的变量我们需要遵循“少而精”的原则,筛选出有效的变量来建模,原因在于——
- 提高模型效果,变量过多可能出现共线性问题,通常会降低模型效果
- 提高模型稳定性,过多变量的输入容易使模型出现过拟合等问题,后续应用中模型稳定性下降
- 提高模型训练效率,节省数据存储空间,相当于数据降维
本文介绍常见的几种变量筛选方法。
4.1 线性相关指标筛选
最常用且最简单的变量筛选方式是基于线性相关性进行筛选,包括两种思路——
- 自变量之间的线性相关性,即共线性问题,若多个自变量间中度以上相关,则只保留一个即可
- 自变量与因变量的线性相关性,如相关性很低,则考虑删除该自变量(当然也可能自变量与因变量成其他曲线关系,通过其他方式验证避免误删)
以Pearson相关系数为例,其计算公式如下:
R = C o v ( x , y ) σ x σ y = ∑ ( x − x ˉ ) ( y − y ˉ ) ∑ ( x − x ˉ ) 2 ∑ ( y − y ˉ ) 2 R=\frac{Cov(x,y)}{\sigma_x\sigma_y}=\frac{\sum(x-\bar x)(y-\bar y)}{\sqrt{\sum(x-\bar x)^2}\sqrt{\sum(y-\bar y)^2}} R=σxσyCov(x,y)=∑(x−xˉ)2