ストーリー
田
田中VPoE
ここまでデータ基盤の設計を学んできた。最後のピースは、そのデータを使ってMLモデルを運用する仕組み — MLOpsだ
あなた
MLOpsはDevOpsのML版ですよね。モデルの開発から本番運用までのパイプラインを自動化する
あ
田
田中VPoE
その通り。ただし注意が必要だ。MLOpsはデータ基盤と密接に連携する。モデルの学習データの品質が低ければモデルも低品質になる。学習データの管理、フィーチャーの再利用、モデルのモニタリングがデータ基盤の延長線上にある
あなた
データウェアハウスのGold層やフィーチャーストアがMLの入力データになるんですね
あ
田
田中VPoE
まさにそうだ。データ基盤とMLOpsを分離して設計すると、「モデルの学習データはどこ?」「オンラインの推論で使うフィーチャーとオフラインの学習で使うフィーチャーが異なる」という問題が生じる。今回はこれらを統合的に設計する
MLOpsの成熟度レベル
Google提唱の3レベル
| レベル | 名称 | 特徴 | 自動化範囲 |
|---|
| Level 0 | 手動プロセス | Jupyter Notebookで手動実験、手動デプロイ | なし |
| Level 1 | MLパイプライン自動化 | 学習パイプラインの自動化、CT(Continuous Training) | 学習の自動化 |
| Level 2 | CI/CD for ML | パイプラインコードのCI/CD、自動テスト | 学習 + デプロイの自動化 |
Level 1 のパイプライン構成
MLOps Level 1 パイプライン:
┌─────────────────────────────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ データ取得 │→│ 前処理 │→│ 学習 │ │
│ │ (DWH/ │ │ フィーチャー│ │ ハイパー │ │
│ │ Feature │ │ エンジニア │ │ パラメータ │ │
│ │ Store) │ │ リング │ │ チューニング│ │
│ └──────────┘ └──────────┘ └─────┬────┘ │
│ │ │
│ ┌──────────┐ ┌──────────┐ ┌─────┴────┐ │
│ │ モニタリング│←│ デプロイ │←│ 評価 │ │
│ │ ドリフト │ │ A/Bテスト │ │ メトリクス │ │
│ │ 検知 │ │ カナリア │ │ 検証 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ トリガー: スケジュール / データドリフト検知 / 手動 │
└─────────────────────────────────────────────────────┘
MLパイプラインの設計
主要コンポーネント
| コンポーネント | 役割 | ツール例 |
|---|
| 実験管理 | ハイパーパラメータ、メトリクスの記録 | MLflow, Weights & Biases |
| パイプラインオーケストレーション | 学習パイプラインの実行管理 | Airflow, Kubeflow, Vertex AI Pipelines |
| モデルレジストリ | モデルのバージョン管理、ステージ管理 | MLflow Model Registry, Vertex AI Model Registry |
| サービング | モデルのオンライン推論エンドポイント | TensorFlow Serving, Triton, SageMaker Endpoints |
| モニタリング | データドリフト、モデルドリフトの検知 | Evidently, NannyML, WhyLabs |
実験管理(MLflow)
# MLflow による実験管理の例
import mlflow
mlflow.set_experiment("churn_prediction")
with mlflow.start_run(run_name="xgboost_v3"):
# ハイパーパラメータの記録
mlflow.log_params({
"max_depth": 6,
"learning_rate": 0.1,
"n_estimators": 100,
"feature_store_version": "v2.3"
})
# モデルの学習
model = train_model(X_train, y_train)
# メトリクスの記録
mlflow.log_metrics({
"auc": 0.85,
"precision": 0.78,
"recall": 0.82,
"f1": 0.80
})
# モデルの保存
mlflow.sklearn.log_model(model, "model")
# データセットの記録(リネージ)
mlflow.log_input(
mlflow.data.from_pandas(X_train),
context="training"
)
モデルモニタリング
データドリフトとモデルドリフト
| ドリフト種類 | 定義 | 検知方法 | 対策 |
|---|
| データドリフト | 入力データの分布が学習時と変化 | PSI, KL-divergence, KS検定 | データ調査 → 再学習 |
| コンセプトドリフト | 入力と出力の関係が変化 | モデルメトリクスの低下 | 再学習 → 必要ならモデル再設計 |
| ラベルドリフト | 予測対象の分布が変化 | ラベル分布の統計検定 | 学習データの再サンプリング |
ドリフト検知のフロー:
学習データ ──→ [PSI計算] ──→ 本番データ
の分布 │ の分布
↓
PSI > 0.25
──→ アラート発報
──→ 再学習トリガー
PSI (Population Stability Index):
< 0.10: 変化なし(安定)
0.10-0.25: 小さな変化(監視継続)
> 0.25: 大きな変化(再学習推奨)
Continuous Training(CT)
| トリガー | 条件 | 実行内容 |
|---|
| スケジュール | 毎週月曜日 | 最新データで再学習 |
| データドリフト | PSI > 0.25 | アラート + 再学習 |
| メトリクス低下 | AUC < 0.80 | アラート + 再学習 + レビュー |
| 新データ蓄積 | 1万件の新ラベルデータ | 追加学習 |
「MLOpsの本質はモデルを本番に出すことではない。本番に出した後のモデルの品質を維持することだ。データドリフトを検知し、自動で再学習するサイクルが回って初めて、MLが継続的に価値を生む」 — 田中VPoE
まとめ
| ポイント | 内容 |
|---|
| MLOps成熟度 | Level 0(手動)→ Level 1(パイプライン自動化)→ Level 2(CI/CD) |
| パイプライン | 実験管理、オーケストレーション、レジストリ、サービング、モニタリング |
| ドリフト検知 | データドリフト(PSI)、コンセプトドリフト(メトリクス低下)を監視 |
| Continuous Training | データドリフトやメトリクス低下をトリガーに自動再学習 |
チェックリスト
次のステップへ
次は「フィーチャーストア」を学びます。MLモデルの入力フィーチャーを一元管理し、学習と推論で一貫したフィーチャーを提供する仕組みを身につけましょう。
推定読了時間: 30分