LESSON 30分

モデルモニタリング基礎

田中VPoE「パイプラインの自動化ができた。しかし、デプロイして終わりではない。本番環境でモデルの性能が劣化していないか、常に監視する仕組みが必要だ。」

あなた「デプロイ直後は精度が良くても、時間が経つと落ちていくことがあるんですよね。」

田中VPoE「そうだ。ユーザーの行動パターンは日々変化する。その変化にモデルが追随できているか、リアルタイムで把握する必要がある。」

なぜモデルモニタリングが必要か

MLモデルは従来のソフトウェアとは異なり、コードに変更がなくても性能が劣化します。

性能劣化の主な原因

原因説明
データドリフト入力データの分布が変化コロナ禍で購買パターンが激変
コンセプトドリフト入力と出力の関係が変化季節により離脱要因が変動
スキーマ変化データの構造が変化上流システムの仕様変更
データ品質劣化欠損値・異常値の増加センサー故障、API仕様変更

モニタリングの4つのレイヤー

Layer 4: ビジネスメトリクス(売上、離脱率)
Layer 3: モデルメトリクス(AUC、F1、精度)
Layer 2: データメトリクス(分布、欠損率、統計量)
Layer 1: インフラメトリクス(レイテンシ、エラー率、CPU)

モニタリング指標の設計

Layer 1: インフラメトリクス

指標閾値例ツール
レスポンスタイム(p50/p99)p99 < 200msCloudWatch, Prometheus
エラー率< 1%CloudWatch
CPU/メモリ使用率< 80%CloudWatch
リクエスト数ベースライン比CloudWatch

Layer 2: データメトリクス

# データ統計量のモニタリング例
import pandas as pd
import numpy as np

def compute_data_metrics(df: pd.DataFrame) -> dict:
    """入力データの統計量を計算する"""
    metrics = {}
    for col in df.select_dtypes(include=[np.number]).columns:
        metrics[f"{col}_mean"] = df[col].mean()
        metrics[f"{col}_std"] = df[col].std()
        metrics[f"{col}_null_rate"] = df[col].isnull().mean()
        metrics[f"{col}_min"] = df[col].min()
        metrics[f"{col}_max"] = df[col].max()
    return metrics

Layer 3: モデルメトリクス

指標計算方法更新頻度
予測分布予測値のヒストグラムリアルタイム
信頼度スコア予測確率の統計量リアルタイム
実績精度ラベル取得後にAUC/F1を計算日次〜週次
予測バイアス予測値と実績値の差分日次

Layer 4: ビジネスメトリクス

指標説明監視方法
離脱率実際の離脱率の推移ダッシュボード
介入成功率モデル予測に基づく施策の効果A/Bテスト
コスト効率施策コスト対効果週次レポート

アラート設計

アラートの基本原則

  1. 段階的エスカレーション: Warning → Alert → Critical
  2. ノイズ抑制: 閾値の調整、連続N回で発報
  3. アクショナブル: アラートを受けて何をすべきか明確にする
# アラートルール定義の例
ALERT_RULES = {
    "data_drift": {
        "metric": "psi_score",
        "warning": 0.1,
        "critical": 0.25,
        "consecutive_count": 3,
        "action_warning": "調査開始、再学習の準備",
        "action_critical": "即座に再学習を実行",
    },
    "model_accuracy": {
        "metric": "auc_roc",
        "warning": 0.82,
        "critical": 0.78,
        "consecutive_count": 2,
        "action_warning": "精度低下の原因を調査",
        "action_critical": "前バージョンへロールバック",
    },
    "latency": {
        "metric": "p99_ms",
        "warning": 150,
        "critical": 200,
        "consecutive_count": 5,
        "action_warning": "インフラリソースの確認",
        "action_critical": "スケールアウトまたはモデル軽量化",
    },
}

Evidently AI によるモニタリング

from evidently import ColumnMapping
from evidently.report import Report
from evidently.metric_preset import (
    DataDriftPreset,
    DataQualityPreset,
    ClassificationPreset,
)

def generate_monitoring_report(
    reference_data: pd.DataFrame,
    current_data: pd.DataFrame,
    target_col: str = "churn"
) -> Report:
    """モニタリングレポートを生成する"""
    column_mapping = ColumnMapping(
        target=target_col,
        prediction="prediction",
        numerical_features=["age", "tenure_days", "order_count_30d"],
        categorical_features=["region", "membership"],
    )

    report = Report(metrics=[
        DataDriftPreset(),
        DataQualityPreset(),
        ClassificationPreset(),
    ])

    report.run(
        reference_data=reference_data,
        current_data=current_data,
        column_mapping=column_mapping,
    )

    report.save_html("monitoring_report.html")
    return report

まとめ

項目ポイント
劣化原因データドリフト・コンセプトドリフト・スキーマ変化・データ品質
4つのレイヤーインフラ → データ → モデル → ビジネスの多層監視
アラート設計段階的エスカレーション、ノイズ抑制、アクション明確化
ツールEvidently AI でドリフト検知・品質チェックを自動化

チェックリスト

  • モデル性能が劣化する4つの原因を説明できる
  • モニタリングの4つのレイヤーと各レイヤーの指標を説明できる
  • アラート設計の基本原則を理解している
  • Evidently AIの基本的な使い方を理解している

次のステップへ

モニタリングの基礎を学びました。次はデータドリフト検出の具体的な手法を深掘りしましょう。


推定読了時間:30分