Kaggle数据科学竞赛 您所在的位置:网站首页 流程方框图怎么画 Kaggle数据科学竞赛

Kaggle数据科学竞赛

2023-03-22 23:26| 来源: 网络整理| 查看: 265

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() == test.shape[0] # 检验训练集和测试集id都是唯一值 test['Unnamed: 0'].nunique()+train['Unnamed: 0'].nunique() == len(set(test['Unnamed: 0'].values.tolist() + train['Unnamed: 0'].values.tolist()))

结果为:训练集、测试集各自的id都是唯一值,都是从1到n(n为数据集长度)的自然数编码。

4.2 检验数据缺失情况 # 按列求缺失值并汇总 train.isnull().sum()

训练集缺失情况

# 按列求缺失值并汇总 test.isnull().sum()

测试集缺失情况

结果为:训练集、测试集的特征中,“MonthlyIncome”与“NumberOfDependents”存在一定数量的缺失值,且“MonthlyIncome”的缺失数量不小,需要考虑使用一定的方法进行填补。

4.3 异常值

  接下来进行异常值检验。由于我们尚未对数据集特征进行预处理,因此我们先查看标签列的异常值情况。

train['SeriousDlqin2yrs'].value_counts() train['SeriousDlqin2yrs'].plot(kind='hist')

在这里插入图片描述 由于标签为0-1取值,并不是连续变量取值,因此没有必要判断是否符合正太分布,粗略地看了一下取值为0与取值为1地数量,可以看到两者之间是14:1的比例关系。

显然这里是没有出现异常值的。

4.4 规律一致性分析

  接下来,进行训练集和测试集的规律一致性分析。   所谓规律一致性,指的是需要对训练集和测试集特征数据的分布进行简单比对,以“确定”两组数据是否诞生于同一个总体,即两组数据是否都遵循着背后总体的规律,即两组数据是否存在着规律一致性。   我们知道,尽管机器学习并不强调样本-总体的概念,但在训练集上挖掘到的规律要在测试集上起到预测效果,就必须要求这两部分数据受到相同规律的影响。一般来说,对于标签未知的测试集,我们可以通过特征的分布规律来判断两组数据是否取自同一总体。

4.4.1 单变量分析

  首先我们先进行简单的单变量分布规律的对比。 对于离散型变量的分布规律,我们可以通过相对占比分布(用某一离散取值的数量除以总数得到该离散取值的占比,某种意义上来说也就是概率分布)来进行比较。

  例如首先我们查看“NumberOfOpenCreditLinesAndLoans”的相对占比分布可以通过如下代码实现:

# 不同取值水平汇总后排序再除以样本总数 (train['NumberOfOpenCreditLinesAndLoans'].value_counts().sort_index()/len(train)).plot(kind='line') (test['NumberOfOpenCreditLinesAndLoans'].value_counts().sort_index()/len(test)).plot(kind='line')

  其实这里是橙色线与蓝色线基本重合的,说明训练集与测试集的“NumberOfOpenCreditLinesAndLoans”特征分布相似,只是测试集会出现少数取值在60以上的数据。

  其余离散型变量也是一样的方法进行比较,此处不过多展示;连续型变量则可以直接画kde或hist图。

# 一些代码 # (train['age'].value_counts().sort_index()/len(train)).plot(kind='line') # (test['age'].value_counts().sort_index()/len(test)).plot(kind='line') # (train['NumberOfTime30-59DaysPastDueNotWorse'].value_counts().sort_index()/len(train)).plot(kind='line') # (test['NumberOfTime30-59DaysPastDueNotWorse'].value_counts().sort_index()/len(test)).plot(kind='line') # (train['NumberOfOpenCreditLinesAndLoans'].value_counts().sort_index()/len(train)).plot(kind='line') # (test['NumberOfOpenCreditLinesAndLoans'].value_counts().sort_index()/len(test)).plot(kind='line') # (train['RevolvingUtilizationOfUnsecuredLines']).plot(kind='hist') # (test['RevolvingUtilizationOfUnsecuredLines']).plot(kind='hist') # (train['RevolvingUtilizationOfUnsecuredLines']).plot(kind='kde') # (test['RevolvingUtilizationOfUnsecuredLines']).plot(kind='kde') # (train[train['RevolvingUtilizationOfUnsecuredLines']


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有