1 数据概览
本次项目的数据集中,有80w左右的数据,数据类型有整数型,类别型,浮点型,大致可分为数值型和类别型两类,标签为受否违约(isDefault)在数据探索的过程中,我们要对于各个特征的类型,分布情况,与标签的相关程度进行分析,为下一步特征工程奠定基础
2 各个特征的分布在训练集和测试集的分布情况
这一步是考察各项数据的分布情况,尤其是训练集和测试集的差别,如果有个特征某部分在训练集上有分布但在测试集上没有,就要删除这部分对应的特征分布,比面数据的过拟合
以上是部分特征在训练集和测试集上的分布状况,可以发现拟合的较为完好
当然id这种特征在训练集和测试集上分布差异大是很正常的,但是中间有部分重叠说明可能一部分测试集的id与训练集重合,这部分可能会有干扰,可以考虑删除
3 缺失值
本次项目中部分特征缺失的绝对数量较大,但是相对的比例却不高(如下图),最高的仅缺失8%,可以考虑进行填充或删除部分行,而不需要对整个特征进行删除
填充的方法有 向下向上填充,特定值填充,预测填充等等,不同的填充方法对于模型的表现会有影响,因此可以尝试不同的填充方法。
4 标签分布
从标签的分布来看,标签相差并不大,如果想要标签分布均匀,可以采用上采样或下采样的方法,如下图将相差较大的标签转为分布均匀的标签
5 数值型特征的探索
对于数值型特征,我们需要去寻找其分布状况,特征的集中程度越高,说明其极端值影响就越小,并且还要探究其分布与标签的关系,例如一个特征部分集中于正标签,另一部分集中于负标签,说明该特征对于是否区分样本有着极其重要的影响,在特征工程中,可以对该类标签进行各种探索,如频域扩张,与其他特征进行窗口化等一系列操作
plt.figure(figsize = [12,6])
sns.boxplot(train['loanAmnt'])
对loanAmnt(借贷总额)的分布状况进行探索,可以发现集中程度较高
train[['loanAmnt','isDefault']].plot(kind ='scatter',x = 'loanAmnt', y='isDefault')
对于该特征的分布在标签的分布情况进行探索,可以发现该特征在0,1标签的分布都很均匀
#查看该特征的分布
sns.violinplot(x = 'isDefault' , y='loanAmnt', data = train)
对标签的分布状况探索,发现0,1标签对应的该特征大都集中于0到20000左右,集该项指标对于标签的分布影响不明显
对于term这一特征就显得很极端
可以发现这类特征分布很极端,大量集中于3这里,少了在5这里
同样,分布与标签关联也不明显
以上说明该类特征对于标签的影响程度并不大
对于tdi这个特征
可以看出该特征在200到400这一阶段,位于0这一标签类别的特征与1标签有着部分区别,即0标签在200到400这一阶段更加集中,因此对于该类特征对标签分布的影响可能较大