因为本次任务是基础的数据预处理和数据集划分,所以本次讨论不涉及特征工程和模型相关的。
问题一 缺失数据
有很多人问到了缺失值处理的问题。统一汇总提问:
-
为什么需要处理缺失值?
确实值会影响模型训练,某些特征值确实,有可能使得该条样本完全是负样本,影响模型。 -
缺失率大于多少时应当抛弃该特征?
一半比例的数据可以丢弃 -
缺失值填充有哪些方法?
缺失值填充方法:- 特殊值、均值、中位数、众数等
- 随机插补法----从总体中随机抽取某个样本代替缺失样本
- 多重插补法----通过变量之间的关系对缺失数据进行预测,利用蒙特卡洛方法生成多个完整的数据集,在对这些数据集进行分析,最后对分析结果进行汇总处理
- 热平台插补----指在非缺失数据集中找到一个与缺失值所在样本相似的样本(匹配样本),利用其中的观测值对缺失值进行插补
- 拉格朗日差值法和牛顿插值法
缺失值不多的时候,有时也可以不用处理,xgb之类的模型可以处理
处理缺失值的时候大多会选用中位数、均值或是二者的融合来对数值型特征进行填补,使用出现次数最多的类别来填补缺失的类别特征。
-
采用均值填充的影响或者优缺点?
缺点:大大降低数据的方差,即随机性5 需要依据什么样的准则去选择合适的方法?
(1) 删除- 如果行和列的缺失达到一定的比例,建议放弃整行或整列数据(2) 插补
- 列的维度上,如果是连续性,就使用平均值插补,如果是离散性,就使用众数来插补
- 行的维度上,引入预测模型,可考虑辅助回归,通过变量间的关系来预测缺失数据
(3) 不处理
当缺失值对模型的影响不大时,直接在包含空值的数据上进行数据挖掘
- 需要依据什么样的准则去选择合适的方法?
具体可以看数据分布情况,及业务情况。常见的能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯、DBSCAN。
离群值如何处理
大多数的参数统计数值,如均值、标准差、相关系数 等,以及基于这些参数的统计分析,均对离群值高度敏感。因此,离群值的存在会对数据分析造成极大影响
特征太多了
这个情况在银行业普遍存在,当然,其他领域估计也会有。以我个人经历,在实际生产中会有一张表超过300个字段的情况,哪些字段该要哪些不该要确实比较麻烦。我采取的方式是首先去判断哪些字段值重复率较高,这个通过sql语句group by可以直接看出来。其次把数据通过spss对每一个特征进行分析,是绘图还是简单的分析,软件里面都有提供,基本上通过上面两步保证百分之七八十吧,如果仅仅是是在数据探索阶段的话,基本上就完成了
时间序列如何处理
依情况处理,主要看单独时间字段或时间字段与某些字段的组合属性对目标分析的作用程度,再采取相应方式来进行特征提取比如:可以将时间字段与其他字段属性进行组合,分析每天、每周、每月或特点星期几等情况下特征数据频率信息,总的来说还是得看分析得目标。
时间特征处理:Python标准库包含用于日期(date)和时间(time)数据的数据类型,而且还有日历方面的功能。参考资料:https://www.jianshu.com/p/29ece4592178 《利用Python进行数据分析·第2版》第11章 时间序列
某些特征编码问题
有些特征离散值有1000个,如何编码?
好像有两种编码,一种是one-hot,那就是彼此之间没关系。一种是dummy,那就是有顺序性的特征。或者城市那个特征,用map处理成一线城市、二线城市、三线城市等等,这样对城市进行归类。如果用数值来反映就会存在一个问题:因为1,2,3,4,5会导致有排序关系。所以会有依赖关系。所以我们就需要根据实际情况去判断,我们的类别间到底存不存在距离关系。比如成绩的 优良差。他们是有距离关系的,差和优的"距离"确实比 良和优的"距离”要远的。
数据不平衡问题
数据不平衡会导致衡量指标(如:准确率、召回率)异常的好。可以用上采样 、下采样 、smote等方法,这些都是从数据集数量本身的角度出发,增加少的类别 减少多的类别
关于过采样和欠采样推荐大家看一个博客,写的挺详细的https://blog.csdn.net/qq_27802435/article/details/81201357。另外这是imbalanced-learn的官方文档https://imbalanced-learn.readthedocs.io/en/stable/api.html,具体效果图里面都有。另附github链接:https://github.com/scikit-learn-contrib/imbalanced-learn/tree/12b2e0d2858a30d4687fbf910372b8f416b33998