Kaggle的案例大多来源真实数据,非常适合拿来提升打怪经验值。跨国金融信贷公司捷信提供Home Credit Default Risk就很经典,笔者甚是喜欢。Home Credit Default Risk提供了贷款申请表,申请用户在本公司的历史申请表,历史还款记录,和征信机构登记的历史跟踪记录。
案例分析过程中遇到不少问题,记录下来抛砖引玉。内容包括,EDA,特征处理,模型选择和调参,分析系统构建这几个部分,想到哪写到哪。
EDA(Explore Data Analysis)阶段之宏观分析
依据案例提供的描述,从整体上了解数据表和其中的特征变量。案例提供的描述只是大概描述,并不精确详细。比如对于申请者的居住环境,提供了大量不明觉厉的房屋特征,让人费解。总共有近300个特征属性,看的头混脑胀,有个大体印象,留作后面琢磨。明确的收获是,从索引字段基本可以推断出几张表关联关系,比如当前申请记录和历史申请记录是一对多关系;历史申请记录和还款记录是1对多关系;
EDA阶段之微观明察秋毫
分析各变量数值的分布,数据缺失情况,与其他变量的线性相关,这个步骤细碎重复,但对深入理解特征变量很重要。比如申请表中有多家第三方评级机构提供的信用分,覆盖率不足50%,只有一家可以覆盖90%以上的申请用户,这时就要考虑这些数值的可靠性,以及如何充分利用这些数值。再比如有三个特征属性,分布是居住地,工作地和注册地这三者是否一致的两两关系,可以从实际场景考虑下是否会对申请产生影响,把这三个二元属性合并成一个二元变量是否更合理。工作单位特征有60个不同属性值,从数量分布来看,有的属性值只覆盖了极少数的申请用户,有些属性则覆盖了上万的用户,这时本能的想到通过分箱来提高属性特征表现的稳定性。这过程中边看边想边记,为后面的特征提取打好基础。虽然不少发散性设想没有通过后面环节的检验,但对数据的深入理解大有裨益,知道一些路可以走通诚然是收获,发现某些路走不通不也是种收获么。
在分析阶段,为获得快速的系统响应,从30万条申请数据中抽取了10%,对于动辄上千万条的还款记录详情,抽取几户的历史信息足以了解其中细节。
特征处理,对耐心的考验
特征处理包含特征选取和特征转化。最终的执行处理的顺序是先转化特征变量,再选取特征变量。但在实际处理过程,我们只对重要的特征变量来衍生转化,筛选特征变量无法一步到位,因此选取和转化需要多次迭代。
选取特征变量的方法有多种,目前主流的有stepwise特征筛选和依据特征变量(与目标特征的)信息增量(互信息)。特征太多,而手头只有一台笔记本,明智的参考互信息来筛选变量。设定筛选阈值,高于阈值的特征保留。同时查看人肉选取的特征是否包含在内,如果没有通过阈值,需要通过模型验证是否有保留的价值。
选取特征变量前,需要处理数值缺失的问题。对于数值型特征,可以赋予缺省值为均值,对于类型特征,可以赋予缺省值为高频类型。这里需要留意,赋予缺省值后,不应显著影响样本数在这特征上的分布。否则,将缺失值自立门户,在类型特征中成为一个独立的类型。对于数值型特征,如果有大量的缺省值,则将其按等频次转化为类型变量,同时缺省值为一独立类型值。各位看官对于数值型特征的缺失值处理是否有更好的方案?
先记到这里,明天继续。