EDA (Exploratory Data Analysis),也就是对数据进行探索性的分析,从而为之后的数据预处理和特征工程提供必要的结论。

针对数据集导入和数据的读取不再赘述,是数据集格式而定。

格式:.csv / .json / .txt .e.t.c

参见:关于 EDA 的 Blog

我想就以下几个问题谈谈我认识的和学到的 EDA。

  1. 数据总览;
  2. 判断数据缺失和异常;
  3. 了解预测值的分布;
  4. 数字特征分析;
  5. 类型特征分析。

数据总览

为了熟悉数据的相关统计量,此前我一直使用的是 describe( )。

优点: 其统计结果中有每列的统计量【个数 count、平均值 mean、方差 std、最小值 min、中位数25% 50% 75% 、以及最大值】

方便瞬间掌握数据的大概的范围以及每个值的异常值的判断

e.g. 999 9999 -1 等值这些其实都是 nan 的另外一种表达方式

我想说的是还有另外一种数据总览的方法 info( )。

优点: 了解数据每列的type,有助于了解是否存在除了 nan 以外的特殊符号异常。

describe() 的结果就不展示了,比较直观,针对 info() 的结果展示一个范例。

判断数据缺失和异常

说白了还是针对 nan 类型的

如果 nan 的数量很小一般选择填充,如果使用 lgb 等树模型可以直接空缺,让树自己去优化,但如果 nan 存在的过多、可以考虑删掉


补充:

  nan,即非数值,不等于任何数,也不等于 nan 本身

  是否为 nan 类型的判断方式:isnan( ) or isnull( )


面对缺省值的三类处理方法:

  1. 用平均值、中值、分位数、众数、随机值等替代。

效果一般,因为等于人为增加了噪声。

  1. 用其他变量做预测模型来算出缺失变量。

效果比方法1略好,
但有一个根本缺陷

如果其他变量和缺失变量无关,则预测的结果无意义。

如果预测结果相当准确,则又说明这个变量是没必要加入建模的。一般情况下,介于两者之间。

  1. 最精确的做法,把变量映射到高维空间。

For Example: 性别,有男、女、缺失三种情况,则映射成3个变量:是否男、是否女、是否缺失。

连续型变量也可以这样处理。比如Google、百度的CTR预估模型,预处理时会把所有变量都这样处理,达到几亿维。

这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值、不用考虑线性不可分之类的问题。缺点是计算量大大提升。

而且只有在样本量非常大的时候效果才好,否则会因为过于稀疏,效果很差。

了解预测值的分布

  1. 总体分布概况(无界约翰逊分布等)

针对预测值的特征寻找最佳拟合曲线,对数 / 正态 / 无界 Johnson SU

  1. 查看 skewness and kurtosis

分别对应数据的偏度 .skew( ) && 峰度 .kurt( )

参见:偏度峰度简介及实现

  1. 查看预测值的具体频数

通过直方图可视化预测数据,可以得到频数

处理方法: 把值较少的部分填充或者删掉

处理过后的数据比较集中,可以在预测之前先进行变换,一般进行 log 变换,使得数据均匀化分布

特征分析

  1. 特征 nunique 分布
  2. 数据可视化

数字特征分析

1
2
numeric_features = Train_data.select_dtypes(include=[np.number])
numeric_features.columns

类型特征分析

1
2
categorical_features = Train_data.select_dtypes(include=[np.object])
categorical_features.columns

nunique 分布

针对 object 类型字段特征

1
2
3
4
5
6
for feature in categorical_feas:
print(feature + "的特征分布如下:")
print(data_train[feature].value_counts())
if feature != 'communityName':
plt.hist(data_all[feature], bins=3)
plt.show()

根据结果找到分类结果的分布特征情况

数据可视化

作为一种工具,旨在展现数据或者特征之间的关系

参见:数据可视化参数调整

数据关系可以分为四种类型:

  1. 比较: 比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;

  2. 联系: 查看两个或两个以上变量之间的关系,比如散点图;

  3. 构成: 每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图;

  4. 分布: 关注单个变量,或者多个变量的分布情况,比如直方图。

参见:数据可视化是一种技能