“不要把时间浪费在 Kaggle 竞赛上。在处理真正的业务问题时它一点用都没有。”在我刚开始数据科学生涯的时候有人曾经对我说过这样的话。
作为一名年轻而懵懂的数据科学家,有两年时间我都遵从这条建议,一直在回避 Kaggle 比赛。最近,我偶然看到了 Abhishek Thakur 在 LinkedIn 上发表的帖子,给“歌曲流行度预测”Kaggle竞赛做宣传。
看完帖子后我就有了参加他的比赛的冲动,我还想看看之前得到的那条建议是不是正确的。而这篇文章要说的就是我完成比赛后得到的五项关键收获。
社区论坛中无私的代码分享
一开始,我以为参加 Kaggle 竞赛主要是为了与大家竞争,比比谁的分数最高。结果让我没想到的是,震撼我的竟然是社区的慷慨无私氛围。甚至在比赛开始时,他们已经开始分享有用的 EDA 代码、特征工程技术等等资源了。我个人觉得这更像是大家在一起共事,而不是相互竞争。
丰富了我对其他类型 ML 问题的经验
我的工作经验主要集中在时间序列的预测和优化领域。而参加 Kaggle 竞赛实际上是一个很好的实践机会,让我体验到了不同类型的 ML 领域所面临的常见问题。例如,这个歌曲流行度预测(分类)问题让我能尝试一些重采样方法来解决不平衡数据问题,并学到了如何使用正确的指标来评估模型。
接触到创造性的特征工程和缺失归因技术
“到头来,有一些机器学习项目成功了,还有一些失败了。是什么造成了这种差异?最重要的因素是项目所使用的特征”。——华盛顿大学的 Pedro Domingos 教授
由于市面上有许多模型可供选择,许多人将注意力转移到了模型/算法开发上,忽视了数据质量或特征工程技术。我个人认为我们更应该关注数据质量和高级特征工程技术,同时用一些简单的模型就够了。
在论坛上,大家分享了数不清的特征工程和缺失数据归纳技术相关资料。说实话,我收藏的那么多技术资料自己也没能全都尝试过。以下是我觉得很有趣的技术:
聚类模型(如 KMeans),用于生成新的特征。
PCA,一种降低维度的方法,用于减少特征的维度。
应用对数、箱形图、幂数转换来缩放数据。
对缺失数据进行 LGBM 计算。
基于领域知识,对 2-3 个变量进行特征交互。
多项式特征转换
学会如何编写高效的数据分析和绘图代码
由于我最近刚从 R 语言过渡到Python,所以对 ggplot 的代码结构比 matplotlib/seaborn 更熟悉一些。很多时候,我要么会遇到很多代码错误,要么最后得到的是没那么漂亮的图。所以我非常喜欢这个代码分享论坛,他们不只会分享构建模型的代码,还分享了许多内容翔实的 EDA 笔记本,其中有他们自己的发现。下面是我个人在这次竞赛中最喜欢的两篇文章。
使用交互式绘图的简单 EDA(文章链接:https://www.kaggle.com/dextermojo/song-popularity-eda-heads-or-tails-python-ver)
详细的数据分析报告 (文章链接:https://www.kaggle.com/headsortails/song-popularity-eda-live-coding-fun)
学习如何使用 optuna 包来做模型调优
翻阅别人分享的笔记本时,我发现有几个笔记本有一个有趣的术语——Optuna。它引起了我的好奇心,于是我决定找一个笔记本看个究竟。结果就是这个包!我肯定会在自己的下一个 ML 问题解决方案中使用它。
如果你和我一样没有听说过它,可以访问该链接(https://optuna.org/)来了解更多内容。大体来说,它是一个开源的超参数优化框架,用于自动化超参数搜索。
后记
毫无疑问,Kaggle是一个很好的平台,适合初学者或中级数据科学家练习他们的代码技能。
对于高级用户来说,我发现参加那些高水平的比赛(如 M5 预测比赛)会给参赛者带来富有挑战性同时又颇具价值的经验。
原文链接:
评论