この記事は
本記事では、機械学習モデルの予測スクリプトをGitHub Actionsで自動的に検証(CI)する方法を、初心者向けに丁寧に解説します。
はじめに:CIとは何か?
機械学習モデルを作った後、
- 「新しいデータが来てもちゃんと予測できるのか?」
- 「コードが壊れていないか?」
を継続的に確認することが重要です。このような継続的チェックを CI(Continuous Integration) といいます。
今回はGitHubが提供している無料のCIツール GitHub Actions を使って、
- モデルのロード
- データの読み込み
- 予測の実行と結果確認
を 自動で実行する方法 を説明します。
本記事の対象読者
- GitHub Actionsを初めて使う方
- Pythonの機械学習スクリプトを自動でテストしたい方
- データやモデルを含めてリポジトリ内で管理・テストしたい方
この記事で作成するファイル構成
今回使うファイルの構成は以下の通りです。
.
├── .github
│ └── workflows
│ └── ci-cd.yml # GitHub Actions用の設定ファイル
└── 機械学習CICDテスト
├── predict.py # 予測スクリプト
├── data.csv # テスト用データ
└── linear_model.pkl # 学習済みモデルファイル
1. GitHub Actionsの設定ファイルを作成する
リポジトリのルートに次のファイルを作成します。
.github/workflows/ci-cd.yml
内容は以下の通りです:
name: CI/CD Pipeline
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
workflow_dispatch: # 手動実行にも対応
jobs:
run_prediction:
runs-on: ubuntu-latest
steps:
- name: コードをチェックアウト
uses: actions/checkout@v3
- name: Python環境のセットアップ
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: 必要なライブラリのインストール
run: |
python -m pip install --upgrade pip
pip install numpy pandas scikit-learn joblib
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: デバッグ用(ファイル一覧表示)
run: |
echo "現在のディレクトリ: $(pwd)"
ls -la
find . -name "*.py"
find . -name "*.csv"
- name: 予測スクリプトを実行
run: |
python 機械学習CICDテスト/predict.py
2. 予測スクリプトを準備する(predict.py)
ファイル:機械学習CICDテスト/predict.py
内容は以下の通りです(丁寧にエラー処理も書いています):
import joblib
import os
import sys
import pandas as pd
def main():
current_dir = os.path.dirname(os.path.abspath(__file__))
data_path = os.path.join(current_dir, 'data.csv')
model_path = os.path.join(current_dir, 'linear_model.pkl')
# ファイル存在チェック
if not os.path.exists(model_path):
print(f"エラー: モデルファイル '{model_path}' がありません!")
sys.exit(1)
if not os.path.exists(data_path):
print(f"エラー: データファイル '{data_path}' がありません!")
sys.exit(1)
print(" モデルをロード中...")
model = joblib.load(model_path)
print(" データを読み込み中...")
df = pd.read_csv(data_path)
feature_col = 'feature' if 'feature' in df.columns else df.columns[0]
X_new = df[[feature_col]].values
print(f" 特徴量 '{feature_col}' を使って予測します!")
preds = model.predict(X_new)
print("\n 予測結果")
print("---------------------")
print(f"{'入力値':^10} | {'予測値':^10}")
print("---------------------")
for xi, yi in zip(X_new.flatten(), preds):
print(f"{xi:10.3f} | {yi:10.3f}")
print("---------------------")
if __name__ == '__main__':
main()
3. テスト用のデータとモデルを準備する
次のファイルを 機械学習CICDテスト/ に置きます。
data.csv
(簡単なテストデータ)
feature,target
1,2.1
2,4.0
3,6.05
4,8.2
5,10.1
6,12.05
7,14.2
8,16.1
9,18.0
10,20.05
linear_model.pkl
- モデルファイルは事前にローカルで学習(
train.py)し、作成してください。 - 作成方法は記事後半の補足にあります。
4. GitHubへPushして動かしてみよう!
以下を順番に行います:
- リポジトリにファイルをコミット & プッシュ
- GitHubの「Actions」タブを確認
- CIワークフローの「Run prediction」ステップで予測結果が出ることを確認
成功すると、GitHub Actionsのページに以下のような結果が表示されます。
予測結果
---------------------
入力値 | 予測値
---------------------
1.000 | 2.000
2.000 | 4.000
...
---------------------
補足:学習用スクリプト(train.py)の例
事前にモデルを学習し、linear_model.pkl を作成するスクリプトです。
import joblib
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
df = pd.read_csv('data.csv')
X = df[['feature']]
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
joblib.dump(model, 'linear_model.pkl')
print("モデルが保存されました。")
これを実行すると、linear_model.pkl が生成されます。
まとめとポイント
- GitHub Actions を使うことで機械学習の予測を継続的に自動検証可能
- CI環境でモデル・データのチェックが自動化され、安心・便利
- ファイル配置やエラー時のデバッグが簡単
ぜひご自身のプロジェクトにも応用してみてください