一、前情提要
该数据集最初来自美国国立糖尿病与消化与肾脏疾病研究所。数据集的目的是基于数据集中包含的某些诊断指标,诊断性的预测患者是否患有糖尿病。从较大的数据库中选择这些实例受到一些限制。特别是,这里的所有患者均为皮马印第安人血统至少21岁的女性。
二、内容
本次主要承接之前的《关于Pima数据集研究(4)--Model(模型初探)篇》做后续探索研究,主要内容是关于Pima数据的DC问题进行针对性的数据清洗重构与深入探索。
三、研究方法
本人是python系,本课题的研究方法与方案均是基于python进行扩展,研究工具包括Anaconda、panda、numpy、sklearn等第三方成熟开源框架。之前操作已在《关于Pima数据集研究(4)--Model(模型初探)篇》中进行了详细介绍。
四、重刷数据清洗(DC)
1、回顾
根据上一章模型初探的结果来看,之前做的数据清洗工作并不好。因此该章节主要介绍与之前DC不同的探索方式方法。首先回顾一下之前数据清洗都用了哪些方法:
a、Pregnancies:将数据通过IQR进行了阈值限制,并将超出阈值的数据进行拉回操作;
b、Glucose:通过IQR计算结果,将为0的数据拉回下限值;
c、BMI:将为0的数据通过中位数替换;
d、BloodPressure:将为0的数据通过回归算法替换;
e、SkinThickness:将为0的数据通过随机插补法进行数据替换;
f、Insulin:将为0的数据通过定向随机插补法进行数据替换;
g、Age、DiabetesPedigreeFunction、Outcome:均未进行处理;
通过之前的方法,我们来看一下可能存在哪些问题:
a、不同目标的数据分布是否相同,如果不相同,是否能够统一进行处理?
b、修复数据占比超过20%的有SkinThickness、Insulin,在统计学上需修复数据占该特征的20%以上则失去该数据意义,那强行修复后是否正有效?
c、随机插补法、中位数填补方法和保留原数据,哪个对最终效果更有效?
2、应对策略
a、比赛使用高分策略
这里我们先来看一下在kaggle上常用的高分方法,目标分类中位数回填,我们来看一下该方法的情况。
通过目标分类中位数数据来看,两个类别的中位数除了在Insulin上无差别以外,其他所有指标均有差异,且部分特征还存在较大差异,例如:Glucose、Age等。若我们通过不同目标分类的数据来进行异常数据填补的话,将能够更有效的捕捉到不同分类的数据分布。我们来看一下该方法的模型效果前后对比:
没错,我们看到了,相比之前的base模型,效果要高出不少。这么来看的确获得了相对较大的收益。但是往往“理想很丰满,现实很骨干”,如果通过该方法来进行数据修复的话,就会出现一个数据挖掘领域最常见的“数据泄漏”或“数据穿越”问题。说白了,也就是我们站在了未来的角度来预测已经发生的现象。
我们说明一下为什么不能使用该方法。在参加比赛中,为了获得高分经常会采用类似的方法,这样能够让我们的数据与目标更加贴合,最终的模型评分效果会更高。但是,在实际工作操作中,如果我们同样遇到了数据异常和目标未知的时候,该方法就变成了一个双向悖论的情况而无从下手。该现象在数据清洗的时候经常会发生,我们一定要避免这类问题。
b、实际生产中策略
通用的比赛策略在实际生产中不能用了。那我们通过传统的数据清洗策略来进行数据处理。我们秉着“发现异常,必须处理”的原则开展工作,我们先来看一下需要处理的数据都有哪些:
这里我已经将需要处理的数据转为了缺失值,上表显示的为缺失值数量和相应的占比情况。接下来我们通过不同的数据清洗方法来比较一下那种方法对最终的模型更有效:
1)、中位数替换:使用中位数替换缺失值
2)、均值替换:使用均值替换缺失值
3)、随机插补:
这里我们仍然延用之前提到的随机插补法来进行数据修复,再根据修复后的数据进行预测。由于每次修复都是随机且不可控的,因此这里不再展示数据分本,直接上效果:
从效果来看,该方法对于XGB这样的树模型有较好的效果。
4)、模型预测(该数据集最有效方法):
这里借助于之前kaggle比赛的套路。只不过我们通过无异常的所有数据先预测一个预测模型,模型效果如下:
根据模型的预测结果反向观察中位数,我们先来观察一下原始数据的中位数:
我们再来看一下模型预测后的中位数:
根据预测修复后的所有数据再搭建模型来进行最终模型预测,效果如下:
从结果来看,这类方法对于随机森林这样的树模型有较好的效果;
5)、异常删除:将缺失值直接剔除
6)、保持不变:
经过上述6中对比实验来看:
1、随机插补法和XGB预测后修复法对于模型有较好的效果,但其中随机插补法每次效果不稳定;
2、base版本的效果处于整体实验中等水平;
3、直接暴力中位数或均值替换对于模型来说出现负向效果;
4、暴力剔除法对于多模型来说不友好,仅对于随机森林这类的树模型不会产生影响。
根据总结发现,我们后续使用XGB预测后修复法来开展后续特征工程工作。这里说明一下,随机插补法每次产生的修复数据均是该特征现有值抽取后修复,每次产生结果不稳定,因此暂不采用此方法来进行后续工作;
五、重刷特征工程(DC)
在开启特征工程之旅之前,我们线来看一下通过预测中位数填补后的模型效果:
根据效果来看,XGB有了相对提升,随机森林保持不变,罗辑回归出现了下降。这里进一步证明了特征对于我们的LR模型来说影响性较大;不过如果我们看recall指标的话,整体都出现了较大的提升。特别是在随机森林的模型效果上,有较大的提升效果;对于我们的样本不均衡的数据来说,召回指标提升更有效;
之前我们只是加入了预测后的分类方向计算各个特征的中位数的特征,而这里我们考虑把最开始用于预测回填中位数的模型预测分类结果纳入做特征考虑,我们看一下模型效果:
根据结果我们看到,三个模型的acc都有较为明显的提升,并且召回的效果也有了较为明显的特征。说明这一个特征对于最终的模型有较为正面的影响;
我们之前采用过聚类的方案进行特征工程,但仅是单特征的聚类,且效果不佳,这里我们直接采用除目标意外的所有修复后特征来进行聚类,作为一列新特征加入到后续工作中。我们还是使用之前提到过的kmeans来进行聚类工作,先看看算法给我们推荐的K数量,效果如下:
通过上图我们发现,最大拐点出现在k=3的位置,但效果不是太明显,下面我们通过轮廓系数来观察一下;
通过上图进一步证实我们的k=3是最佳选择,因此我们除目标外的所有特征聚类数为3是最佳效果,我们再来观察一下加入聚类特征后的模型效果:
根据效果来看,加入聚类特征对与树模型来说并不会产生影响,但对于LR模型来说,效果会有小幅度提升。