0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Kaggle Titanic】再現性バッチリな機械学習パイプラインを GitHub Actions 付きで公開してみた

Last updated at Posted at 2025-05-30

はじめに

Kaggle の “Titanic - Machine Learning from Disaster” コンペを題材に、

  • 前処理 → 学習 → 推論
  • GitHub Actions で CI(動作確認)
  • 誰でも git clonepython src/*.py で再現可能

なパイプラインを構築したので、手順・工夫点・結果をまとめます :tada:

GitHub リポジトリはこちら
👉 https://github.com/0nulu-72/titanic-ml-pipeline


1. プロジェクト構成

├── data/                  # 元データ & 前処理後データ
├── notebooks/             # 検証用 Jupyter Notebook
├── src/                   # スクリプト(preprocess / train / evaluate)
├── models/                # 学習済みモデルを保存
├── .github/workflows/     # GitHub Actions(CI)
├── requirements.txt       # 依存パッケージ
└── README.md
  • 前処理src/preprocess.py
    タイトル抽出 / FamilySize / IsAlone / 欠損補完

  • 学習src/train.py

    • ColumnTransformer で数値とカテゴリを別処理
    • XGBClassifier(+ early stopping)
    • ベストイテレーションで再学習 → models/titanic_model.pkl に保存
  • 推論src/evaluate.py
    モデルをロードし、submission.csv を生成

2. 環境構築

python -m venv .venv
source .venv/bin/activate   # Windows は .venv\Scripts\activate
pip install -r requirements.txt

※ 依存ライブラリは pandas / scikit-learn / xgboost 1.7+ など。

3. 実行方法

# ① 前処理
python src/preprocess.py

# ② 学習(Validation 付き)
python src/train.py

# ③ 推論 & 提出ファイル生成
python src/evaluate.py

ルート直下に submission.csv ができれば成功です :shipit:

4. モデルとスコア

指標
Public LB 0.77990
Validation LogLoss 0.40490

同じシードで実行すれば ±0.002 程度の誤差で再現できます。
(Kaggle のスコアは乱数や early stopping により微ブレあり)

5. GitHub Actions で CI

name: CI
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with: { python-version: '3.8' }
      - run: pip install -r requirements.txt
      - run: python src/preprocess.py
      - run: python src/train.py

Push すると 前処理→学習まで自動実行、成功すると README のバッジが緑に :white_check_mark:

6. こだわりポイント

  1. ColumnTransformer × Pipeline

    • 数値(median)/ カテゴリ(most_frequent + One-Hot)を分離
    • 推論時も同じ前処理を保証
  2. early_stopping_rounds

    • train_test_split で 20% をバリデーションに
    • ベストイテレーションで学習時間と過学習を削減
  3. 再学習フロー

    • early stopping で得た best_iteration だけで 全データ再学習
    • 学習器と前処理器をまとめて joblib.dump → 推論が楽

7. 今後の改善アイデア

  • LightGBM / CatBoost とのアンサンブル
  • Age/Fare を binning して Category 扱い
  • RandomizedSearchCV でパラメータ探索を自動化
  • Dockerfile と Makefile を追加して “ワンコマンド再現” を実現

8. まとめ

「再現性」+「自動化」を意識して Titanic コンペをパイプライン化しました。
記事・コードともにフィードバック大歓迎です!🙏

参考リンク

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?