はじめに
Kaggle の “Titanic - Machine Learning from Disaster” コンペを題材に、
- 前処理 → 学習 → 推論
- GitHub Actions で CI(動作確認)
- 誰でも
git clone
→python src/*.py
で再現可能
なパイプラインを構築したので、手順・工夫点・結果をまとめます
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
ができれば成功です
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 のバッジが緑に
6. こだわりポイント
-
ColumnTransformer × Pipeline
- 数値(
median
)/ カテゴリ(most_frequent
+ One-Hot)を分離 - 推論時も同じ前処理を保証
- 数値(
-
early_stopping_rounds
-
train_test_split
で 20% をバリデーションに - ベストイテレーションで学習時間と過学習を削減
-
-
再学習フロー
- early stopping で得た
best_iteration
だけで 全データ再学習 - 学習器と前処理器をまとめて
joblib.dump
→ 推論が楽
- early stopping で得た
7. 今後の改善アイデア
- LightGBM / CatBoost とのアンサンブル
- Age/Fare を binning して Category 扱い
-
RandomizedSearchCV
でパラメータ探索を自動化 - Dockerfile と Makefile を追加して “ワンコマンド再現” を実現
8. まとめ
「再現性」+「自動化」を意識して Titanic コンペをパイプライン化しました。
記事・コードともにフィードバック大歓迎です!🙏
参考リンク
- GitHubリポジトリ:https://github.com/0nulu-72/titanic-ml-pipeline
- Kaggle Competition:https://www.kaggle.com/c/titanic