nokoのブログ

こちらは暫定のメモ置き場ですので悪しからず

Kaggleコンペ開始直後にやっていること

はじめに

  • はじめてKaggleのコンペに参加してみたので、初動でやったことの大まかな流れを備忘までに残しておきます。

やったこと

0. 前提

  • Kaggleアカウントは作成しておくこと

1. コンペ参加登録

  • Kaggleページ→compete→sample_compete(対象コンペ)→Join Competition

2. GitHubリポジトリ作成

3. Issue(初期)作成

  • フォーマット
    • タイトル
    • 完了要件
    • 実施内容
  • Issueタイトル
      1. 環境構築
      1. サンプル公開ノートブック確認
      2. Input/Outputデータ確認
      3. 処理フロー確認
      1. EDA
      1. サーベイ
      1. 実験計画立て・実験管理シート作成
  • (補足)ノートブックコンペの場合は、スプレッドシート作成(「Issue」シート)

4. 環境構築

  • (補足)ノートブックコンペの場合は対応不要

4-1. Docker環境構築

4-2. Kaggle API認証設定

  • kaggleのpipパッケージインストール
    • → requirements.txtに kaggle を追記してコンテナを再作成する
    • (暫定) pip install kaggle
  • kaggle認証
    • 事前にkeyを確認しておく
    • ホスト側でexportしておく
    • → コンテナ起動時にそれを引き継ぐようにrun.shを修正する
# ホスト側で実行(bashrcなどに設定しておく)
$ export KAGGLE_USERNAME=kaggle_username
$ export KAGGLE_KEY=xxxxxxxxxxxxxx
...
-e KAGGLE_USERNAME=${KAGGLE_USERNAME} \
-e KAGGLE_KEY=${KAGGLE_KEY} \
...
  • Kaggle API 動作確認
$ kaggle competitions list

4-3. Readme作成

  • README作成
    • 概要
      • コンペのリンク+α
    • 環境構築手順
      • 上記の環境構築手順(KaggleAPI用環境変数設定、コンテナ起動)
    • スクリプト実行手順
    • Input/Outputデータサマリ
    • 実験結果サマリ
  • → git pull requestまで

5. サンプル公開ノートブック確認

  • Input/Outputデータを確認する
    • Readmeに追記する
      • Input/Outputデータ
        • データ種
        • データ量
        • カラム
  • 処理フローを確認する
    • 前処理→学習→推論
    • スクリプト(ノートブック)・関数の切り方

6. EDA

  • このタイミングで、Inputデータ取得・読み込み周りを実装する
  • 手法
    • pandas profiling など
    • head(), info(), shape, unique, display image, wordcloud, basic nlp -> count, distributed

7. サーベイ

  • 公開ノートブック・関連論文を調査する
    • 処理フローの枠+IFを固める(関数をつないでいく)
    • 試し得る手法の洗い出し、優先順位付けをする

8. 実験計画立て・実験管理シート作成

  • EDAサーベイの結果を元に、実験計画を立てる
  • 予実管理用の実験管理シートを作成する
    • No, タイトル, 関連IssueNo, スクリプト, 変更元, 変更内容, 補足, 結果

9. 個別Issue起票・対応

  • 実験計画に従い、Issueを起票し、合わせてブランチを作成して実験していく
  • ブランチ切り替え(別Issueに取り組む度に実施する)
# mainブランチを最新にする
$ git checkout main
$ git status
$ git pull origin main
# → 上記同様、新たなブランチを作成する

10. ベースライン作成

  • データ
    • train / trainの一部 / test に対応
  • コード
    • 拡張性
      • 関数化
      • 関数ごとにON/OFFの切り替え、アンサンブル
      • 関数ごとに処理時間を計測(呼び出し側)
    • パラメータチューニング
    • 評価関数
      • 定量
      • 定性
        • スコアも並べて表示
      • -> 混同行列など。課題を、スコアへの影響度(予想)順に整理しておく
      • submissionファイル間の差分表示
    • CV
    • ノートブックの章分け
1. Requirements
2. Conf
3. Utils
4. Models
5. Submit
6. Evaluate

11. サブ環境構築

  • ノートブックコンペの場合は、GPU使用時間制約の問題があるので、サブの環境を構築しておく
  • 要件
    • ディレクトリ構成を揃えることができる
    • ライブラリを揃えることができる
    • データセットを落としてこれる
    • ノートブックを同期できる