今回は、2017年の年末ごろから「Kaggle」で積極的に活動し、Kaggle Masterとなってディー・エヌ・エー(DeNA)に転職した大久保渉太が担当します。いわゆるソフトウェアエンジニアとして6年間働き、前職ではバックエンドエンジニアとして証券システムに関わっていました。
これまで、機械学習を専門とするエンジニアの視点からKaggleについて紹介してきましたが、今回は筆者のような機械学習を本業としていないソフトウェアエンジニア(以下、エンジニア)の視点から紹介します。
Kaggleに参加することで何が得られるか
Kaggleに参加することで、エンジニアにはどんなメリットがあるのでしょうか。機械学習を本職としないエンジニアがどのようなスキルや経験を身に付けることができるのか、筆者の体験をもとに記述したいと思います。
機械学習やその周辺技術を学べる
Kaggleは新しい技術の宝庫です。筆者の場合、業務ではオンプレミス環境でJavaを使っていたのですが、KaggleではGoogle Cloud Platform(GCP)環境でPythonを用いて機械学習モデルを作成しました。Kaggleを始めた当初は環境構築だけでも何十日を要していましたが、今では数分で立ち上げられる、なじみ深い環境になりました。
業務においてプログラミング言語や開発環境が固定的になりがちなエンジニアにとって、新しい技術を自然と習得する機会はなかなか得られないため、Kaggleに挑戦する意義は多いにあると考えています。
さらに言えば、機械学習とその周辺技術は2018年現在、需要が高い分野であり、自身の市場価値を大幅に高めることができる技術です。機械学習自体を本業としないエンジニアであっても、環境構築を含めた周辺技術を学ぶ価値は多いにあるのではないでしょうか。
小規模なプロジェクトでコードを書く経験を積める
Kaggleでは自分自身でコンペ開始から終了までを管理します。開発環境などの選定、クラス設計からコーディングまでを一人で行うため、一つひとつの選択が最終的にどのような結果をもたらすかという理解が進みます。筆者の場合、書き捨てのコードをコピー&ペーストしていくという、ひどい品質でコンペを進めていたことがあり、結果として終盤になって自分の最良解を見失うなどの手痛い経験をしました。
業務で大規模プロジェクトにアサインされた際、システムの全貌を把握せずに仕事をしていると判断が限定的となってしまい、自分の仕事が最終結果にどう影響するのかを実感できないときがあります。また、業務では失敗を恐れるあまり、なかなか大胆な実験ができないこともあります。その点、Kaggleであれば、自由に実験を進めながら、試行錯誤を通じて良い設計やコードへの理解を深められます。
パフォーマンスチューニングに関する知見が得られる
Kaggleでは、プログラムの実行速度を意識してプログラムを書く機会が多々あります。特にデータが多くなると、プログラムの実行時間が数時間、ないし数日間を超えたりします。そのため、必要に迫られ、大規模なデータを効率的に処理するためのノウハウを身に付けることになります。
筆者が経験したコンペでも、データの前処理に数日単位の時間が必要だったため、プログラムをマルチスレッドで動かすための改良や、I/O高速化のためのデータ形式変更、ハードウェアのスケールアップといった施策を実施した経験があります。
Kaggleに参加することで、こういったパフォーマンスに関する改善を自然と行えるようになります。業務においても、必要な工数や費用への理解が進み、コストに見合うかどうかの判断を、より正確に行えるようになるでしょう。
なぜKaggleで学ぶべきか
機械学習について学ぶためには、さまざまな方法が考えられます。例えば、理論的な専門書を熟読する、オンラインコースを受講するなどがあります。各人のスキルセットや学びたい分野に応じて、適切な学習方法は異なると思いますが、ここではエンジニアにとってKaggleで機械学習を学ぶメリットを挙げていきます。
豊富なサンプルコード
Kaggleにはサンプルコードが大量に公開されていて、そこから学ぶことができます。機械学習についてのサンプルコード量で言えば、Kaggle以上に参考になるサイトはないのではないでしょうか。サンプルコードをコピー&ペーストで動かした後、徐々に改良していくといった学び方は、多くのエンジニアが一度は経験したことのある学習方法ではないでしょうか。そういったなじみ深い学習方法を大量のサンプルコードで実践できます。
手を動かしながら学べる環境
「手を動かしながら機械学習の技術を学ぼう」と思い立ったとしても、そこには困難が立ちはだかります。「機械学習でどんな問題を解くのか」という問題設定や、「どんなデータを用いて問題を解くのか」といったデータ収集の部分が、実はかなり難しく労力がかかってしまうのです。
Kaggleでは、企業が実際に取り組んでいる課題をテーマにしたコンペが多く開催されていて、データも用意されています。その点で、すぐに手を動かして学べる環境が整っています。
さらにKaggleでは、作成したモデルについての評価をすぐ得られます。モデル精度の良し悪しがすぐに評価される仕組みがあることで、手を動かすモチベーションを保てます。