如何在 15 个月内占领 Kaggle 榜首?bestfitting 经验大放送
雷锋网 AI 研习社按:相信玩过 Kaggle 比赛的人都知道 bestfitting,他在加入 Kaggle 社群短短两年之内,就以黑马之姿成功占领比赛排行榜榜首。近日,Kaggle 对他进行了一次专访,在专访中,我们可以看到关于比赛的满满干货。
bestfitting 真名为 Shubin Dai,生活在长沙,他的朋友们喜欢称他为 Bingo。他目前是一名数据科学家和工程经理,创立了一家专为银行提供软件解决方案的公司。在工作空闲时,除了参加 Kaggle 竞赛,他还是一名狂热的山地车手,并表示自己喜欢在大自然中度过时光。
雷锋网 AI 研习社将访谈内容整理如下,各位 Kaggler 速来看看大神是如何炼成的吧。
1. 你的背景和研究经历是什么?
我的主修专业是计算机科学,在软件开发方面拥有超过 10 年的经验。至于工作,我目前创立了一个专为银行提供数据处理和分析解决方案的团队。
从上大学开始,我就一直对使用数学来创建能够解决问题的程序很感兴趣。这期间我不断阅读各种计算机科学书籍和论文,然后也很幸运,能够在过去十年中一直关注着机器学习与深度学习的发展。
2. 你是如何开启 Kaggle 征程的?
正如我之前所说,我一直在大量阅读着与机器学习和深度学习有关的书籍和论文,但是在这个过程中我也发现,要将我所学到的算法应用于那些可以随时获取的小型数据集中是很困难的。然后我就发现 Kaggle 是一个很棒的平台,这里有各种各样有趣的数据集、kernel 和精彩的讨论,所以我迫不及待的想要试一试。我参加的第一项竞赛是「预测红帽商业价值(Predicting Red Hat Business Value)」。
3. 你参加 Kaggle 比赛的套路是什么样的?
1)首先是仔细阅读比赛概述和数据描述;
2)查找类似的 Kaggle 竞赛。作为一名相对较新的 Kaggler,我收集了 Kaggle 上所有往期竞赛,然后做了基本分析;
3)阅读类似竞赛的解决方案;
4)阅读相关论文,以确保自己不会错过该领域的任何新进展;
5)分析数据并建立一个稳定的交叉验证集;
6)数据预处理、特征工程、模型训练;
7)结果分析,例如预测分布、错误分析、特定样本分析;
8)根据分析结果改进模型或者重新设计全新模型;
9)基于数据分析和结果分析,设计模型来增加多样性或者用于针对某些特定样本;
10)集成学习;
11)在必要时返回步骤 1。
4. 哪个机器学习算法你最喜欢?
我会逐个选择算法,但我更喜欢在模型集成时使用那些简单的算法,比如岭回归(Ridge regression)。此外,在深度学习竞赛中,我通常喜欢从 resnet-50 开始改进模型或者直接设计一个类似结构的模型。
5. 你最喜欢的机器学习工具是什么?
我非常喜欢在计算机视觉竞赛中使用 PyTorch 框架,而在自然语言处理(NLP)或者时间序列竞赛中采用 TensorFlow 或 Keras。当我在做数据分析时,我会使用 seaborn 库以及 scipy 家族中的那些工具。此外,scikit-learn 和 XGB 也是非常有效的工具。
6. 你对超参数的调优方式是什么?
我会尝试根据对数据和算法的理论理解来调整参数,如果我无法解释为什么结果会更好或者更差,那么我会感到不安。在深度学习竞赛中,我会经常检索相关论文,并试图找出这些作者们在相似的情形下是怎么做的。而且,我会比较参数更改前后的结果,例如预测分布、受影响的样本等等。
7. 你采用什么方法来使得交叉验证与最终提交能尽可能稳定?
一个好的交叉验证集是成功的一半。如果我找不到评估模型的好方法,我是不会继续下一步的。
为了建立一个稳定的交叉验证集,你必须很好地理解数据集和将面临的挑战。我还会检验并确保验证集具有与训练集类似的分布,我会尽力确保我的模型在我的本地交叉验证集和公共排行榜上都能获得提升。
在某些时间序列比赛中,我会将 aside data 作为验证集保留一段时间。
我经常以保守的方式选择最终提交结果,我总是选择对我的安全模型(Safe model)的进行加权平均集成,并倾向于相对冒险的那一个(在我看来,更多的参数等于更多风险)。但是,我从来不选择我无法解释的结果进行提交,即便这个结果有可能在公共排行榜上得到更高的分数。
8. 简单总结一下,哪些特质帮助你赢得了竞赛?
好的交叉验证集,从其它竞赛中获取经验,阅读相关论文,讲究纪律和坚韧不舍。
9. 哪类 Kaggle 竞赛你最喜欢,为什么?
自然保护和医疗相关的比赛是我最喜欢的,我觉得我应该做点什么来让我们生活的地球变得更加美好。
10. 机器学习中最令你兴奋的领域是什么?
我对深度学习的各种进展都很感兴趣。我想用深度学习解决除了计算机视觉以及自然语言处理之外的问题,所以我会尝试在我参加的比赛和我的工作中使用它们。
11. 在解决数据科学问题时,你的领域专业知识发挥了多大的作用?
实话实说,我不认为我的专业领域知识发挥了极大作用,原因如下:
1)Kaggle 官方会非常细致地准备数据集,这对于所有人都是公平的;
2)想要简单地通过使用成熟的方法赢得比赛非常困难,特别是在深度学习比赛中,因此我们需要更多创造性的解决方案;
3)数据更加重要,我们可能需要阅读一些相关的材料。
但是有一些例外。在 Planet Amazon competition 中,我确实从自己之前的热带雨林经验中获得了一些想法,但这些经验在技术上而言,不能称为领域专业知识。
12. 你认为自己最有创意的技巧、发现或者方法是什么?
在最开始的时候一定要准备好解决方案文档。我会强迫自己写一份清单,里面包括目前所面临的挑战,我应该阅读的解决方案和论文,以及可能遇到的风险,所有可能有效的交叉验证策略,可能有用的数据增强策略。而且,我会不断更新文档。大部分的文件最终都成为了我的获胜策略。
13. 你在现在的工作中是如何使用数据科学的,在 Kaggle 上的竞赛经验是否对此有帮助?
我们尝试使用机器学习来解决各种银行业务问题:预测银行网点的访客数量,预测 ATM 应该准备的现金,产品推荐,操作风险控制等等。
在 Kaggle 中的竞赛也改变了我的工作方式,当我想找到解决问题的方案时,我会尝试去寻找类似的 Kaggle 竞赛,因为它们是宝贵的资源,并且我还建议我的同事们研究类似的获奖解决方案,说不定可以从中获得灵感。
14. 你对权衡模型复杂度和训练测试时间有何看法?
我的看法是:
1)当正确率最重要时,不应该过度关注模型的复杂性。我们必须充分利用经过数月的努力才获得的训练数据。
2)现在如果只使用多个弱模型的集成是很难去赢得比赛的。如果你想成为第一名,通常需要有非常好的单一模型。当我想在比赛中获得第一名的时候,我经常强迫自己设计不同的模型,这些模型可以在公共排行榜上取得前 10 名甚至是前 3 的成绩。
3)以我自己的经验,我可以在竞赛中设计多个模型来探索这个问题的上限,然后选择一个简单的模型使其在实际情况下可行。我总是尽最大努力为竞赛组织者提供一个简单的例子,然后在获胜者采访电话中与他们进行讨论。我发现一些组织者甚至使用我们的解决方案和思想来解决他们面临的一些其他问题。
4)可以发现,当训练、测试运行时间很重要时,Kaggle 有很多机制来确保性能:kernel 竞争、团队规模限制、添加更多在打分时没有计算的数据等。我相信 Kaggle 也会根据挑战的目标而改进规则。
15. 你是如何在 Kaggle 竞赛中越来越领先的?
有趣的竞赛和 Kaggle 中强大的竞争对手是我变得越来越强的原因。
在这里有这么多优秀的对手,想要赢得比赛非常困难,他们把我推到了极限。我去年曾试图独自完成尽可能多的比赛,然后我必须猜测出其他竞争对手会怎么做。要做到这一点,我必须阅读大量材料并且构建多功能模型。在比赛之后,我还会阅读来自其他竞争对手的所有解决方案。
16. 最近你最关注哪些机器学习研究?
我期待今年可以参与一项深度强化学习竞赛。
17. 你仅仅花了 15 个月就占领排行榜榜首,这是如何做到的?
首先,第一名是衡量我在 Kaggle 上学到了多少东西以及运气好坏的标准。
我在前几次竞赛中,试图将近年来学到的理论转化为技巧,并且从其他人那里学到很多东西。
在我对 Kaggle 竞赛有了一定了解之后,我开始思考如何以系统化的方式进行比赛,因为我在软件工程方面有许多年的经验。
就这样大约半年后,我首次拿到第一名,变得更加自信。我想我可能在半年内成为一名特级大师。在 Planet Amazon competition 比赛中,我以第一名作为目标。
然后我觉得我应该继续使用之前提到的策略和方法,并且取得了更多的成功。在赢得 Cdiscount 竞赛后,我到达用户排名榜前列。
受益于 Kaggle 平台,我从其他人那里学到了很多东西,Kaggle 的排名系统也在我的进步中发挥了重要作用。同时我也感到非常幸运,因为我从未想过我可以连续获得 6 个奖项,在许多比赛中我的目标都是前 10 名或者前 1%。我不认为我可以再次复现这样的高光时刻。
但是,我来参加竞赛的目的并不是为了一个好排名,我把每场比赛都视为学习的机会,我会尝试从我不太熟悉的领域挑选比赛,这样做的结果就是我在去年强迫自己阅读了数百篇论文。
18. 你之前提到了自己喜欢阅读往期比赛中高分团队的解决方案。你还有没有什么想特别强调的?
我尊重所有的赢家和精彩解决方案的贡献者,我知道他们付出了多少努力。我总是以敬佩的态度阅读这些解决方案。
这里有一些来自 Data Science Bowl 2017 的令人难忘的洞见:PyTorch、医学图像的 3D 分割、来自 Web 流量时间序列预测的解决方案,它使用来自自然语言处理的序列模型来解决时间序列问题,另外还有 Tom ( https://www.kaggle.com/tvdwiele)和 Heng ( https://www.kaggle.com/hengck23)的优秀解决方案。
via: blog.kaggle.com,雷锋网 AI 研习社编译整理。