1. 赛题阅读
小节提要
该阶段需要确定,问题的类型(分类or回归),模型的评估标准等。
算法竞赛中对于赛题背景的业务挖掘点到即止即可,一方面是因为出于保密性要求,竞赛主办方会刻意隐藏部分信息,脱敏、创造新字段、甚至是不给出字段解释都是常见方法;另一方面,对于机器学习来说,重数字规律可能会强于重业务逻辑。
如果碰到较为复杂的赛题,可以看论坛老哥们是怎么解读的。
1.1 赛题背景
信用评分算法是银行用来确定是否应该发放贷款的方法,它对违约概率进行猜测。这项竞赛要求参赛者通过预测未来两年某人遭遇财务困境的可能性,提高信用评分的最新水平。
1.2 赛题目标
本次竞赛的目标是建立一个借款人可以用来帮助做出最佳财务决策的模型,模型的评估标准为AUC。提供了250000名借款人的历史数据,奖金总额为5000美元。
2. 数据初见
小节提要
这一个步骤主要是将数据导入编程环境当中,然后看一下数据大概是一个什么情况。然而这一步看似简单,实际上对于一些较为复杂的问题,可能会出现,数据量巨大内存无法直接读入,或者所给的表有很多张等等。
遇到数据量较大的问题,一个办法是不要把数据下载到本地,利用kaggle notebook可以直接挂载比赛的数据;论坛老哥可能会将数据(原csv格式)转化为占用内存更小的其他格式,可以关注论坛,直接导入别人已经处理好的数据集。
2.1 各表数据
数据字典
data_dictionary = pd.read_excel('../input/GiveMeSomeCredit/Data Dictionary.xls', header=1)
数据字典当中记录了训练集表的各个字段含义,这些具有实际意义的特征对于后续建模过程中,特征工程很有帮助。
示例提交
sample_submission = pd.read_csv('../input/GiveMeSomeCredit/sampleEntry.csv')
这张表是为了告诉你,最终提交应该按照什么格式。
训练集
train = pd.read_csv('../input/GiveMeSomeCredit/cs-training.csv')
与数据字典所展示的内容相同,该训练集共有10个特征,具体含义可以看数据字典。一共有150000行数据。该数据集算比较小的问题了,而且数据集特征的含义都给出来了,没有匿名特征。
需要预测的变量为“SeriousDlqin2yrs”,取值为0-1,显然这回是一个二分类问题,同时也可以看作是一个0-1回归问题,使用逻辑回归类似的方法进行处理。
测试集
test = pd.read_csv('../input/GiveMeSomeCredit/cs-test.csv')
测试比训练集稍小,除此之外,测试集的“SeriousDlqin2yrs”全为空值,需要我们去填。
3. 数据探索
小节提要
本节将针对训练集与测试集进行较为细致的探索。
3.1 训练集探索
字段 | 解释 | 类型 |
---|---|---|
SeriousDlqin2yrs | 贷款逾期超过90天及以上的人(目标变量) | Y/N |
RevolvingUtilizationOfUnsecuredLines | 信用卡和个人信用额度(不包括房地产和汽车贷款等分期付款债务)的’总余额‘除以’信用额度之和‘ | percentage |
age | 借款人年龄(年) | integer |
NumberOfTime30-59DaysPastDueNotWorse | 借款人逾期30-59天的次数,但在过去2年中没有恶化 | integer |
DebtRatio | 负债比率:’每月债务偿还额、赡养费、生活费‘除以’每月总收入‘ | percentage |
MonthlyIncome | 月收入 | real |
NumberOfOpenCreditLinesAndLoans | 未结贷款的数量(分期付款,如汽车贷款或抵押贷款)和信用额度(如信用卡) | integer |
NumberOfTimes90DaysLate | 90天逾期次数:借款者有90天及以上逾期的次数 | integer |
NumberRealEstateLoansOrLines | 不动产贷款或额度数量:抵押贷款和不动产放款包括房屋净值信贷额度 | integer |
NumberOfTime60-89DaysPastDueNotWorse | 借款人逾期60-89天的次数,但在过去2年中没有恶化 | integer |
NumberOfDependents | 家属数量:不包括本人的家属数量 | integer |
查看训练集的基本情况
train.info()
可以看到,“MonthlyIncome”与“NumberOfDependents”应该是存在缺失值的。
3.2 测试集探索
test.info()
可以看到,测试集的“MonthlyIncome”与“NumberOfDependents”也是存在缺失值的。
4. 数据质量分析
小节提要
本节将针对所给的全部数据进行分析。在实际建模过程中,首先我们会先校验数据的正确性,并检验缺失值、异常值等情况。
4.1 数据正确性校验
所谓数据正确性,指的是数据本身是否符合基本逻辑,例如此处id作为建模分析对象独一无二的标识,我们需要验证其是否确实独一无二,并且训练集和测试集id无重复。
# 检验训练集id无重复
train['Unnamed: 0'].nunique() == train.shape[0]
# 检验测试集id无重复
test['Unnamed: 0'].nunique