一、数据清洗
在讨论具体的方法前,想讨论一个大前提,数据的预处理是否是测试集和训练集一起进行?答案是不要。
简单而言,就是不应当把测试的信息引入训练中。但在确定预处理方法后,测试集应进行同样的处理,因为机器学习的一个假定,就是样本服从独立同分布。
数据缺失
一般可从样本维度和变量维度检视,更常见的是变量维度的缺失,实际上,变量缺失的原因才是最关键的。
例如,某些特定样本,基本所有变量缺失,是IT系统问题、风控流程环节导致?某些变量缺失率较高,是业务合理(如非强制录入项)、数据加工错误(表关联的问题居多)?
样本维度,如果某些样本,大多数变量均缺失,则直接删除样本。
变量维度,缺失值较多的话,可转换为“有\无”的类别性变量,缺失值较少则进行填充。
根据样本间的相关性填充:
1、变量分布的常见值,如中位数、均值、众数等,采用哪种方式填充,一方面可实验进行,一方面需要根据变量本身分布的特点决定。如接近正态分布,则选择均值,偏态分布选择中位数。
2、用上下数据进行填充,一般时序类的变量可尝试该方法。
根据变量间的相关性填充,常用的如RF、KNN等填充。
最后,对于传统评分卡建模方法,缺失值可单独作为一组,保留计算WOE,关键在于分组内客群的风险表现是一致的。另外的考虑,则是填充毕竟相当于认为引入了噪声,均值简单填充效果不会太好,用其他变量预测填充,需要有一个强假设,变量之间是相关的,方可预测,但一般来说,可很好预测的变量,也没太大必要进行入模。
比较推荐的还是单独一组或进行one-hot编码(其实也是保留缺失),或者考虑使用不限制缺失值的算法(xgb、rf、lgb是否支持要搞搞清楚)。
异常值检测
略。
脏数据处理
如注册时间,为1970-01-01 23:59:59,明显不符合业务规则;或由系统时区配置,导致时间异常,则可进行修复。
二、常用技巧
log转换:非线性关系为线性关系,降低变量值跳跃的影响。
U型特征转为单调:转化成中值差值的绝对值。
数据质量的常见问题:数据来源多样,格式不统一;数据不准确,如客户A在数据库B、C的年龄分别记录了为23、70岁。
附,参考资料:
1、评分卡模型开发-用户数据缺失值处理,https://blog.csdn.net/lll1528238733/article/details/76599626
2、机器学习中,对于数据的预处理是否是测试集和训练集一起进行,https://www.zhihu.com/question/312639136/answer/601839910