Kaggle銀メダル獲得に向けた実験管理の工夫

こんにちは、AIコンサルティンググループの中原輝樹です。

AITCでは、データサイエンススキルの向上などを目的に、複数のメンバーが機械学習コンペティションプラットフォームであるKaggle(カグル)が開催しているコンペに参加しています。私もスキル向上の一環として以前からKaggleに取り組んでおり、先日、MAP コンペ(MAP - Charting Student Math Misunderstandings) で銀メダル(1857チーム中48位、上位3%)を獲得しました。

本記事では、解法紹介には焦点を当てず、銀メダル獲得のためにコンペにどのように取り組んだか、どんな点を意識して試行錯誤していたかについて紹介します。


はじめに

Kaggle では、コンペの順位に応じて以下のようにメダルが付与されます。

  • 金メダル:上位0.2% または上位10人以内
  • 銀メダル:上位5%以内
  • 銅メダル:上位10%以内

私が Kaggle コンペに本格的に参加し始めたのは 2023 年頃で、これまでに銅メダルは複数回獲得してきました。Kaggle界隈では、銅メダルは「基本的なデータサイエンスの知識があり、Kaggle上で公開されているNotebook や Discussion の手法を適切に取り入れられれば獲得できる」と言われることが多いです。初心者にとっては公開されている情報をきちんと理解するだけでも簡単ではありませんが、そのレベルまで到達すれば銅メダルは十分狙えるという見方自体は、私も概ね正しいと考えています。

一方で、さらにその上の銀メダルを取るには、公開されている手法をそのまま使うだけでは不十分で、独自の工夫を加えてスコアを伸ばす必要があります。しかし、公開されている手法自体でも高スコアが取れる場合が多く、銅メダルとさらに高スコアが必要な銀メダルの間には、大きな壁があります。私自身もこれまで参加したコンペで独自のアイデアを試行錯誤してきましたが、思うように精度向上につながらず、銀メダルには手が届いていませんでした。

そこで今回参加したMAP コンペでは、スコアを上げるための実験の管理・進め方・効率化に重点を置いて取り組みました。その結果、初めて銀メダルを獲得できました。本記事では、コンペ中の取り組みの流れと、特に効果的だった実験面での工夫として、以下の3つの運用を紹介します。

  1. 実験結果を「比較できる形」で可視化・整理する
  2. 実験の待ち時間と手作業を減らす
  3. 情報収集を習慣化する

特に、銅メダル圏のスコアは出せるものの、銀メダルまであと一歩届かない方にとって、取り組み方の参考として読んでいただければと思います。


コンペ概要

  • コンペ名:MAP - Charting Student Math Misunderstandings
  • タスク:数学の問題に対する生徒の自由記述回答から、潜在的な数学的誤解を予測
  • 主な手法:Qwen などの言語モデルを分類タスク用にファインチューニングし、複数モデルをアンサンブル
  • 開催期間:2025/7/11〜10/16
  • 評価指標:MAP@3(正解が上位3件の中にどれだけ入ってるかを平均したスコア)

今回のデータは、教育プラットフォームであるEedi 上の4択問題(正答1つ+誤答3つ)に対して、生徒が選んだ選択肢と、その理由を自由記述で説明した文章から構成されています。学習用データは約36,700件、テストデータは約16,000件です。

本タスクでは、この自由記述の説明文を手がかりに、生徒の背後にある数学的な誤解を推定します。たとえば小数の大小比較に関する問題で誤答を選び、「0.355 は 0.8 より大きい(355>8だから)」のように、整数の感覚を小数に誤って当てはめてしまうケースがあります。コンペでは、こうした理由説明に基づいて、誤解の種類を適切なタグとして付与します。

この取り組みは、教師が生徒の誤解を素早く把握できるようにし、フィードバック作成の効率化につなげることを目的としています。

コンペ中の取り組みの流れ

序盤(開始〜1ヶ月)

