了解机器学习Kaggle竞赛

在数据科学领域,可用的资源太多了:从Datacamp到Udacity到KDnuggets,有数千个在线的地方可以学习数据科学。所以,如果您希望通过实践来学习,那么

Kaggle可能是通过实践数据科学项目扩展您的技能的最佳选择。

虽然它最初被称为机器学习竞赛的地方,但Kaggle - 它自称为“你的数据科学之家” - 现在提供了一系列数据科学资源。虽然这一系列文章专注于竞赛,但Kaggle有很多优势:

数据集:您可以免费下载和使用的数万种不同类型和大小的数据集。如果您正在寻找有趣的数据来探索或测试您的建模技能,这是一个很好的去处。机器学习竞赛:曾经是Kaggle的核心,这些建模技能测试是学习尖端机器学习技术和使用真实数据磨练你的有趣问题能力的好方法。学习: Jupyter notebook中教授的一系列数据科学学习课程,涵盖SQL到深度学习。讨论: 提供问题并从Kaggle社区的数千名数据科学家那里获得建议。kernel:在Kaggle服务器上运行的在线编程环境,您可以在其中编写Python / R脚本或Jupyter笔记本。这些内核完全免费运行(您甚至可以添加GPU)并且是一个很好的资源,因为您不必担心在自己的计算机上设置数据科学环境。内核可用于分析任何数据集,参与机器学习竞赛或完成学习轨道。您可以复制和构建来自其他用户的现有内核,并与社区共享您的内核以获得反馈。

Kaggle是什么

总的来说,Kaggle是一个学习的好地方,无论是通过更传统的学习轨道还是通过参加比赛。当我们想了解最新的机器学习方法时,可以选择阅读,也可以去Kaggle,找一个比赛,看看人们如何在实践中使用它。就个人而言,我觉得这更有趣,也是一种更有效的教学方法。此外,社区非常支持并且总是愿意回答问题或提供项目反馈。

摘要

在本文中,我们将重点介绍Kaggle机器学习竞赛:家庭信用违约风险问题。这是一个相当直接的竞争,具有合理大小的数据集,这意味着我们可以完全使用Kaggle的内核进行竞争。这大大降低了进入门槛,因为您不必担心计算机上的任何软件,甚至不必下载数据!只要您拥有Kaggle帐户和Internet连接,就可以连接到内核并运行代码。

我打算在Kaggle和内核(Python Jupyter Notebook)上进行整个比赛,学习本文,需要创建Kaggle帐户来复制内核,然后点击蓝色的Fork Notebook按钮,以便在内核环境中进行编辑和运行。

比赛说明

家庭信用违约风险问题是标准的监督机器学习任务,其目的是利用历史贷款申请数据来预测申请人是否会偿还贷款。在学习期间,我们为模型提供了特征 - 描述贷款申请的变量 - 以及标签 - 如果贷款已偿还则为二进制0,如果贷款未偿还则为1 - 模型将学习从功能到映射的映射标签。然后,在测试期间,我们为模型提供新批量应用程序的特征,并要求它预测标签。

本次比赛的所有数据都是结构化的,这意味着它存在于整齐的行和列中 - 想想电子表格。这意味着我们不需要使用任何卷积神经网络(在处理图像数据方面表现优异),它将为我们提供真实世界数据集的优秀实践。

本次比赛遵循大多数Kaggle比赛的总体思路:

公司有数据和需要解决的问题,不是聘请内部数据科学家建立模型-->他们提出了适度的奖励来吸引整个世界贡献解决方案-->一个由数千名技术熟练的数据科学家(Kagglers)组成的社区随后就这个问题进行研究,基本上不收取任何费用来提出最佳解决方案。就具有成本效益的商业计划而言,这个方案很可取。

Kaggle竞赛环境

当你去竞赛主页时,你会看到:

快速浏览选项卡

这是一个快速浏览选项卡

概述

问题的简要说明,评估指标,奖品和时间表

数据

不允许竞争所需的所有数据作为外部数据。您可以下载所有数据,但我们不需要这样做,因为我们将使用可以连接到数据的Kaggle内核

