エンジニアのスキルがどう役にたつか
さて、Kaggleに参加したからには上位を狙いたいのが人情です。始めのうちは、「機械学習をちょこちょこっと学べればいいなー」などと考えていたものの、少しずつスコアが上がっていく快感を覚えることで、どんどんとKaggleの魅力に取りつかれていきます。ここではエンジニアのスキルがどのように役に立つかを記述したいと思います。

図:Kaggleを始めたころのプロフィール(成績)
エンジニアとしてのスキルや経験を生かし、上位に入りました。
コードを書くことに抵抗がない
手を動かすことができる。これはエンジニアの大きな能力の一つではないでしょうか。Kaggleで上位に入るためには、かなりの量のコードで試行錯誤を繰り返す必要があり、最終的に使用するコードの何倍、何十倍も書く必要があります。
筆者の場合、コンペを最後までやり切ると何万行ものコードが生成されていました。これは普段からコードを書き慣れていない人には非常に難しい行為で、その点でエンジニアには非常に大きなアドバンテージになります。
コードやドキュメントを読むことに抵抗がない
機械学習の技術は日進月歩であり、初級者はもちろん、上級者でもコンペのたびに新しい技術を学ぶことになります。おそらく新しい技術や手法を学ばずに上位に入ることは難しいのではないでしょうか。
他人のサンプルコードから学ぶことは多いですし、ライブラリのドキュメントを読み込んだりすることもあります。これらの学習行為を日常業務として行っているエンジニアはかなり多いと思いますので、この点も大きなアドバンテージです。
パフォーマンスチューニングの経験がある
この点は必ずしも多くのエンジニアに当てはまるわけではないと思いますが、パフォーマンスチューニングの経験があると役に立ちます。
Kaggleでのモデル作成作業を抽象化すると、コスト(開発工数や費用)に対するパフォーマンス(精度)を向上していく作業といえます。これはエンジニア業務のパフォーマンスチューニングと同じことであり、業務経験をそのまま生かせます。
また、業務でプロジェクトに参加していれば、スケジュール管理の経験があるでしょう。Kaggleではコンペの開催期間(数カ月など)が決まっており、その期間内に発表した予測結果のみを最終スコアとして使えます。当然、スケジュール厳守なため、普段からスケジュールに合わせて優先順位を付ける習慣が生きてきます(もちろん、コンペ後半になってデスマーチをすることも可能なので、そちらのスキルも生かそうと思えば生かせますが…)。
体感したKaggleの楽しさ
ここまで、純粋にエンジニア視点でKaggleを紹介してきました。Kaggleに参加していて思うのは、とにかくコードを書いていて楽しいということです。データの特徴について考えるのもそうですし、ちょっとした気付きの積み重ねでスコアが上がっていく過程は本当に中毒性があります。
ぜひエンジニアの皆さんも一緒に取り組んでもらえるとうれしいです。

- 大久保渉太
- ディー・エヌ・エー システム本部 AIシステム部 データサイエンスグループ
- 大学院中退後にニートを経験後、ハローワークの紹介でプログラマーになる。前職ではソフトウェアエンジニアとして働く傍ら、Kaggleで上位実績を収めた。2018年10月にDeNA入社。オートモーティブ事業やゲーム事業への機械学習活用へ向けた開発を行っている。