Kaggle比赛——房屋信贷违约风险

本文基于https://www.kaggle.com/willkoehrsen/start-here-a-gentle-introduction所写

本文适用于那些刚接触机器学习比赛的人。看完后可以大概知道Home Credit Default Risk的比赛思路。

一. 了解数据

有7种不同的数据来源:

1. application_train / application_test:主要培训和测试数据,包含Home Credit的每个贷款申请信息。每笔贷款都有自己的行,并由功能SK_ID_CURR标识。培训申请数据附有TARGET,表示0:贷款已偿还或1:贷款未偿还。

2. bureau:有关客户以前来自其他金融机构的信贷的数据。每个先前的信用在局中都有自己的行,但是应用数据中的一个贷款可以具有多个先前的信用。

3. bureau_balance:关于以前学分局的月度数据。每行是先前信用的一个月,并且单个先前信用可以具有多个行,每个月对应一个信用长度。

4. previous_application:之前在家申请贷款的申请在申请数据中有贷款的客户的信贷。应用程序数据中的每个当前贷款可以具有多个先前的贷款。每个先前的应用程序都有一行,并由功能SK_ID_PREV标识。

5. POS_CASH_BALANCE:有关以前销售点或客户现金贷款与Home Credit的月度数据。每行是前一个销售点或现金贷款的一个月,而前一个贷款可以有多行。

6. credit_card_balance:客户对Home Credit的以前信用卡的月度数据。每行是信用卡余额的一个月,单个信用卡可以有多行。

7. installments_payment:Home Credit的先前贷款的付款记录。每次付款都有一行,每次错过付款都有一行。

二. 了解评估指标

一旦我们掌握了数据,我们需要了解我们提交的评估指标,也就是ROC与AUC。

ROC曲线体现了“一般情况下”泛化性能的好坏。

若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。若两个学习器的ROC曲线发生交叉,则比较ROC曲线下的面积,即AUC。

图中蓝色曲线的性能最好,红色次之,黑色最差。

三. 数据清洗

在比赛中,我们无可避免的总会遇到一些缺失值,那我们该如何处理这些缺失值呢?

在这个比赛中,我们用XGBoost等模型来处理缺失值。另一个选择是删除具有高百分比缺失值的列,可能这些列对我们的模型有帮助,但我们无法提前知道。因此,我们暂时保留所有列。

决策树、RF、xgboost如何处理缺失值?:https://blog.csdn.net/qq_19446965/article/details/81637199

四. 分类变量编码

在我们进一步讨论之前,我们需要处理讨厌的分类变量。遗憾的是,机器学习模型无法处理分类变量(除了一些模型,如LightGBM)。因此,我们必须找到一种方法,在将这些变量交给模型之前把这些变量编码表示为数字。执行此过程有两种主要方式:

1. 标签编码:使用整数分配分类变量中的每个唯一类别,没有创建新列。例子如下所示

2. 独热编码:为分类变量中的每个唯一类别创建新列。每个观察结果在列中收到1对应的类别,在所有其他新列中收到0。

这两种编码的缺点:

标签编码的问题在于它为类别提供了任意排序,分配给每个类别的值是随机的,并不反映该类别的任何固有方面。

独热编码的缺点是特性(数据的维数)的数量可能会随着具有多个类别的分类变量而激增。为了解决这个问题,我们可以执行单热编码,然后执行PCA或其他降维方法,以减少维度数量(同时仍尝试保留信息)。

应用场所:

在这个比赛中我们将对任何只有2个类别的分类变量使用标签编码,对任何具有2个以上类别的分类变量使用独热编码。

五. 处理异常

在做EDA时我们总是希望注意的一个问题是数据中的异常。这些可能是由于错误输入的数字,测量设备的错误,或者它们可能是有效的,但极端的测量。

在这个比赛中,异常的违约率较低。如下图所示:

如何处理异常?

处理异常取决于具体情况,没有设定规则。最安全的方法之一就是将异常设置为缺失值,然后在机器学习之前填充它们(使用Imputation)。在这种情况下,由于所有异常都具有完全相同的值,我们希望用相同的值填充它们,以防所有这些贷款共享一些共同点。

六. 相关性

接下来,我们我们要查找一下要素与目标之间的相关性。

从图中可以看出DAYS_BIRTH是最正相关的。(TARGET除外,因为变量与其自身的相关性始终为1!)

七. 特征工程

特征工程很重要,正如Andrew Ng喜欢说的那样:“应用机器学习基本上就是特征工程。”

特征工程是指一个基本过程,可以涉及特征构造:从现有数据中添加新特征。以及特征选择:仅选择最重要的特征或其他降维方法。我们可以使用许多技术来创建功能和选择功能。

在这个比赛中我们用到了多项式特征、领域知识特征。

多项式特征:一种简单的特征构造方法称为多项式特征。在此方法中,我们创建的功能是现有功能的强大功能以及现有功能之间的交互术语。例如,我们可以创建变量EXT_SOURCE_1 ^ 2和EXT_SOURCE_2 ^ 2以及变量,例如EXT_SOURCE_1 x EXT_SOURCE_2,EXT_SOURCE_1 x EXT_SOURCE_2 ^ 2,EXT_SOURCE_1 ^ 2 x EXT_SOURCE_2 ^ 2,依此类推。这些由多个单独变量组合而来的功能称为交互项,因为它们捕获变量之间的交互。换句话说,虽然两个变量本身可能不会对目标产生强烈影响,但将它们组合在一起形成一个交互变量可能会显示与目标的关系。交互项通常用于统计模型中以捕获多个变量的影响,但我不认为它们在机器学习中经常使用。尽管如此,我们可以尝试一些,看看他们是否可以帮助我们的模型来预测客户是否会偿还贷款。

领域知识特征:也许称之为“领域知识”并不完全正确,因为我不是信用专家,但也许我们可以称之为“尝试应用有限的金融知识”。在这种思维框架中,我们可以制作一些功能,试图捕捉我们认为对于判断客户是否会违约贷款的重要性。

PS.查看多项式特征和领域知识特征是否改进模型的唯一方法是在这些特征上训练测试模型!然后,我们可以将提交性能与没有这些功能的模型的提交性能进行比较,以评估我们的特征工程的效果。

八. 基线模型

什么是基线模型?为什么从基线模型开始?

答案:https://baijiahao.baidu.com/s?id=1600230352380900553&wfr=spider&for=pc

一开始使用了逻辑回归,发现效果不是那么好。于是进行了改进。

九. 改进模型

使用了随机森林对模型进行改进

逻辑回归和随机森林:https://blog.csdn.net/yunqiinsight/article/details/81738928

你可能感兴趣的:(Kaggle比赛——房屋信贷违约风险)