1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionsで機械学習のCI(自動テスト)を動かす方法

Posted at

この記事は

本記事では、機械学習モデルの予測スクリプトを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して動かしてみよう!

以下を順番に行います:

  1. リポジトリにファイルをコミット & プッシュ
  2. GitHubの「Actions」タブを確認
  3. 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環境でモデル・データのチェックが自動化され、安心・便利
  • ファイル配置やエラー時のデバッグが簡単

ぜひご自身のプロジェクトにも応用してみてください

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?