目录
数据首先应该明确三点:
- 如何确保自己准备好竞赛使用的算法模型
- 如何为数据集选择最合适的算法
- 如何定义可用于算法模型的特征变量
数据探索可以帮助回答以上这三点,并能确保竞赛的最佳结果。它是一种总结、可视化和熟悉数据集中重要特征的方法。数据探索有利于我们发现数据的一些特征、数据之间的关联性,有助于后续的特征构建。
数据探索可以分为三个部分:
- 赛前数据探索(即数据初探),帮助我们对数据有个整体性的认识,并发现数据中存在的问题,比如缺失值、异常值和数据冗余等
- 竞赛中的数据探索,通过分析数据发现变量的特点,帮助提取有价值的特征,这里可以从单变量、多变量和变量分布进行分析
- 模型的分析,可以分为特征重要性分析和结果误差分析,帮助我们从结果发现问题,并进⼀步优化。
3.1 数据初探
3.1.1 分析思路
在实际竞赛中,最好使用多种探索思路和方法来探索每个变量并比较结果。在完全理解数据集后,就可以进入数据预处理阶段和特征提取阶段了,以便根据所期望的业务结果转换数据集。此步骤的目标是确信数据集已准备好应用于机器学习算法。
3.1.2 分析方法
数据探索的分析主要采用以下方法:
- 单变量可视化分析:提供原始数据集中每个字段的摘要统计信息。
- 多变量可视化分析:用来了解不同变量之间的交互关系。
- 降维分析:有助于发现数据中特征变量之间方差最大的字段,并可以在保留最⼤信息量的同时减少数据维度。
通过这些方法,可以验证我们在竞赛中的假设,并确定尝试方向,以便理解问题和选择模型,并验证数据是否是按预期方式生成的。因此,可以检查每个变量的分布,定义⼀些丢失值,最终找到替换它们的可能方法。
3.1.3 明确目的
在竞赛中跳过数据探索阶段将会是⼀个很不理智的决定。由于急于进⼊算法模型阶段,很多选手往往要么完全跳过数据探索过程,要么只做⼀项非常肤浅的分析⼯作,这是大多数选手的⼀个非常严重且常见的错误。这种不考虑因素的行为可能会导致数据倾斜,出现异常值和过多的缺失值。对竞赛来说,这样会产生如下⼀些糟糕的结果:
- 生成不准确的模型
- 在错误的数据上生成精确的模型
- 为模型选择错误的变量
- 资源的低效利用,包括模型的重建
熟知可能会产生的不好影响有助于我们明确数据探索的主要目的。一方面,数据探索用于回答问题,测试业务假设,生成进⼀步分析的假设。另一方面,你也可以使用数据探索来准备建模数据。这两者有⼀个共同点,那就是使你对你的数据有⼀个很好的了解,要么得到你需要的答案,要么发展出⼀种直觉来解释未来建模的结果。
更进一步,将数据探索的目的具象化。这里整理出来了数据探索阶段必须要明确的 7 件事情,具体如下:
- 数据集基本情况:比如数据有多大,每个字段各是什么类型。
- 重复值、缺失值和异常值:去除重复值,缺失值是否严重,缺失值是否有特殊含义,如何发现异常值。
- 特征之间是否冗余:比如身高的单位用 cm 和 m 表示就存在冗余。我们可以通过特征间相似性分析来找出冗余特征。
- 是否存在时间信息:当存在时间信息时,通常要进行相关性、趋势性、周期性和异常点的分析,同时还有可能涉及潜在的数据穿越问题。
- 标签分布:对于分类问题,是否存在类别分布不均衡。对于回归问题,是否存在异常值,整体分布如何,是否需要积极性目标转换。
- 训练集与测试集的分布:是否有很多在测试集中存在的特征字段在训练集中没有。
- 单变量 / 多变量分布:熟悉特征的分布情况,以及特征和标签的关系。
下面是一个数据初探的基本例子,数据依然使用上一章实际案例中的房价(House Prices, kaggle)
见代码仓库
3.2 变量分析
接下来,我们再进行更细致的分析,不单是针对每个变量,更是分析变量之间的联系以及变量和标签的相关性,并进行假设检验,帮助我们提取有用特征。
3.2.1 单变量分析
单变量可以分为标签、连续型和类别型:
- 标签
毫⽆疑问,标签是最重要的变量,也是一次竞赛所追求的目标,我们⾸先应该观察标签的分布情况。 - 连续型
- 类别型
3.2.2 多变量分析
单变量分析与多变量分析这段内容见代码仓库。
3.3 模型分析
3.3.1 学习曲线
学习曲线是机器学习中被广泛使用的效果评估⼯具,能够反映训练集和验证集在训练迭代中的分数变化情况,帮助我们快速了解模型的学习效果。我们可以通过学习曲线来观察模型是否过拟合,通过判断拟合程度来确定如何改进模型。
学习曲线广泛用于机器学习中的模型评估,模型会随着训练迭代逐步学习(优化其内部参数),例如神经网络模型。这时用于评估学习的指标可能会最大化(分类准确率)或者最小化(回归误差),这也意味着得分越高(低)表示学习到的信息越多(少)。接下来,一起看一下在学习曲线图中观察到的⼀些常见形状。
- 欠拟合学习曲线
欠拟合是指模型无法学习到训练集中数据所展现的信息,这里可以通过训练损失的学习曲线来确定是否发生欠拟合。在通常情况下,欠拟合学习曲线可能是一条平坦的线或有着相对较高的损失,这也就表明该模型根本无法学习训练集。
下图展示了两类常见的欠拟合学习曲线,左图表示模型的拟合能力不够,右图表示需要通过进一步训练来降低损失。
3.3.2 特征重要性分析
通过模型训练可以得到特征重要性。对于树模型(比如 LightGBM 和XGBoost),通过计算特征的信息增益或分裂次数得到特征的重要性得分。对于模型 LR 和 SVM,则是使用特征系数作为特征重要性得分,例如LR,每个特征各对应一个特征系数 w w w, w w w 越大,那么该特征对模型预测结果的影响就会越大,就可以认为该特征越重要。我们假定特征重要性得分和特征系数 w w w 都是在衡量特征在模型中的重要性,都可以起到特征选择的作用。
对特征重要性的分析可用于业务理解,有些奇怪的特征在模型中起着关键的作用,可以帮助我们更好地理解业务。同时如果有些特征反常规,那么我们也可以看出来,可能它们就是过拟合的特征等。下图 是 Lasso 模型训练中每个特征的系数情况,可以看出既有特征系数高的,也有特征正负相关的。
![](https://i-blog.csdnimg.cn/blog_migrate/72e030e9c01bd64e616cade8f49bc69b.png)
3.3.3 误差分析
误差分析是我们通过模型预测结果来发现问题的关键。一般而言,在回归问题中就是看预测结果的分布,在分类问题中就是看混淆矩阵等。这么做可以帮助我们找到模型对于哪些样本或哪类样本预测能力不够从而导致结果不准确,然后分析造成结果误差的可能因素,最终修正训练数据和模型。
在真实的问题中,误差分析会变得更加细致。比如,在进行一个用户违约预估的⼆分类任务中,验证集结果中有 200 个错误分类样本,进⼀步分析发现有 70% 的错误分类样本是由于大量特征缺失而导致的误判,这时就需要进行调整,既可以通过挖掘更多能够描述这些误判样本的特征信息帮助增强模型的预测能力,还可以在模型训练中赋予这些误判样本更高的权重。