算法与实战 - 常见的数据处理技巧


在数据分析/挖掘项目中,通常会包括需求确定、数据处理、模型建立、落地应用。其中,数据处理又包括几个主要的内容,如下图所示:
算法与实战 - 常见的数据处理技巧
在这个过程中,数据处理实际上有很多工作要做,在项目中通常花的时间比建立模型更长——数据决定了模型效果的上限,好的数据通常让模型有更好的效果

因此,本文介绍在数据分析/挖掘中常见的数据问题及相应的处理,即上图中的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=XXminXmaxXmin X'=\frac{X-X_{min}}{X_{max}-X_{min}}

3. 共线性问题

多重共线性是指自变量之间存在较强的、甚至完全的线性相关关系。 多重共线性造成的影响有:

  • 模型难以分辨每个自变量对因变量的影响,模型稳定性降低,预测能力降低
  • 模型结果解释性差(难以解释是共线性变量中的哪个变量产生的效果)

如在Kmeans聚类中数据经过归一化后,每个变量的重要性相同。假设存在阅读作品数、阅读时长等高度相关的特征,则模型计算距离时对阅读行为的权重相当于其他变量的两倍,影响了模型的效果。

因此,在数据处理中通常要对多重共线性进行识别和消除。

3.1 识别共线性

识别共线性问题通常有以下几种方法:

  • 基于线性相关系数,如前面提到的Pearson相关系数,若高度线性相关则认为是共线性最常用,4.1中详细介绍
  • 基于模型结果,如回归模型中系数的标准差很大,则可能有共线性问题
  • 结合业务经验,如果原本没有预测作用的变量变得有很强的统计性,则可能有共线性问题

此外,在网上还看到方差膨胀因子、主成分分析、聚类等方法,识别的方式多种多样,需要根据实际情况选择合适的方法。

3.2 处理共线性

对多重共线性问题的处理则比较简单,一般有如下思路:

  • 对成共线性的变量取舍,只保留其中一个
  • 对成共线性的变量进行结合,生成一个新的变量

4. 变量筛选

在项目中,业务和数据分析同学会头脑风暴,找到很多可能对标签有影响的变量。

在众多的变量我们需要遵循“少而精”的原则,筛选出有效的变量来建模,原因在于——

  • 提高模型效果,变量过多可能出现共线性问题,通常会降低模型效果
  • 提高模型稳定性,过多变量的输入容易使模型出现过拟合等问题,后续应用中模型稳定性下降
  • 提高模型训练效率,节省数据存储空间,相当于数据降维

本文介绍常见的几种变量筛选方法。

4.1 线性相关指标筛选

最常用且最简单的变量筛选方式是基于线性相关性进行筛选,包括两种思路——

  • 自变量之间的线性相关性,即共线性问题,若多个自变量间中度以上相关,则只保留一个即可
  • 自变量与因变量的线性相关性,如相关性很低,则考虑删除该自变量(当然也可能自变量与因变量成其他曲线关系,通过其他方式验证避免误删)

Pearson相关系数为例,其计算公式如下:
R=Cov(x,y)σxσy=(xxˉ)(yyˉ)(xxˉ)2(yyˉ)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的取值范围为[-1, 1],正值表示正相关,绝对值越大线性相关性越强。对于R值,一般有经验性结论如下:

  • 0R<0.30 \le |R| < 0.3,表示低度线性相关
  • 0.3R<0.50.3 \le |R| < 0.5,表示中低度线性相关
  • 0.5R<0.80.5 \le |R| < 0.8,表示中度线性相关
  • 0.8R10.8 \le |R| \le 1,表示高度线性相关

4.2 R-Square筛选

R平方是在多元线性回归中经常使用的指标,表示模型输入的自变量在多大程度上可以解释因变量的变化,其计算公式如下:
R2=1i(yiy^i)2i(yiyˉ)2=1SSESST=SSRSSTyiy^iyˉ R^2=1-\frac{\sum_i(y_i-\hat y_i)^2}{\sum_i(y_i-\bar y)^2}=1-\frac{SSE}{SST}=\frac{SSR}{SST}\\ 其中,y_i表示实际值,\hat y_i表示模型预测值,\bar y表示实际值的均值\\
在上式中,SSE为残差平方和,*度为变量数目P;SST为总平方和,*度为样本数量(N-1);SSR为回归平方和,*度为N-P-1,计算公式为 i(y^iyˉ)\sum_i (\hat y_i - \bar y),推导参考从统计学看线性回归(2)——一元线性回归方程的显著性检验

因此R平方可以理解成通过自变量的解释,消除的因变量的波动,R平方越大,说明消除的波动越多,效果越好。

利用R平方筛选变量的方式一般用于线性回归或逻辑回归,筛选方式基于回归中的两个检验——具体可参考回归方程及回归系数的显著性检验

1.使用F检验对回归方程进行检验

也称为方差分析,检验 yyx1,x2,...,xpx_1,x_2,...,x_p 是否存在线性关系。

H0:β0=β1=...=βp=0H_0: \beta_0=\beta_1=...=\beta_p=0,检验统计量为 F=SSR/PSSE/(NP1)F(P,NP1)F=\frac{SSR / P}{SSE /(N-P-1)}\sim F(P, N-P-1),给定显著性水平,则拒绝域为 F>F1α(P,NP1)F > F_{1-\alpha}(P,N-P-1)。落在拒绝域说明 yyx1,x2,...,xpx_1,x_2,...,x_p 存在线性关系。

2.使用t检验或F检验对单个回归系数进行检验

也称为偏回归显著性检验,检验 yyxix_i 是否存在线性关系。

以F检验为例,H0:βi=0H_0: \beta_i=0,检验统计量为 F=SSRSSRiSSE/(NP1)F(1,NP1)F=\frac{SSR -SSR_{-i}}{SSE /(N-P-1)}\sim F(1, N-P-1),给定显著性水平,则拒绝域为 F>F1α(1,NP1)F > F_{1-\alpha}(1,N-P-1)。落在拒绝域说明 yyxix_i 存在线性关系。

基于这两种检验,筛选变量有如下方式——

  • 向前引入法,即采用回归模型逐步引入自变量,每引入一个自变量,就对该变量进行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

与实际值对比得到卡方值,计算公式如下:
χ2=(AT)2Tχ2((R1)(C1))ATRC \chi^2=\sum\frac{(A-T)^2}{T}\sim \chi^2((R-1)*(C-1))\\ 其中,A为实际值,T为期望值,R为行数,C为列数
卡方值越大,表示实际值与期望值偏差越大,查表判断是否拒绝即可。

以上是几种常见的筛选方法,此外,还有基于IV和WOE指标的筛选、基于算法模型(RF的特征重要性、降维算法)的筛选等。通常在变量筛选环节要尝试多种筛选方式,确定最终的结果,避免删除有用的特征。

Reference

  1. 《数据挖掘与数据化运营实战 思路、方法、技巧与应用》,卢辉

  2. 特征工程——转换为正态分布

  3. 回归方程及回归系数的显著性检验

  4. 从统计学看线性回归(2)——一元线性回归方程的显著性检验

  5. 卡方检验的特征选择