kernel

您和其他竞争对手之前完成的工作。在我看来,这是比赛最有价值的资源。您可以通读其他脚本和笔记本,然后复制代码进行编辑和运行

讨论

另一个有用的资源,您可以从竞争主机和其他竞争对手中找到对话。一个提问和从别人的答案中学习的好地方

排行榜

谁站在最顶端,你站在哪里

规则

不是很有趣,但很好理解

团队

如果您决定组建团队,请管理团队成员

我的提交

查看您之前提交的内容,并选择最终用于比赛的内容

学习他人的重要性

虽然它们被称为竞赛,但是Kaggle机器学习活动也被称为“协作项目”,因为主要目标不一定是赢得,而是实践和向同行数据科学家学习。一旦你意识到打击别人而不是扩大你自己的技能,你将从竞争中获得更多。当您注册Kaggle时,您不仅可以获得所有资源,还可以成为拥有数千年集体经验的数据科学家社区的一员。

通过努力成为社区的积极参与者,充分利用所有这些经验!这意味着从共享内核到在讨论论坛中提问。尽管让您的工作公开可能会令人生畏,但我们通过犯错,收到反馈和改进来学习,这样我们就不会再犯同样的错误了。每个人都从初学者开始,社区非常支持所有技能水平的数据科学家。

在这种心态中,我想强调与他人共享代码不仅是可以接受的,而且是鼓励的!但生活中,它被称为协作和极其重要的技能。

将自己投入竞争的一个很好的方法是找到一个与好的排行榜得分共享的内核,分叉内核,编辑它以尝试提高分数,然后运行它来查看结果。然后,将内核公开,以便其他人可以使用您的工作。数据科学家不是站在巨人的肩膀上,而是成千上万为了所有人的利益而公开工作的人的背后。

Jupiter notebook

一旦您对Kaggle的工作方式有了基本的了解,以及如何充分利用竞争对手的理念,现在是时候开始了。在这里,我将简要概述一个Python Jupyter notebook,我把它放在kernel中用于Home Credit Default Risk问题,但为了获得全部好处,你需要将笔记本分配到Kaggle并自己运行,你不要我必须下载或设置任何东西。

当你在内核中打开笔记本时,您将看到以下环境:

kernel notebook环境

kernel notebook环境

可以将其视为标准的Jupyter笔记本,其美学略有不同。您可以像在Jupyter中一样编写Python代码和文本(使用Markdown语法),并在Kaggle的服务器上完全在云中运行代码。但是,Kaggle内核具有Jupyter Notebook中没有的一些独特功能。点击右上角的向左箭头,展开内核控制面板,调出三个标签(如果笔记本不是全屏,那么这三个标签可能已在代码旁边显示)。

在数据选项卡中,我们可以查看内核所连接的数据集。在这种情况下,我们拥有整个竞争数据,但我们也可以连接到Kaggle上的任何其他数据集或上传我们自己的数据并在内核中访问它。数据文件../input/在代码中的目录中可用 :

input

#列出连接到内核的数据文件

os.listdir('../ input /')

连接到内核的文件可在../input/中找到

Settings选项卡允许我们控制内核的不同技术方面。在这里,我们可以在会话中添加GPU,更改可见性,并安装任何尚未在环境中使用的Python包。

最后,“版本”选项卡允许我们查看以前提交的任何代码运行。我们可以查看对代码的更改,查看运行的日志文件,查看运行生成的笔记本,以及下载从运行中输出的文件。

版本选项卡

要运行整个笔记本并记录新版本,请点击内核右上角的蓝

色Commit&Run按钮。这将执行所有代码,向我们显示已完成的笔记本(如果出现错误,则显示任何错误),并保存在运行期间创建的所有文件。当我们提交笔记本时,我们可以访问我们的模型所做的任何预测并提交它们进行评分。

介绍notebook大纲

第一个notebook旨在让您熟悉这个问题。我们的开始与任何数据科学问题的方式大致相同:理解数据和任务。对于这个问题,有1个主要训练数据文件(包括标签),1个主要测试数据文件和6个附加数据文件。在第一个笔记本中,我们只使用主要数据,这将得到一个不错的分数,但后来的工作将必须包含所有数据,以便具有竞争力。

