平安产险2018极客挑战赛·初赛(二)
初赛数据预处理
概览
经过上一阶段对数据分析,我们大体上根据情况的不同,有以下四种处理方式:
- 删除特征:null值过多的特征
- 填充特征的null值:有一些null值,可以依据一些规则,使填充值的影响最小。如填充平均值,众数,奇异值等等。
- 二值化:对于只有两种状体啊的特征。如:male,female。
- 独热编码:对于有多种状态的特征,如:地区信息
- 特殊处理方法:依据具体情况
删除特征
1 | ''' |
在上一篇博客中,我们分析了数据集中的空值情况。以上的特征由于各种原因我们予以删除的。除了null值过多的特征意外,比方说’zip_code’邮政编码,过于细化,而且跟地理信息重复。两个特征如果相关性过高(协方差大于0.95),我们也会删除到只剩一个。另外如果我们把某个特征转化成别的信息之后,我们也会删除原特征。
填充null值
1 | ''' |
填充null值这里有两种
(或三种)情况。
- 如果特征是日期型变量,我们取其中最多的日期作为填充值,以减小null值的冲击。
- 如果特征值是数值类型,如雇佣时长,总贷款额等。我们计算正常值的平均数作为填充值。
- 如果null值有特殊的意义(我们想象逾期未补款时间,null为没有逾期或者没有借款,区别于0),我们应该赋予null一个异常值,比如说一个较大的数。
二值化
1 | #for binarilization:pymnt_plan,term, application_type, initial_list_status |
二值化很好理解,经过分析,我们认为上面的两个属于只有两个取值的离散型变量。
独热编码
1 | #for get_dummies: home_ownership, verification_status, loan_status,purpose |
对于离散多类型变量,我们为了取消类型之间的线性相关性,不能直接对他们编号。需要使用独热编码对不同类型进行编号。
值得注意的是,独热编码在特征类型很多的情况下会显著增加特征的维度,造成特征过于稀疏不利于学习。因此对于特征种类过多的我们进行了特殊处理,后面会详细介绍。
特殊的处理
信用评级sub_grade和工作年限emp_length
1 | 'A1':0,'A2':1,'A3':2,'A4':3,'A5':4, sub_grade_mapping = { |
1 | '10+ years':10,'9 years':9,'8 years':8,'7 years':7,'6 years':6, emp_length_mapping = { |
不同的信用评级和工作年限是有线性关系的,为了准确学出这种关系,我们把这两个字段映射成对应的数字。
再对null值的处理上,信用评级我们采用平均值填充,但是对于工作年限,我们认为null可能是没有工作,我们填充0来表示。
地址所在的州addr_state
1 | # 地域划分addr_state->region |
美国有50个州,如果对州这个字段进行独热编码将会多出50个特征。这显然是不划算的,因此,我们把50个州根据美国的地理特点划分成东北,西北,东南,西南,西部五个区域,然后在进行独热编码。
日期类特征issue_d,earliest_cr_line
1 | 'issue_d']) data.issue_d = pd.to_datetime(data[ |
通过上一篇的分析我们发现,贷款量跟年份是有关系的,因此我们把原本的年-月信息处理分开成两个特征,分别记录年月。这样我们的模型就能学到贷款状态与年份,和月份的信息。
mths_since_last_major_derog
这个字段记录了上次违约之后过去的月数,有大量(约70%)的null值,我们最初把这个特征删除了,怎么训练精度都很难提高,这里要提出来注意一下。
这里都null值更多指的是压根没有违约,所以不应该赋值为0,那将表示刚刚违约了。我们应当将null赋一个较大的数值,或者如果使用基于决策树都模型,也可能直接留着null值不用处理。
- 本文链接:平安产险2018极客挑战赛·初赛(二)
- 版权声明:本文基于署名-非商业性使用-禁止演绎 3.0 中国大陆许可协议 (CC BY-NC-ND 3.0 CN)发布,欢迎转载,但是必须保留本文的署名Tsukiyo及链接。如果要用于商业目的,请联系作者。
分享