はじめに
- はじめてKaggleのコンペに参加してみたので、初動でやったことの大まかな流れを備忘までに残しておきます。
やったこと
0. 前提
1. コンペ参加登録
- Kaggleページ→compete→sample_compete(対象コンペ)→Join Competition
- kaggle-sample_compete, Private
- (補足)ノートブックコンペの場合は、スプレッドシート作成
3. Issue(初期)作成
- フォーマット
- Issueタイトル
- 環境構築
- サンプル公開ノートブック確認
- Input/Outputデータ確認
- 処理フロー確認
- EDA
- サーベイ
- 実験計画立て・実験管理シート作成
- (補足)ノートブックコンペの場合は、スプレッドシート作成(「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 competitions list
4-3. Readme作成
- README作成
- 概要
- 環境構築手順
- 上記の環境構築手順(KaggleAPI用環境変数設定、コンテナ起動)
- スクリプト実行手順
- Input/Outputデータサマリ
- 実験結果サマリ
- → git pull requestまで
5. サンプル公開ノートブック確認
- Input/Outputデータを確認する
- 処理フローを確認する
- 前処理→学習→推論
- スクリプト(ノートブック)・関数の切り方
- このタイミングで、Inputデータ取得・読み込み周りを実装する
- 手法
- pandas profiling など
- head(), info(), shape, unique, display image, wordcloud, basic nlp -> count, distributed
- 公開ノートブック・関連論文を調査する
- 処理フローの枠+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使用時間制約の問題があるので、サブの環境を構築しておく
- 要件
- ディレクトリ構成を揃えることができる
- ライブラリを揃えることができる
- データセットを落としてこれる
- ノートブックを同期できる