今回のコンペでは、Qwen などの言語モデルを分類タスク向けにファインチューニングする手法が主流でした。そこでまず、類似の問題設定のコンペで用いられていた手法を調査し、公開されていたコードをベースにしつつ、今回のコンペで公開されていたベースラインも組み合わせて、自分用のベースラインを構築しました。
また、CV(交差検証) の分割方法についても、Discussion で議論されていたデータの特徴を踏まえて決定しました。この段階で、当時の銅メダル圏内のスコアを出せていました。


中盤(1〜2ヶ月)

公開されていたコードの中では、複数モデルのアンサンブルを行う手法が高いスコアを出していました。言語モデル系のコンペでは推論時間の制約によりアンサンブルできるモデル数が限られることが多いですが、今回はテストデータが比較的軽量だったため、(モデルの規模にもよりますが)10 個程度までアンサンブル可能でした。

中盤では、最終提出でできるだけ多くのモデルをアンサンブルできるよう、ファインチューニング対象のベースモデルを複数試し、性能差を確認する実験を進めました。アンサンブル候補のベースモデルがある程度固まってからは、入力プロンプトや後処理の工夫、誤りやすいデータの分析など、モデル以外の改善についても一つずつ検証していきました。

性能の良いベースモデルをある程度特定できており、さらに入力プロンプトの工夫でもスコアを伸ばせていたため、この時点でも当時の銅メダル圏内のスコアを維持できていました。


終盤

終盤は、スコアが良かった実験設定に対して seed を変えながら学習を繰り返し、アンサンブルを強化する作業が中心でした。マシン性能の都合で 14B までのモデルしか扱えず、GPUクラウドの利用も検討しましたが、環境構築の時間が取れず断念しました。

最終的には、5 つのベースモデルに対して seed を 2 種類ずつ学習させ、CV と LB(Leaderboard:コンペ期間中に表示される暫定スコア)が良かったモデルに重みを付けて最終提出としました。暫定スコアでは銀メダル圏内で終了し、アンサンブルの効果もあってかPB(Public Board:最終スコア)も大きく落ちることなく、銀メダル(1857 チーム中 48 位、上位 3%)を獲得できました。


今回意識していた取り組み方

今回のコンペでは、目先の精度向上だけを追うのではなく、改善サイクルを継続的に回せる仕組みを構築することを意識して取り組みました。Kaggleでは、スコアを伸ばすための実験そのものに加えて、実験の記録を残す、実験結果を整理する、Discussion などで公開されている情報を追うといった作業も同時に発生します。

実験の意図や変更点を追える状態を維持できないと、同じ検証の繰り返しや判断根拠の曖昧化が起きやすく、スコア改善に向けた意思決定が遅れます。加えて、周辺作業の手戻りや抜け漏れが増えるほど実験に割ける時間が削られ、改善スピードも落ちます。そこで今回は、実験の記録・整理・進捗把握・自動化・情報収集までを含めて、実験を回し続けやすい環境整備に取り組みました。

以降では、実際に行っていた工夫を紹介します。


実験結果を「比較できる形」で可視化・整理する

まず意識していたのは、どの実験がスコア改善につながっていそうかを一目で把握できる状態を作る点でした。モデルの学習記録には WandB(Weights & Biases) を使い、loss や CV スコア、学習過程、ハイパーパラメータなどを自動で記録・可視化していました。

WandB を使うと、実験ごとのスコア差や seed・モデル違いによるブレ、明らかに失敗している実験などが一覧で確認できるため、今どの実験が良さそうかを素早く把握できるようになりました。

WandBを用いたスコアの可視化

一方で、WandBの記録だけを見ていても、その実験で何を変えたのか、どんな仮説やアイデアを試したのかといった文脈までは分かりにくいです。そこで、実験条件などをスプレッドシートにまとめて整理していました。

ベースモデルや変更点(プロンプト、後処理、学習設定など)、実験の意図やメモを一覧で記録し、どの変更がどのような結果につながったのかをすぐ確認できるようにしていました。さらに、WandB に記録されているのはあくまで手元の検証データでの結果です。スプレッドシートには Kaggle のテストデータでの LB スコアも転記し、CV と LB の相関をグラフで確認していました。CV は良いが LB が伸びない設定や、両方が安定して伸びている設定を可視化し、次に何を採用すべきかを判断しやすくしていました。

