文章目录[隐藏]
之前发过跟Z by HP做的一个Kaggle 大师访谈,在里面聊了一些对Kaggle的看法。我觉得说的还比较实在,但最后分批发出来加上花哨的排版,感觉系统性下降了不少。本来寻思找个时间再写一篇,但前几天(大概5月份吧。。)逛推特看到Mario[1](最高世界排名12的Kaggle Grandmaster)写的这篇文章,非常赞同,干脆给翻译成中文发出来。
以下是译文,加了一些我的小comments。
在Kaggle上竞赛是否值得?一个Kaggle大师的思考
作者:Mario Filho
没有Kaggle,我就不会有数据科学事业。
因此,如果你正在寻找一篇抨击Kaggle的博文,这里不是你要找的地方。
但是,我不是一个认为Kaggle是每个人成为数据科学家必须做的终极事情的激进分子。
我想从一个曾经参加过大量比赛但几年前决定 "退休 "的人的角度来发表真实的看法。
一些背景情况
我的职业道路非常奇怪,但我认为这是一个更有说服力的案例,说明花时间参加Kaggle比赛可以帮助你。
我是一个从法学院辍学的人,不想再上大学,决定自学机器学习是个好主意,尽管当时几乎所有的数据科学工作岗位都要求至少有STEM的硕士学位。
我把在Kaggle上的比赛看作是显示我知道自己在做什么并弥补没有学历的唯一机会。
上大学可以为我节省很多时间和精力,但我仍然认为,即使你没有处于我当时的奇怪情况,也可以从Kaggle中受益。
Kaggle的优点
1.你遇到的人
我有机会向机器学习领域最优秀的人学习,在某些情况下,我还结识了Kaggle以外的朋友。
我对在Caterpillar(现在的Tube Pricing)比赛期间通过Skype与Giba[2]和Leustagos[3]讨论策略的时间记忆深刻。
Stas Semenov的成绩一直给我留下深刻印象,在联系合作之后,我找到了一个超越比赛的朋友。
今天,你看到很多人在论坛上寻找大规模的参与,或者为了获得奖牌而组队,但Kaggle的真正价值在于组队创造关系。
我(在生活中)最大的错误之一是试图自己做所有事情。
如果你看看排名靠前的Kaggle参赛者单枪匹马与组队参加的比赛有多少,你会发现大多数人的团队参与比例都很高。
如果你在一个团队中,更容易获得前排位置和奖项。
与有经验的Kagglers合作的一个额外提示
吸引有经验的Kaggler加入你的团队的最好方法是有一个有前途的解决方案(由LB排名来证明),并提议做大部分的重活。
我知道与更有经验的Kaggler组队会对我的成长有很大帮助,所以我使用了以下策略来获得我与Giba的第一个团队。
当时有两个比赛的结束日期相同。我与Giba交谈,发现他专注于我没有参加的那个比赛。
我知道他喜欢参加尽可能多的挑战赛。我有一个像样的解决方案(在LB上大约150名),并向他提出以下建议:让我们合作,我们来谈谈想法,我来负责大部分的工作。
他同意了,在看了我的代码几分钟后,他发现我的功能工程中有一个简单的错误。在修复它之后,我们跃居第二名。
这对我们的积极性是一个巨大的推动。
我们让Leustagos和Josef Feigl加入了这个团队。我们都付出了很大的努力,最后赢得了比赛。
阅读他们的代码,领略他们对机器学习的思考,比我上的任何课程都要好。
2.你得到的工作机会
我多次遇到以下对话。
我:"你是怎么找到我的?"
招聘者。"我在看Kaggle,发现了你的资料。"
即使你在Kaggle上没有保持很高的排名,公司也会积极寻找Kaggle比赛的获胜者、大师和特级大师。
在LinkedIn上搜索描述中带有 "Kaggle "的职位,你会看到像亚马逊、微软和Meta这样的公司把比赛经验作为首选资格。
有些公司如英伟达甚至有一个专门的Kaggle Grandmaster团队。
译注:做比赛的话的话他们就是你的竞争对手。。
对于自由职业者/咨询业来说,这是个不确定因素。一些客户会知道Kaggle并重视它,另一些则不会。这可能会随着时间的推移而改善。
即使你从来没有赢得过比赛,你从比赛中学到的东西也会帮助你在工作中做得更好。
3.赢钱很爽,但不是全部
奖金通常不值得你花时间和精力去赢。
如果你刚刚起步,最好把比赛作为一种学习工具,而不是把注意力放在钱上。
将你在Kaggle上获得的知识用于其他项目,其潜在收益是天文数字。
我不记得我到底是在哪里听到的关于在Kaggle上比赛和在公司里做数据科学家的比喻。
这就像把跑5公里的人和奥林匹克运动员相比。奥运会运动员要想获得最大的成绩,就必须超越基本的要求。就像在Kaggle上的竞争迫使你非常深入地去完成任务。
虽然你很可能永远不会在工作中对一项任务进行如此深入的研究,但你在比赛中做过的事实使你更简单、更快速地得出高性能的解决方案。
只是不要被蒙蔽,以为建模是唯一重要的事情(后面会有更多相关的内容)
4.你在不知不觉中变得擅长编写机器学习代码
要成为一名优秀的数据科学家,既要有策略,也要有 "机械 "技能。
Kaggle是一个练习机械部分的好地方。
由于你必须在各种解决方案之间快速迭代,写代码处理数据和建立机器学习模型将成为你的第二天性。
你也会更好地使用开箱即用的机器学习库,并且总是比大多数数据科学家更早知道在实践中发挥作用的新库和方法。
5.你将对数据和机器学习的可能性有一个非常好的感觉
这在Kaggle之外的许多不同领域都非常有用。
尽管数据集(几乎)是现成的,但对我有帮助的一个练习是尝试逆向工程,看看赞助商是如何创建它的。
例如,在最近的H&M推荐挑战中,任务是根据顾客过去的购买历史,预测他们在未来7天内会购买哪些商品。
他们分享了来自客户、交易和产品的数据,而如何使用这些数据则是由你来决定的。
下次你必须解决公司内部的推荐问题时,你就知道要寻找哪些数据库,以及如何使用它们来获得一个模型的工作。
6.你学会了可靠验证的价值
"相信你的验证(Trust your validation)"是Kaggle社区的顶级竞争者经常使用的一句话。
这并不意味着相信任何验证,而是首先创建一个值得信赖的验证分项,并且不要花太多时间 "调整 "你的模型以攀登公共排行榜。
攀比排行榜(在大多数情况下)会导致过度拟合和私人排行榜上的糟糕结果,就像一个糟糕的验证方案会导致模型在生产中表现不佳一样。
一些比赛在公共排行榜和私人排行榜之间有可怕的震荡,这给你一个教训,你永远不会忘记在部署模型之前有一个可靠的验证方案是多么重要。
不仅如此,你会学到许多不同的方法来验证你的模型,这些方法超出了通常的随机训练/测试分割。一些Kaggle选手对此非常有创意,然后在比赛结束后在论坛上分享。
我从有经验的竞争者那里学到的一个具体的Kaggle提示是,把公共排行榜当作另一个验证折页。
7.你要学会快速找到目标泄漏点
如果你的结果看起来好得不像真的,那么它们可能就是真的。
当测试集的信息通过你所使用的特征 "泄漏 "到训练集时,就会发生泄漏。这是你在生产中无法获得的信息,但却存在于你的历史数据中。
例如,假设你试图预测明天的股票价格。
如果你在将数据分割成训练和验证之前简单地对数据进行缩放,那么你的验证指标将比它们应该的乐观得多。
这是因为你在训练数据中使用了关于未来的信息。
Kaggle是一个学习这个的好地方,因为它充满了泄漏的例子。
你会了解到,当你在Kaggle上发现数据泄露时,你会利用它来赢得比赛,但当你在比赛之外看到它时,你会修复它。
8.你学习可重复的研究实践
当你赢得比赛时,你必须提交你的代码和一份报告,解释你所做的事情,并与赞助商进行通话。
这有两个目的:显示你没有作弊和提供有价值的研究。
这只是比赛教你如何做可重复研究的一种方式。
你必须把你在比赛中尝试的所有乱七八糟的东西组织起来,让它产生预测,让你在排行榜上获得相同的位置。
如果你从未赢过呢?
另一种练习方式是在比赛期间在团队中分享工作。
在有经验的Kagglers团队中,每个人都在自己的工作,在这里和那里分享一点点代码。
每个团队成员的机器里都有一份完整的当前最佳解决方案的副本,所以他可以尝试在其中添加新的模型。
这需要我们定义共享的验证分割和数据,这是使解决方案可重复的一个重要部分。
这是在不得不在 "真实世界 "中进行研究之前练习研究技能的一个很好的方法,因为你可以犯所有你想犯的错误而不会有大的后果。
如果你想看看一个组织良好的最终解决方案库是怎样的,可以看看Chenglong Chen的这个方案[4]。
9.你培养了自信
每一个机器学习问题都是一样的,只是穿上了不同的衣服。
当你看到自己在起初似乎遥不可及的比赛中取得进展时,你会获得自信,相信自己能够解决非常困难的问题。
我总有一种感觉,下一次比赛我根本做不出什么有用的东西,但即使在我的解决方案被击垮的比赛中,我也学到了宝贵的经验。
事实上,那些我表现较差的比赛正是让我学到最重要的东西的比赛。
10.扩大你的解决方案工具箱
如果你不了解一个工具,你就无法使用它。
你的机器学习工作的质量取决于你对某一问题有多少想法、方法和技巧。
在你尝试之前,没有办法知道什么会成功,但如果你只知道1种方法呢?
你有越多的候选解决方案就越好。
Kaggle竞赛将迫使你在快速迭代解决方案的过程中尝试许多不同的技术。
这将帮助你学习许多不同的方法来解决机器学习问题,并给你一个工具箱,让你在不同情况下使用这些方法。
例如,我总是发现人们不知道的一个工具是因式分解机(FM)。你听说过这个模型吗?
对于非常稀疏的、有数百万行的分类数据来说,这是一个很好的解决方案。它的速度很快,而且实现了一种非常聪明的方法来模拟特征的相互作用。
如果我不参加(或至少不读)Kaggle点击预测比赛,我就永远不会知道这个工具了。
Kaggle的坏处
1.在Kaggle上花费太多时间会扭曲你对机器学习的看法
译注:我认为比钻研技术更重要的是让技术产生价值
在业界,机器学习并不是要每天多次刷新排行榜,看你是否保持了自己的位置。
今天,我仍然很难提醒自己,我不需要为客户创造绝对最好的解决方案。它需要解决的是问题,并且是可维护的。
在最坏的情况下,我质疑自己。"如果我不能建立一个能在竞争中获胜的模型,我真的知道我在做什么吗?"
冒名顶替者综合症是最好的!
不要在Kaggle上花费太多时间,而忽略了机器学习的其他重要方面。
Kaggle应该在你的技能发展计划中,但我也建议你把大部分时间花在端到端项目上。
从了解业务问题开始,做一些数据探索,看看数据是否可以帮助解决问题,建立和评估不同的模型,并进行部署。
今天你可以非常容易地部署模型,无论是简单的Gradio/Streamlit应用程序,还是SageMaker和Vertex AI上更复杂的pipeline。
我发现建立一个被人们使用的东西比一个只存在于我的笔记本电脑上的模型更令人满意。
2.赢=努力+经验+运气+金钱
为了取胜,你将不得不快速测试许多想法。随着你的数据集的规模不断增长,你将需要使用云服务来获得更大更快的机器。这将花费你真正的钱。
可以把它作为教育成本,但要注意它。几年前,一个朋友因为配置错误的现货价格,在AWS上花了大约5千美元,在一个比赛中获得第四名。只有前三名获得了奖金。哎哟!
你在排行榜上的位置越高,你就越需要依靠运气。前几名之间的分数差异非常小,数据或你的代码中的小的随机波动可以造成很大的差异。
而且这并不是简单的噪音,而是在正确的道路上开始的运气。
每次我赢得任何比赛,在我看来,我尝试的每个想法都会提高我的分数。在其他情况下,几乎所有我尝试的东西从一开始就失败了。
在阅读最近H&M时尚推荐比赛的解决方案时,我发现至少有两个顶级团队说Catboost是他们最好的模型,还有两个顶级团队说这是他们最差的模型。
同样的数据,两个不同的开发历史,两个不同的结果。
要想获胜,你不仅要创造一个好的机器学习解决方案,还要花大量的时间来尝试不同的竞赛技术。
一个简单的例子是使用你的整个数据集来扩展特征或编码类别,而不仅仅是训练部分。
在Telstra比赛[5]中(我赢得了比赛),我花了很多时间以不同的方式对数据泄漏进行编码,这样我就可以合集所有的数据并赢得比赛。
在Tube Pricing比赛[6]中(我的团队赢了),我们花了很多时间来利用Tube ID的数据泄漏,并用你能想到的所有可用的机器学习库来创建集合。
你可以发现这样的比赛,获胜者几乎是逐行寻找可利用的模式,而这些模式因为一些数据处理错误而被转化为私人排行榜。
因此,如果你决定要赢得比赛,要知道你会花很多时间在那些在实践中是错误的事情上,但由于比赛中数据的性质,是必须要赢得的。
我建议你有一个超越获胜的目标,比如尝试所有类型的编码员,或者尝试所有的树形收集方法。这样,当比赛结束后,你可以带走一些东西。
我曾经想学习更多关于特征工程的知识,所以我设定了一个目标,只使用 "单一模型"(可以是XGBoost这样的树状集合,但不是传统的Kaggle集合)。
除了知道如何在实践中创建强大的单一模型外,每个获胜的合集都有一个非常强大的单一模型,并得到其他模型的补充。
在Tube Pricing比赛中,我最好的单一模型足以获得第10名。
3.Kaggle数据是静态的
译注:例如Kaggle特别容易遇到noisy data,但现实项目中应对脏数据最好的办法不是融合,而是修正你的数据。
在比赛中,数据是静态的。你必须训练一个能在特定数据集上运行良好的模型。
这与现实世界不同,现实世界中的数据一直在变化,你必须持续更新你的模型。
这种情况正在发生变化,因为一些与交易有关的比赛已经有了一个不断变化的排行榜,要求你编写的代码将在几个月内用新的数据多次运行。
所有这些,同时受到Kaggle Kernels上可用计算资源的限制。
4.那么......值得还是不值得?
Kaggle既不是一无是处,也不是银色子弹。
一般来说,对那些说Kaggle是唯一重要的东西的人和那些说它没用的人要小心。
大多数批评都是基于这样的期望,即Kaggle可以教会你一切。但没有什么能真正教会你一切。把Kaggle用在它所擅长的地方。
我认为每个数据科学家都可以从尝试认真参加至少一个挑战赛中受益。
除了明显的技术学习,你还能学到有用的心理技能,比如。
你要学会足智多谋。与其总是向别人索取你必须解决的问题的解决方案,不如自己去找一个解决方案。
你要学会创新。如果你想改进你的解决方案,你就必须想出那些不是一眼就能看出来的原创想法。
你要学会在压力下工作。在竞争中,每一分钟都很重要,如果你想赢,你就必须能够迅速提供结果。
你要学习如何处理挫折。你可能会花比你预期更多的时间去尝试不同的东西,但都不奏效。
Kaggle是一种工具,和其他许多工具一样,如何使用它取决于你。
对我来说,Kaggle是很有价值的! 我甚至得到了这件很酷的外套!(我也有 :))
参考资料
[1]Mario Filho: https://www.kaggle.com/mariofilho
[2]Giba的profile page: https://www.kaggle.com/titericz
[3]Leustagos的profile page: https://www.kaggle.com/leustagos
[4]Chenglong wining solution: https://github.com/ChenglongChen/kaggle-CrowdFlower
[5]Telstra比赛: https://www.kaggle.com/competitions/telstra-recruiting-network
[6]Tube Pricing比赛: https://www.kaggle.com/c/machinery-tube-pricing