本周工作
本周主要还是数据预处理与特征选择部分,相比之前简单地用平均值填充数值类数据,用众数填充类别类数据并使用全部特征,我对数据分门别类进行了更细致的处理,并舍弃了一些不必要的或暂时较难利用的特征。
首先,除了object类的数据为类别类数据外,有些数值类数据的取值个数都比较有限,且取值集中在几个数值上(例如n0),此时采用均值填充缺失值可能并不是一个很好的选择,可以把它当作类型属性。对一些80万条目中只有几个的取值,可以把它们合并为一类(相当于others),这样可以有效减少取值数(同时对其意义没有太大影响),这对诸如决策树的一些模型有积极意义,可有效减少分叉数,提高模型泛化能力。
对于policyCode,其取值只有1个值,这样的特征显然无助于提升模型的区分能力(比如对决策树模型,其熵增益为0),因此予以舍弃。类似地,对n11和n12,其值偏斜过于严重,近似于只有1个值的情况,同样舍弃。(applicationType偏斜也比较严重,但相对好一些,且加不加对准确率影响很小,为降低复杂性也没有将其包含在特征集内)
经验证,subGrade中包含grade信息,即存在数据冗余,因此可舍弃grade,只用subGrade即可。这类类型上的冗余比较容易发现,而连续特征也可能存在冗余,不过这比较难检测,需要对其相关性进行分析(有可能还不只是两个特征间的关系),我目前还没有做到这一步。
对于连续值,对噪声进行检测和处理可有效提升模型泛化性能(类似之前将取值很少的类别归为一类)。对正态分布,偏离均值3个标准差以上的点即可被认为是噪声,而事实上这些连续属性分布都与正态分布很不相同,导致采用这种方法检测很多特征会有50%的点以上被归为噪声,如果将偏离3个标准差的都归为等于3个标准差,将显著改变数据分布,从而破坏其蕴含的有效信息。根据特征的实际意义,一些显著大于其他值的“噪声”是有其合理性的,比如有些人的年收入非常高,且这与其偿债能力有很大关系,不应对其数值进行过度处理。从这个角度,等深分箱是一个相对更合理的选择。
经过上述处理,采用原来的KNN模型并保持参数不变,模型性能有明显提升,而换用决策树模型,还可再小幅提升其性能(但要舍弃很多连续特征及分布偏斜的类别特征),本周结果如下(相比两周前0.6262有明显提升):
下周展望
首先,完善连续特征与类别特征间的转换,以使更多特征可被有效地用于KNN、决策树、线性回归等模型中。同时探索一些更高级、复杂的模型,以提高预测的性能。