Kaggle初心者生態学概論

初出: Qiita @humanbeans893

はじめに

はじめまして、Mizと申します。
今年の4月からKaggleを始めたばかりの初心者です。

正直に白状すると、最初は「実績作り」という少し不純な動機で始めました。しかし、気付けばその面白さと奥深さにのめり込んでいました。
本記事では、そんな初心者がこの半年間でどのような失敗をし、どうやって開発フローやメンタルを整えていったのか、「生態記録」としてありのままにお話しします。

1. 参加するコンペの選び方

私は基本的に「NotebookやDiscussionが充実していること」を最優先し、以下の条件でコンペを選定しています。

  • ドメインの親和性: 画像やテーブルデータなど、ノウハウがある程度知られている分野であること。
  • 参加人数の多さ: 多くの人が取り組みやすいと感じており、情報共有が活発であること。
  • 上位層の厚さ: GM(Grandmaster)やMasterが多く参加していること。これは学びの多い「良コンペ」である指標になります。
  • 適度な運要素: 実データコンペなど、完全な実力勝負だけでなく運の要素も多少絡んでくれること。
  • 計算コスト: LLMの大規模ファインチューニングなど、個人のGPUリソースでは対応しきれない大規模計算を必要としないもの。

2. 開発フローと技術的こだわり

コンペを選んだ後の開発フローも、この半年で大きく変化しました。

パイプライン構成の変遷

最初は一つのNotebookに全てのコードを書いていましたが、現在は管理しやすさを重視してPythonスクリプトで分割しています。

  • preprocess.py(前処理)
  • train.py(学習)
  • inference.py(推論)

このように役割を明確に分けることで、実験のサイクルをスムーズに回せるようになりました。

再現性への執着(Docker / uv)

実験管理において「再現性」は命です。
環境の差異で泣かないために、Dockerを活用して環境を固定しています。また、パッケージ管理には最近話題の高速なツールuvを導入するなど、モダンな技術スタックを取り入れてストレスのない実験環境を構築しています。

AIツール(Claude Code)活用フロー

実装スピードを上げるため、AIツールも積極的に使っています。

  1. 情報の集約: Discussionをすべて読み込み、Markdownに要点をコピーして知識を整理。
  2. コードの収集: 参考になりそうなNotebookをダウンロード。
  3. 設計: ディレクトリ構成とクラス設計を自分で考える。
  4. 実装: まず一度、Claude Codeなどに指示を出してベースを書かせる。うまくいかない部分は関数名と定義だけ自分で書き、中身をAIに埋めさせる。

3. 【反省】「LLM依存」と「5サブの罠」

ここで、私がハマった大きな失敗について触れておきます。

Claude Codeに出会った当初、その性能に感動しすぎて**「実装を早めて提出すること」**だけを目的にしてしまった時期がありました。
「とりあえず1日5回(Kaggleの上限回数)SubmissionできればOK」と考え、中身を深く理解しないままAIに書かせたコードを投げ続ける日々。

当然ですが、これは全くダメでした。
中身を理解していないブラックボックスなコードでは、エラーが出ても直せず、改善のアイデアも浮かびません。
「AIに使われる」のではなく「AIを使いこなす」ためには、設計と理解は人間が責任を持つことが不可欠だと痛感しました。

4. コンペ中の思考と「データの見方」の変化

コンペ中にアイデアに行き詰まった時は、原点に立ち返ってひたすらデータを眺めるようにしています。
ただ、「データを眺める」と言っても、Kaggleを始めた当初と現在ではその着眼点が大きく変わってきました。

  • 初期の頃:
    統計的な数値(平均や分散など)だけを見て満足していました。「いかに高度なモデルを使うか」ばかりに気を取られ、実際にはモニターとただ睨めっこしているだけの時間が長かったように思います。
  • 現在:
    「予測が間違っているデータ」に徹底的に注目しています。「なぜここの予測が大きく外れたのか?」「なぜこのような外れ値データが存在するのか?」といったエラー分析や、モデルが出力した特徴的な挙動を深掘りするようになりました。

