您的关注就是我们的动力!
用智能技术让世界更加美好!
今天,我们分享一些关于数据竞赛的经验与技术,以及一些可以确保你取胜的技术策略。本文选取的数据来自Vidhya上的“贷款预测”竞赛。
直观的观察数据
成功的数据分析的一个先决条件是要深入的挖掘数据细节,否则很难提出(或解答)正确的问题。
在本例中,训练集的数据形式如下。
其中,Loan_Status是最终要预测的标签。
初始数据分析
pandas库的describe() 函数是一个非常有用的工具。它可以很方便的对连续数据的一些关键指标进行概览。可以看到,贷款预测的数据集样本数非常少(仅614个)。所以每个样本都会对最终模型产生较大的影响。
Credit_history很明显是一个非常重要的特征。没有信用卡记录的申请者被拒绝的概率是92%,而有信用卡记录的则仅为20%。
如何处理缺失数据是个很关键的问题,本竞赛中训练集中有50个样本没有信用卡记录数据(测试集中缺失样本数为26个)。因为样本数据量很小(640个),因此对于这些缺失数据的处理要尤其关注。
其他比较重要的特征是:资产所在区域、教育水平和婚姻状况。
利用Orange软件可以很方便的在三维向量空间中显示个特征的重要程度。
财务状况当然也是贷款申请的一个关键指标。
因为银行通常会以家庭为单位进行贷款审批,因此一个合理的策略是将家庭总收入(或人均收入)作为一个新特征进行分析。
缺失数据处理
处理缺失数据的一个常用方法是直接略过或删除缺失的样本。当数据集的数据量很大或者缺失的数据量相对较小时,该策略有些非常有效。
本竞赛的缺失数据占数据集的比重较大,因此需要采用其他更有效的方法。比如,对于数值型数据可以采用线性回归处理并对缺失的数值进行预测。
由于竞赛数据中缺失的不仅有数值数据,同时还有分类型数据(0或1),因此我们提出的策略是:k-NN方法,即检测缺失数据的最近的k个紧邻(k-Nearest Neighbors)。
对于缺失的数值数据,我们采用k阶近邻的平均值替代;对于缺失的分类数据,则选取最近的近邻数据替代。
特征工程-添加有用的信息
前面我们已经围绕收入指标引入了一些新的特征。同样对于LoanAmout和Loan_Amount_Term,我们可以计算出Loan_Amount_per_Term,即每月的贷款偿还率。
采用随机森林或神经网络可以从数据中提取出这些信息,使其变得显性并具有更高的权重。
检测异常值
另一个有效的方法是计算每月月供和收入的比值:
接下来,我们检测一下几个异常值(月供大于收入的100%),然后仔细研究它们。异常值往往会对数据的指标判断产生影响,比如对平均值异常敏感,从而影响模型的精度。
特征选择
特征选择在数据挖掘过程中扮演了非常重要的角色。通过应用基于树的算法(如决策树、随机森林等),可以判断出哪些特征贡献最大。本文应用了Rlief算法。
可以看到,我们引入的新特征对贷款预测的表现非常好,甚至比一些给定的的初始特征效果都要好。
模型选择
本竞赛是一个二值分类问题。我们可以应用不同的监督学习算法进行训练,比如逻辑回归、神经网络、支持向量机(SVM),基于树的模型。
因为样本的数据量很小,因此我们采用了多随机森林模型,该模型结合了线性回归的特点。
训练结果通过K-Fold(k=20)进行交叉验证,最终在训练集上取得了分类准确率0.810的成绩(竞赛冠军得分为0.821)。
结 论
挖掘新特征、填充缺失值、处理异常值和特征选择,这些都是数据挖掘过程的核心步骤。这些过程往往是非线性的,从而需要高效的迭代处理。
建立高效的处理流程(在Jupter,RStudio或Orange等中),并根据结果随时进行调整,也是训练过程中关键的环节。