🤖

Claude Code と Kaggle をやったら何も考えずに上位30%になれた話

に公開

結論

Claude Code に Kaggle をやらせると人間は何も考えずに上位30%くらいのモデルが作れました。メダル(上位10%〜)には程遠いですが、モデルのベースラインを作ったりちょっとした修正をするには役立ちそうな気がしたので記録を残しておきます。

試したコンペはこちらです。有名すぎるコンペだと AI が情報をもってそうなので、Playground コンペのうちあまりメジャーではなさそうなものにしました。
https://www.kaggle.com/competitions/playground-series-s5e4

結果はこちらで、1070位 / 3312チーム = 上位約32% くらいのスコアになりました。

Leaderboard のスコア分布(<=20 のみ)と今回のスコア

備考

  • コンペで Leak があったり、スコアが高い Notebook が共有されていたというのもあるため、上位30%というのはあくまでも参考値と思ってください
  • ちょうど Claude Code の調子が悪くなったと噂される時期にやったので、今やればもう少しうまくいくかもしれません

やったこと

普段はデータサイエンティストとして働いていますが、試しに生成AI(Claude Code)だけにコードを書いてもらって Kaggle をやりました。リポジトリも公開していますが、ディレクトリ構成などを試行錯誤しながら進めていったので全体はきれいではないです。

https://github.com/oddgai/kaggle-projects/tree/main/playground-s5e4-podcast-listening-time

人間と AI の作業分担

人間のやったこと

人間は、進め方のルールをある程度決めたうえで、指示はざっくりめに出すようにしました。

  • コンペの指定
  • 基本的なルールを CONTRIBUTING.md に書く(守ってくれないことも結構ある)
    ※最初の骨子は人間が書いて、進めながら出てきたルールは AI に書いてもらった
    • ディレクトリ構成
    • パッケージ管理
    • GitHub, MLflow での実験管理方法
  • ざっくりとした指示を出す
    • ✗ 特徴量 A, B を組み合わせて C を作ったほうが効きそうだからやってみて
    • ○ この Discussion を参考に精度上げてみて
  • 出力の確認

AI のやったこと

AI には Kaggle と接する部分すべてをやってもらいました。AI を部下として Kaggle をやってもらったようなイメージです。

  • コンペの概要理解
  • データ分析すべて
    • データ確認、探索的データ分析(EDA)
    • 特徴量作成
    • モデル作成
    • バリデーション
    • パラメータチューニング
    • ...
  • Kaggle への提出、スコア確認
  • スコア向上のための方針立て、実行

実験管理

実験管理についてはこちらの記事と、その中でも触れられていた書籍『目指せメダリスト!Kaggle実験管理術 着実にコンペで成果を出すためのノウハウ』を参考にしました。

https://zenn.dev/karaage0703/articles/c3fbb190687b7a

実験自体やその管理をどのくらいしっかりやるかは人によると思いますが、個人的には

  • 使った特徴量や評価指標など、実験記録を残す
  • 過去の実験を後から再現できればOK
  • (ソースコード面では)実務で運用するときにカッチリ作ればよい

という気持ちでやっています。

ディレクトリ構成

実験ごとの独立性と再現性を重視し、以下のような「1実験1ディレクトリ」を採用しました。以下のように指定しているものの、AI はたまにこの構成を忘れたり result.csvsubmission.csv になったりするので注意が必要です(今回は致命的なもの以外は放置しました)。

kaggle-projects
└── [project]  # titanic など
      ├── README.md  # プロジェクトの概要を記載する
      ├── data
      │    ├── README.md  # カラム一覧、レコード数などデータの概要を記載する
      │    ├── train.csv
      │    └── test.csv
      ├── experiments
      │    ├── exp001
      │    │    ├── README.md  # 使ったモデル、パラメータ、ベースとなる実験ID(expXXX)などを記載する
      │    │    ├── exp001.ipynb  # 仮説検証などの実験コード
      │    │    ├── utils.py  # 共通モジュール
      │    │    └── config.yaml  # モデルのハイパーパラメータなどを記録する
      │    └── exp002
      │          ├── README.md
      │          ├── exp002.ipynb
      │          ├── utils.py
      │          └── config.yaml
      ├── results
      │    ├── README.md
      │    ├── exp001
      │    │    ├── result.csv  # Kaggle に Submit するファイル
      │    └── exp002
      │          ├── result.csv

MLflow による実験管理

人間にとって見やすく実験管理したかったので、MLflow に結果を記録してもらいました。MLflow を使うと、複数のモデルのパラメータや評価指標を一覧化できるだけでなく、Artifacts として画像や HTML など様々な形式のファイルを保存・表示できるため、成果物を確認するのに便利です。


複数の指標が一覧化できる(指標名に揺れがあるのはご愛嬌)


実験ごとに概要やパラメータなどをまとめられる


画像や HTML も表示できる

これらの記録もすべて AI にやってもらっていますが、実験によって記録内容がまちまちになる(同じ指標でも違う変数名で記録してたりする)ことがあるため、実務で運用する際には工夫が必要そうです。

GitHub でのソースコード管理

実験が終わるたびに GitHub に commit & push してもらってました(これもたまに忘れる)。今回はソースコード管理でしか使いませんでしたが、実験が終わるたびに特定のファイルにパラメータや評価指標などを追記してもらえば簡易的な実験管理ツールとしても使えると思います。

感じたこと

まず、(あくまでもコンペの)機械学習において現時点で AI のできること・限界がわかりました。今回試した範囲では、データと評価指標さえ決まっていれば、サクッと70点くらいのモデルができました。新しい特徴量を試したり、違う手法で試したりが AI によってカジュアルにできるのも重宝しました。
一方で、腕のあるデータサイエンティストがやっているように自律的に精度を上げてもらうのはまだ難しそうでした。もしかすると、ドメイン知識や機械学習のテクニックなど重要そうな情報をドキュメント化して読ませればもう少しうまくいくのかもしれません。

また、学習用途には向かないこともわかりました。あわよくば自分の勉強にならないかなーと思ってましたが、自分でデータを見て、コードを書いて、改善するに越したことはないですね。

最後に、データサイエンティストとして AI と協業するイメージも何となくできました。仮に AI は実務のデータにおいても70点のモデルが作れるとすると、今のところ人間に残されている仕事は以下のあたりかなと感じています。

  • AI が分析できるようにデータを整備すること
  • 実務における課題をデータサイエンスの問題に落とし込み、評価指標を明確にすること
  • AI が作った70点のモデルを練り上げること
    • あるいは70点のモデルでもインパクトが出るような課題を設定すること

難しいことばっかりが残されてしまいましたが、結局は AI が台頭する前とあまり変わらなそうですね。がんばっていきましょう!

GitHubで編集を提案
GENDA

Discussion