本番環境でのモデル性能監視
データドリフトの検知、モデル劣化のシグナル、再学習のトリガー、evidentlyライブラリについて学習します。
「本番環境でのモデル性能監視」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
本番環境で監視する理由
リリース時には高い性能を示したモデルも、環境の変化に伴って気付かないうちに劣化することがあります。監視によってこのドリフトを早期に検出し、ビジネス指標がひそかに大きく悪化する前に、再学習のタイミングを判断できます。
データドリフトとコンセプトドリフト
- データドリフト: 入力データの分布が変化すること(新しい顧客構成など)です。
- コンセプトドリフト: 入力と目的変数の関係が変化すること(解約を予測する要因が変わるなど)です。
どちらも精度を低下させますが、監視では異なる方法で検出します。
データドリフトのPSI
Population Stability Index(PSI)は、ある特徴量の現在の分布とベースラインを比較します。両方をビンに分け、各ビンについて(now% - base%) * ln(now% / base%)を計算して合計します。
PSI値の読み方
目安は次のとおりです。PSI < 0.1は大きな変化なし、0.1-0.25は中程度の変化(調査が必要)、> 0.25は大きな変化(再学習が必要になる可能性が高い)を表します。PSIは特徴量ごとに計算します。
import numpy as np
def psi(base, now, bins=10):
edges = np.percentile(base, np.linspace(0, 100, bins + 1))
b_pct = np.histogram(base, edges)[0] / len(base) + 1e-6
n_pct = np.histogram(now, edges)[0] / len(now) + 1e-6
return np.sum((n_pct - b_pct) * np.log(n_pct / b_pct))分布のKS検定
Kolmogorov-Smirnov(KS)検定は、2つの連続分布を比較します。p値が小さい場合、本番環境の分布が学習時の分布と有意に異なることを意味し、ドリフトを示します。
from scipy.stats import ks_2samp
stat, pvalue = ks_2samp(train_feature, prod_feature)
if pvalue < 0.05:
print("Distribution drift detected")PSIとKS
- PSI: 解釈しやすい単一の数値で、ダッシュボードやしきい値の設定に適しています。
- KS: p値を使う統計的な仮説検定で、連続特徴量に対してより厳密です。
多くのチームでは、両方を並べて報告します。
Evidentlyとは
Evidentlyは、ドリフトや品質のレポート作成を自動化するオープンソースライブラリです。各メトリクスを手作業で実装する代わりに、あらかじめ用意されたチェックを組み合わせ、HTML/JSONレポートを取得できます。
# pip install evidently
from evidently.report import Report
from evidently.metric_preset import DataDriftPresetDataDriftPresetレポートの構築
DataDriftPresetは、すべての列に対して一連のドリフト検定を実行し、参照用(学習時)データセットと現在の(本番環境)データを比較します。
report = Report(metrics=[DataDriftPreset()])
report.run(
reference_data=train_df,
current_data=prod_df
)
report.save_html("drift_report.html")プログラムからの結果の抽出
レポートをdictとして出力してアラート処理に渡すと、スケジュールに従って監視を自動実行できます。
result = report.as_dict()
drift_share = result["metrics"][0]["result"]["dataset_drift"]
print("Dataset drift flag:", drift_share)精度低下へのアラート
正解ラベルを取得できる場合は、実運用中の精度を追跡し、しきい値を下回ったときにアラートを発生させます。これは、再学習が必要な状態を示す最も直接的なシグナルです。
THRESHOLD = 0.85
if live_accuracy < THRESHOLD:
send_alert(f"Accuracy dropped to {live_accuracy:.2f}")ループを閉じる
優れたモニタリングはアクションにつながります。ドリフトを検出 -> アラートを発行 -> 再トレーニングパイプライン(前のレッスンで使用したMakefile/registry)をトリガー -> 新しいバージョンをデプロイします。対応計画のないモニタリングは、単なるノイズにすぎません。
クイックチェック
モニタリングに関する知識を確認しましょう。
まとめ
本番環境のモデルをモニタリングしました。PSIとKS testでデータドリフトを検出し、EvidentlyでDataDriftPresetを使ったレポートを自動生成しました。また、精度がしきい値を下回ったときにアラートを発行し、再トレーニングをトリガーする方法も学びました。これでMLOpsコースは終了です。次のコースは、FastAPIによるAIモデルのサービングです。
よくある質問
「本番環境でのモデル性能監視」レッスンは無料ですか?
はい。「本番環境でのモデル性能監視」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「本番環境でのモデル性能監視」で何を学びますか?
データドリフトの検知、モデル劣化のシグナル、再学習のトリガー、evidentlyライブラリについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「本番環境でのモデル性能監視」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- MLflowによる実験管理
- モデルレジストリとバージョニング
- 再現可能なMLパイプラインの構築
- 本番環境でのモデル性能監視