目录
智能模型数据处理
重复值处理
一致性检验
数据交叉验证
线上线下验证
有效性检验
业务经验
数据分析
特征工程和特征筛选
探索性数据分析
字符型特征
缺失率过高
类别过少
异常值处理
智能模型数据处理
重复值处理
保证数据的唯一性也是数据清洗过程中需要关注的问题,过多重复数据会导致存储冗余,并且在表与表关联过程中,可能出现笛卡儿积造成内存溢出。去除重复数据的前提是确定该表对应的唯一主键,基于唯一主键再去做重复值的处理。通常金融机构内部大多数的表都是以客户ID作为主键,所有的数据都汇总到人的维度,但是对于信贷数据,一个客户可以多次申请,一次成功申请可以多次支用,一次成功支用可以多次还款,一次逾期还款可以对应多个催收阶段,不同环节数据源的主键都不相同,如果把这些表都汇总到人的维度显然是不合理的,因此只有弄清楚了唯一主键,才能够做到有效的去重。
一致性检验
数据不一致是大数据建模过程中经常面临的问题,无论是字段之间的不一致,还是相同字段线上线下的不一致,都可能导致线上模型的不可用,因此尽可能在建模初期的数据清洗阶段,就定位并解决这些不一致的问题。
数据交叉验证
在多个数据源中,可能存在多个字段具备相似的含义,这个时候就需要进行数据之间的交叉验证,来找出最权威的字段。例如客户年龄,可能存在平台业务(电商、出行)中填写的年龄、金融业务中填写的年龄、身份证号中解析的年龄这三类,从权威性的角度来说,应该是身份证年龄高于金融年龄高于平台年龄,因为首先身份证信息一定是真实的,其次对于信贷客户来说,他们更愿意在金融业务中填写自已的真实信息。在实际数据清洗过程中,可以结合这三个数据来源构建一个新的年龄字段,对于实名客户选取身份证年龄,对于未实名客户优先选取金融年龄,这个新构建的年龄字段可以最大限度地保证数据的权威性。
线上线下验证
对于需要上线的模型,上线前的数据验证是一件让建模人员很头疼的事情,由于线上线下可能采用不同的数据源或者更新频率,会导致线上模型结果和离线模型结果对不齐。在数据清洗环节,如果线上数据已经落库,建议事先评估线上线下数据之间的差异性。在积累时间足够长的情况下,优先利用线上落库的数据分析建模;对于刚开始积累的线上数据,如果发现线上线下差异性过大,建议在本期建模项目中暂时不使用这些数据,以免导致模型上线前的返工.
有效性检验
数据清洗本身也是一个数据摸底阶段,在处理完缺失值、异常值、重复值、致性这些问题后,最后也可以从有效性的角度,对原始字段做一次初筛,进而从业务经验和数据分析这两个角度选择最有效的字段。
业务经验
业务经验在风控建模过程中会起一定的作用。经验丰富的业务专家可以从海量数据中挑选出符合业务认知的字段,这些字段能够合理地评估客户的信用和欺诈风险,并且不容易受到外部环境的影响,从而保证模型的解释性和稳定性。
数据分析
对于机构以外的第三方数据,在数据接入阶段可以利用少量样本进行数据分析,评估这些数据对于建模目标的区分能力,选取部分有效字段进入特征池建立最终的模型。这种有选择性的接入,能够保证机构在数据成本方面的投入产出比最优,并且不会因为太多的外部数据接口导致线上服务的时效性降低。
特征工程和特征筛选
有了较为干净的原始数据,我们就可以开始特征工程的工作了。由于头部的互联网金融机构很早就开始了模型搭建的工作,基本都沉淀了一套内部的特征平台,这样建模人员在每个建模项目中就不需要重复造轮子,只构建一些定制化的特征就可以了。
经过特征工程这一步,我们已经将原始数据转化为成百上千维的大宽表,但是直接将这个大宽表丢到模型里面去训练是不合适的,因为这些特征中存在很多冗余信息,会导致模型训练过程中时间和空间资源的浪费,并且特征本身的不稳定性,特征之间的强相关性,也都会响最终模型的效果。这些问题都需要在特征筛选环节中解决。通常特征筛选可以通过探索性数据分析、稳定性、重要性、相关性、解释性这几个方面来进行。
探索性数据分析
探索性数据分析(Exploratory Data Analysis,EDA)是生成特征大宽表后应该做的第一步工作,主要是通过统计分布或者做图的方式,初步了解所有特征。通常计算的统计量有字段类型、缺失率、异常率、非重复值数量、标准差、最小值、最大值、平均值、分位点等。
字符型特征
字符型特征在计算机中是无法进行数值计算的,经过特征工程之后字符型特征理应都转化成了数值型特征,如果发现大宽表中还有遗留的字符型特征,这里可以剔除。
缺失率过高
在原始数据中虽然做过缺失值处理的工作,但是不排除由于特征匹配或者加工逻辑,导致特征中依然存在缺失率过高的情况。一般我们会把缺失率过高(例如大于0.9)的特征筛除,因为这类特征对于整体建模样本而言不具有通用性。
类别过少
有些特征会存在只有一种取值或者标准差为0的情况,这说明这类特征本身并没有太多的信息,对于这种类别过少的特征可以剔除。
异常值处理
对于特征大宽表中的异常值,我们可以利用3sigma原理来界定,也就是说距离平均值3个标准差以上的特征值认为是异常值
print('要天天开心')