スプレッドシートを用いた実験結果の整理

このように、WandB は各実験の学習ログとスコアの推移を記録し、良し悪しを素早く把握するための場所、スプレッドシートは実験の意図と結果を整理し、次の実験方針や最終提出の設定を意思決定するための場所として役割分担して運用していました。


実験の待ち時間と手作業を減らす

言語モデル系のコンペではモデルの規模が大きく、1 回の学習に数時間〜1 日以上かかる場合も珍しくありません。学習が止まっている時間を最小化し、実験を継続的に回し続けられる運用が重要になります。学習が完了しているのに次の実験にすぐ着手できなかったり、エラーに気づかず放置してしまったりすると、大きな時間のロスになります。

また、テストデータに対する推論は Kaggle の環境で行うため、学習後のモデルを Kaggle にアップロードする必要がありますが、手動だとアップロードに数十分かかる場合もあり、これが積み重なると大きな時間の損失になります。

そこで、WandB の通知機能を使い、学習完了時やエラー発生時にすぐ気づけるようにしていました。コンペ期間は限られているため、学習が止まっている時間をできるだけ減らし、次の実験に素早く移れる状態を目指しました。
さらに、学習が終わったタイミングでモデルを Kaggle に自動アップロードする処理も組み込み、手作業や待ち時間をなるべく減らしました。

このように、結果が出たらすぐ次の実験に進めるようにしつつ、無駄な手作業や待ち時間を減らすことで、限られた期間を効率よく使えるようにしていました。


情報収集を習慣化する

Kaggle では、Discussion の内容を追えているかどうかが結果に大きく影響します。ただ、まとまった時間を確保して投稿を読み込むのは意外と難しいと感じていました。そこで、投稿の更新をメール通知にして、移動中やちょっとした空き時間にざっと目を通すようにしました。一度にまとめて読むのではなく、日々の習慣として追い続ける形を重視した運用です。定期的にコンペの動向に触れられるため、モチベーション維持にも役立っていたと感じています。

Discussionの通知設定画面


AITCでのKaggle勉強会

AITCには Kaggle 経験者が複数おり、週に一度、書籍の輪読や過去コンペの解法紹介といった勉強会を行なっています。特に輪読では、Kaggle における実験管理をテーマにした書籍を扱った回があり、内容を読むだけでなく、各自のディレクトリ構成や利用しているツールなどを具体的に共有していました。
こうした勉強会により、解法のテクニックだけでなく、実験の進め方や検証の回し方についても普段から共有でき、今回のコンペでも運用面を早い段階で整えられたと感じています。

過去コンペの解法紹介

まとめ

今回参加したコンペでは、モデルや手法の工夫だけでなく、実験の記録・整理、待ち時間の削減、情報収集の習慣化といった実験を回し続けるための運用に重点を置いて取り組みました。結果として、限られた期間の中でも改善サイクルの回転を落とさずに検証を積み重ねられたことが、ソロでの銀メダル獲得につながったと感じています。

Kaggle に参加する価値は、新しい知識やテクニックを学べる点に加えて、仮説を立て、検証し、結果を見て次の意思決定をするという試行錯誤のサイクルを、短いスパンで何度も回せる点にあると思います。業務でも同じように、限られた時間の中で優先順位をつけながら改善を進める場面は多く、Kaggle で得られる運用面の経験は実務にもそのまま活きやすいと感じました。

AITCでは、Kaggle 経験者を中心に週 1 回の勉強会を行っており、過去コンペの振り返りや実験管理の工夫などを共有しています。本記事を読んで、AITCの活動に興味を持っていただけますと幸いです。

下記のページにAITCでの働き方や募集職種、組織などの採用に関わる情報をまとめています。 カジュアル面談の応募フォームもこちらのページにリンクがありますのでぜひご覧ください。

執筆
AIコンサルティンググループ
中原輝樹