梳理数据预处理与特征工程全流程

最近看了一些数据分析的案例,他们在前面分析了一通,从简单的均值、方差等统计指标,到不同特征的分布都研究了一遍,但是最后直接就建模,感觉从预处理到建模之间缺乏联系,所以我就在想,到底怎么正确地进行数据的预处理,怎么从中挖掘有用信息,辅助建模,这些都是很值得研究学习的问题。
梳理数据预处理与特征工程全流程_第1张图片
上面是一个经典的数据分析流程,而我想要研究的,其实就是图中的数据探索、预处理、特征工程,换句话说,就是拿到数据之后,到建模之前,我们到底要做些什么。

这次主要结合天池的O2O优惠券使用预测来进行讲解,基本上,我会从比较宏观的角度大致讲一下整个分析的框架,整理一些分析的要点,把分析的流程、目的串联起来,但是我不会深入探讨具体的分析操作。

关于数据预处理的目的,我看了一些资料,简单总结几点。

  1. 把原始数据转化为模型可分析的形式,比如存在缺失数据、类别数据用非数值形式表示,这些情况都需要我们做处理,不然模型是无法分析的;
  2. 分析数据的尺度,部分模型,比如线性回归、K-mean、KNN等,他们对于数据的尺度是比较敏感的,所以我们需要分析数据的最大最小值,看是否需要做处理;
  3. 分析数据的分布,这里有很大学问,有兴趣的朋友可以研究一下为什么数据服从正态分布时模型的性能会比较好;
  4. 根据具体业务场景,对数据进行相应的处理,辅助后续分析。

基于上述的几点目的,我们再来看看,在O2O优惠券使用预测中,可以怎么进行分析处理。

第一,拿到数据之后,往往会大致浏览数据,根据结果判断下一步的行动,

梳理数据预处理与特征工程全流程_第2张图片

像上面的结果,左图主要看数据类型,从中判断哪些是数值数据,哪些是非数值数据,中图,主要看数据的尺度,右图,主要看缺失情况。

我们一个个来看具体可以怎么处理,首先是缺失数据的处理,方法常用的有两种:

  1. 删除缺失值得行;
  2. 填充缺失值。

对于数据的尺度,有几种处理方法:

  1. z分数标准化
  2. min-max标准化
  3. 行归一化

对于非数值型数据的处理,相对来说比较麻烦,需要视情况而定,像本题的discount_rate,就可以根据定义直接转化为折扣率,有时候如果是文本数据,可以使用one-hot encoding、词袋模型、tf-idf等等,这里无法一次性总结出所有方法。

到这里,假设我们完成了前面的步骤,那么我们就已经得到了一个比较完整干净的数据集了,对照我们一开始提出的目的,已经完成了一二点了,接下来就是第三点,分析数据的分布。

分析数据的分布,其实就是分析每个特征的分布,具体我们可以通过图像的形式来观察,

  1. 直方图
  2. 箱线图
  3. Q-Q图

看数据分布的目的有两点,第一是看一下数据有没有呈现出偏态分布

梳理数据预处理与特征工程全流程_第3张图片
偏态分布为什么不好,对建模有什么影响,为什么很多模型都假设数据服从正态分布,有兴趣的朋友可以深入了解一下,这里只是谈一下怎么对数据进行处理,从而使数据转化为近似正态分布

  1. 删除异常数据
  2. 区间量化(分箱:固定宽度分箱、分位数分箱)
  3. 对数据进行变换(对数变换、指数变换、平方根变换、倒数变换等)

一般来说对数变换会使用得比较多,对数变换的优点大家也可以了解一下。

最后剩下第四点,根据业务场景对数据进行处理分析,这一步的自由度比较大,不能一概而论,像这题,他做的处理我觉得就很妙,题目给出了线上线下的两个训练集,有人就分析了线上线下的训练集和测试集的相关性,发现其实线下的训练数据和测试集相关度较高,而线上的训练数据则相关度较低,从而认为,线上数据对于分析预测帮助不大。

到目前为止,可以认为我们已经进行了比较完整的数据预处理,接下来就是特征工程,主要包括几点

  1. 特征生成
  2. 特征选择
  3. 特征转换

具体的操作上,特征生成需要根据业务知识进行判断,比如本题就增加了用户的消费总次数、用户收到的优惠券总数、用户从收到优惠券到使用优惠券的时间间隔等新特征。

特征选择,其实就是直接删除原始的特征,降低模型的复杂度,提高模型速度,也能减少噪声的影响,方法主要有几类

  1. 过滤(如通过计算特征与响应变量的相似度进行筛选,通过假设检验进行筛选)
  2. 打包方法(递归特征消除法)
  3. 嵌入式方法(将特征选择作为模型训练的一部分,如决策树)

特征转换,其实就是特征降维,即

  1. PCA
  2. LDA

根据我的经验,其实特征工程和建模是一个同时进行的过程,因为不论是增加新特征还是减少特征都和模型的性能息息相关,所以我们需要随时检验处理之后对于模型的影响,再回过头分析是否应该这样做,而这一切的大前提又是我们已经确定了应该使用哪个模型。

基本上,上面说的就是一般性的数据预处理和特征工程的内容,在实际工作中,除了上述的工作,还需要根据业务内容增加很多相应的分析。最后我想谈一下,所谓的数据分析思维是什么,我倒觉得他不是什么很神秘很高级的东西,主要还是看两点,第一,基础是否扎实,是否理解上面提到的所有知识点的含义,是否能把所有知识点串联起来,假如你把上面提到的内容都理解了,遇到新的问题的时候,就能有条理地入手进行分析了,第二,业务要熟悉,基础终究是一套通用的分析方法,具体情况还是要具体分析。

你可能感兴趣的:(数据科学)