最近では生データを目視してデータの異常(Anomaly)に気づけることも増えてきました。統計値だけでなく、エラー分析や生データに目を向けるようになってから明確にスコアが伸びるようになったので、これは自分の中での成長だと感じています。

5. モチベーション管理とメンタルヘルス

半年間走り続ける中で、技術以上に大切だと感じたのが「メンタルと体調」の管理です。

「楽しむ」が最強のソリューション

「就活のために結果を出さなきゃ」と無理をして焦っている時期は、不思議とうまくいきませんでした。
逆に、スコアが伸び悩んでいても「この課題面白いな」と楽しめている時や、体調が良く睡眠が十分に取れている時は、自然とLeaderboardの順位も上がっていきました。

リフレッシュと仲間

ずっとPCに向かっていてもアイデアは出ません。

  • 趣味: ボルダリングで身体を動かしたり、散歩をしたりしている時にふとアイデアが降りてくることが多いです。
  • 仲間: チームを組むことは、最大のモチベーション維持装置です。自分より賢いチームメイトから学ぶことは多く、1人では折れそうな時も支えられました。
  • オフ会: Kaggleのオフ会に参加して熱量を浴びるのも、やる気を復活させる良い方法でした。

6. 半年間の戦績と振り返り

以上の試行錯誤の結果、今年の戦績は以下の通りです。
SIGNATEでは大きな成果が出ましたが、Kaggleでは自身の専門分野であっても勝てないなど、多くの「壁」にぶつかりました。

🏆 主な入賞実績

  • SMBC Group GREEN×DATA Challenge 2025 for Recruiting: 総合3位 🥉

📊 Kaggle 参加コンペと教訓

合計6コンペに参加し、多くの学びと悔しさを味わいました。

コンペ名 順位 振り返り・教訓
BirdCLEF+ 2025 717/2027 初めてチームメイトと挑んだコンペ。人力でデータのアノテーションを行うなど一生懸命取り組みましたが、勝てませんでした。
CMI - Detect Behavior with Sensor Data 277/2657 自身の研究分野(加速度データ)だったため「絶対に負けられない」と意気込みましたが、敗北。研究とコンペの違いを痛感しました。
NeurIPS - Ariel Data Challenge 2025 235/860 ノリで参加したものの、深く取り組めず1回の提出(ワンサブ)で終了。準備不足でした。
Yale/UNC-CH - Geophysical Waveform Inversion 289/1365 こちらもノリで参加しましたが、同様にワンサブで終わってしまいました。
Jigsaw - Agile Community Rules Classification 874/2445 Fine-Tuningが必要だと考えていましたが、本当に大事だったのはTest Time Trainingでした。技術選定の重要性を学びました。
NeurIPS - Open Polymer Prediction 2025 1251/2240 最初は運要素の強い「おみくじコンペ」だと思っていましたが、違いました。データへの理解が浅かったと反省しています。

7. 個人的な反省

最後に、この半年間で一番の反省点は、**「メダルを1個も持っていないのにKaggleオフ会に参加して、誰よりもはしゃいでしまったこと」**です。
実績がまだ伴っていないにも関わらず、強い人たちに囲まれて完全に舞い上がってしまいました。コミュニティの温かさに甘えてしまいましたが、次はちゃんとKaggleメダルをぶら下げて胸を張って参加できるよう、実力をつけるのが急務です(笑)。

おわりに 〜感謝を込めて〜

少し個人的な感謝を述べさせてください。

実は私は以前、少し特殊な環境に身を置いていたのですが、ある時友人に手を差し伸べてもらったことでデータサイエンスの世界に出会い、人生を大きく上向かせることができました(この辺りの詳しい話は、また別の記事で書きたいと思います)。

Kaggleを通じて学んだ技術は、現在の私の研究活動において非常に役立っています。そして最近では、学んだことを誰かに教える側に回る機会も増えてきました。
いつか何らかの形で、私を助けてくれた友人や、育ててくれたコミュニティにお返しをしたいと思っていますが、まだまだ学ぶことばかりです。

これからもAIツールを効率的に使いこなしつつ、泥臭くデータと向き合うことを大切にして、楽しみながら精進していきたいと思います!