要理解数据,最好距离键盘几分钟,并阅读问题文档,例如每个数据文件的列描述。因为有多个文件,我们需要知道它们是如何连接在一起的,尽管对于第一个笔记本,我们只使用主文件来保持简单。通过其他内核读取也可以帮助我们熟悉数据以及哪些变量很重要。

一旦我们理解了数据和问题,我们就可以开始为机器学习任务构建它。这意味着处理分类变量(通过单热编码),填写缺失值(插补),并将变量扩展到一个范围。我们可以进行探索性数据分析,例如查找与标签的相关性,以及绘制这些关系的图表。

变量的相关热图

我们稍后可以使用这些关系来建模决策,例如包括要使用的变量。

年龄分布

年龄组的违约率

当然,没有我最喜欢的情节,即Pairs Plot,没有完整的探索性数据分析。

对比图的特征(红色:未在kde和散点图中偿还的贷款)

在彻底探索数据并确保它对机器学习可接受之后,我们继续创建基线模型。但是,在我们完全进入建模阶段之前,我们必须了解竞争对手的绩效指标。在Kaggle比赛中,一切都归结为单个数字,即测试数据的指标。

虽然使用二进制分类任务的准确性可能具有直观意义,但是不可取,因为我们正在处理不平衡的类问题。而不是准确性,提交是根据曲线下的 ROC AUC或接收器操作特性曲线区域来判断的。我会让你对这个进行研究,或者阅读笔记本中的解释。只要知道更高越好,随机模型得分为0.5,完美模型得分为1.0。为了计算ROC AUC,我们需要根据概率而不是二进制0或1进行预测。然后,ROC 将真实阳性率与假阳性率显示为阈值的函数,根据该阈值,我们将实例分类为正。

通常我们喜欢做一个简单的基线预测,但在这种情况下,我们已经知道对任务的随机猜测会得到0.5的ROC AUC。因此,对于我们的基线模型,我们将使用稍微复杂的方法Logistic回归。对于二进制分类问题,这是一种流行的简单算法,它将为未来的模型设置一个低标准。

在实现逻辑回归之后,我们可以将结果保存到csv文件以进行提交。提交笔记本时,我们编写的任何结果都将显示在“版本”选项卡的“输出”子选项卡中:

运行完整笔记本的输出

在此选项卡中,我们可以将提交内容下载到我们的计算机,然后将其上传到竞赛中。在这款笔记本中,我们制作了四种不同型号,分数如下:

· Logistic回归:0.671

· 随机森林:0.678

· 具有构造特征的随机森林:0.678

· Light Gradient Boosting Machine:0.729

这些分数并没有让我们接近排行榜的顶端,但它们为未来的改进留下了空间!我们还可以了解仅使用单一数据源可以获得的性能。

毫不奇怪,非凡的Gradient Boosting Machine(使用LightGBM库)表现最佳。这个模型几乎赢得了每个结构化的Kaggle竞赛(数据采用表格格式),如果我们可能需要使用某种形式的模型想要认真竞争!)

结论

本文和入门内核展示了Kaggle竞赛的基本开端。这并不是为了赢得胜利,而是为了向您展示如何进行机器学习竞赛的基础知识,以及一些让您开始实施的模型(尽管LightGBM模型就像是跳出了深层次)。

此外,我阐述了我的机器学习竞赛理念,即通过参与讨论,建立其他代码和分享自己的工作来尽可能多地学习。最好的过去得分是令人愉快的,但我认为这不是主要关注点,而是学习新数据科学技术的积极副作用。虽然这些比赛被称为竞赛,但它们实际上是一个合作项目,欢迎每个人参与并磨练自己的能力。

仍有大量工作要做,但幸运的是,我们不必单独完成。在后来的文章中,我们将看到如何在其他人的工作基础上做出更好的模型。我希望这篇文章让您有信心开始参与Kaggle或参与任何数据科学项目。