🎓 レベル:標準 | 重要度:A(必須)
📎 前提:オンライン推論サービング | 関連:データドリフトとコンセプトドリフトの検知
要点(BLUF)
- 本番モデルの監視は4層で考えます:(1)システム指標(遅延・エラー率・スループット)、(2)入力データ(欠損・範囲・分布)、(3)予測(予測分布の偏り)、(4)性能(精度・ビジネス指標)。
- 最大の難所は正解ラベルの遅延。与信の良し悪しや解約は数週間〜数か月後に判明するため、その間「精度」は測れません。だからラベル不要で異常を捉えられる層(入力分布・予測分布の監視)が早期警戒の主役になります。
- システム監視(遅延・エラー)の汎用基盤はクラウド分野(可観測性)へ。ここはMLならではの監視——予測分布・入力分布・モデル性能に集中します(データドリフトとコンセプトドリフトの検知へ繋がる)。
1. なぜ多層で監視するのか
「精度だけ見ればよい」は成立しません。理由は正解がすぐ手に入らないから。多くの実務では、予測した時点では答え合わせができません。だから、ラベルが来る前に異常を捉える層(入力・予測の監視)と、ラベルが来てから確認する層(性能監視)を重ねて持ちます。
2. 監視の4層
flowchart TB L1["1 システム指標:遅延 エラー率 スループット"] --> A["即時に分かる・ラベル不要"] L2["2 入力データ:欠損 範囲外 分布シフト"] --> A L3["3 予測:予測分布の偏り 確信度"] --> A L4["4 性能:精度 ビジネス指標"] --> B["ラベルが来てから・遅延あり"]
| 層 | 何を見るか | ラベル要否 | 反応速度 |
|---|---|---|---|
| システム | p99遅延・エラー率・QPS | 不要 | 即時 |
| 入力 | 欠損率・範囲外・分布(PSI等) | 不要 | 即時 |
| 予測 | 予測分布・確信度の偏り | 不要 | 即時 |
| 性能 | 精度・F1・売上・解約率 | 必要 | 遅延 |
層1〜3はラベルなしで即座に異常を捉えられる早期警戒。層4は確定診断だが遅れて来ます。
3. 動く最小例:ラベルが来る前に予測分布の異常で警戒する
正解ラベルが遅れて到着する状況で、予測分布の偏りだけで劣化の予兆を捉えられることを示します。
import numpy as np
rng = np.random.default_rng(0)
def predicted_positive_rate(scores, threshold=0.5):
return float((scores >= threshold).mean())
# 学習時に観測した基準:陽性予測率 約20%、平均確信度
ref_scores = rng.beta(2, 8, 5000) # 基準の予測スコア分布
ref_rate = predicted_positive_rate(ref_scores)
ref_conf = float(np.abs(ref_scores - 0.5).mean()) # 0.5からの距離=確信度の代理
# 本番(ラベルはまだ無い):入力分布が変わり予測が陽性側に偏った
cur_scores = rng.beta(4, 6, 3000) # 陽性寄りにシフト
cur_rate = predicted_positive_rate(cur_scores)
cur_conf = float(np.abs(cur_scores - 0.5).mean())
# しきい値:陽性率がベースラインの2倍 or 確信度が大きく低下したら警戒
rate_alarm = cur_rate > ref_rate * 2.0
conf_alarm = cur_conf < ref_conf * 0.7
print(f"陽性予測率 : 基準 {ref_rate:.3f} -> 本番 {cur_rate:.3f}")
print(f"平均確信度 : 基準 {ref_conf:.3f} -> 本番 {cur_conf:.3f}")
print(f"陽性率アラーム : {rate_alarm}")
print(f"確信度アラーム : {conf_alarm}")
print(f"総合判定 : {'要調査(ラベル前に警戒)' if (rate_alarm or conf_alarm) else '正常'}")
出力:
陽性予測率 : 基準 0.020 -> 本番 0.246
平均確信度 : 基準 0.301 -> 本番 0.149
陽性率アラーム : True
確信度アラーム : True
総合判定 : 要調査(ラベル前に警戒)
出力の意味:正解ラベルがまだ1件も無い状態でも、予測分布の変化だけで異常を捉えました。陽性予測率が 2%→約25% へ急増し、平均確信度(0.5からの距離)も 0.30→0.15 と低下——モデルが「いつもと違う入力」を見せられ、判断に迷っている兆候です。精度(層4)が確定するのは数週間後ですが、層3の監視がそれを待たずに警戒を上げます。この予兆は次のデータドリフトとコンセプトドリフトの検知で入力分布の変化として定量化されます。
4. 運用の勘所
- ラベル不要の層を主役にする:性能(精度)はラベル遅延で出遅れる。入力・予測分布の監視で早期警戒する。
- 基準(ベースライン)を学習時に記録する:「いつもの陽性率・確信度・入力分布」を保存し、本番と比較する。
- アラートはテール指標で:p99 遅延・エラー率の裾を見る(レイテンシとスループットのトレードオフ)。
- ラベルが来たら答え合わせする:遅延ラベルが届いたら性能を確定し、早期警戒が正しかったか検証してしきい値を調整する。
- 汎用監視はクラウドへ寄せる:メトリクス収集・ダッシュボード・アラート基盤はクラウド・インフラ/SRE・DevOps 全体目次。ここはML指標の設計に集中。
なぜそうするのか
多層監視にするのは、最も確実な指標(精度)が最も遅れて来るという ML 固有の非対称性のためです。精度だけに頼ると、劣化に気づくのが数週間遅れ、その間ずっと悪い予測を出し続けます。入力分布・予測分布はラベルなしで即座に観測できるので、これらを早期警戒に使い、精度は確定診断に使う——「速いが間接的な指標」と「正確だが遅い指標」を役割分担させるのが、ML 監視の核心です。
⚠️ よくある落とし穴
- 精度だけ監視する:ラベル遅延で気づきが遅れ、劣化を長時間放置する。入力・予測分布を併用する。
- ベースラインを持たない:「いつもと違う」を判定できない。学習時の基準を記録しておく。
- アラートを平均で出す:平均は異常を薄める。テール・分布で見る。
- システム監視とモデル監視を混同する:遅延・エラーは健全でも、予測は劣化していることがある。両方を見る。
対応 lab
- なし(概念ノート)。予測分布監視は本文 §3、入力分布の定量化は データドリフトとコンセプトドリフトの検知 の
labs/06_drift。
関連ノート
- データドリフトとコンセプトドリフトの検知(入力分布の定量監視)
- 再学習と継続的トレーニング(CT)(監視を再学習トリガーに繋ぐ)
- リリース戦略(シャドー・カナリア・A-Bテスト)(カナリアの指標監視)
- レイテンシとスループットのトレードオフ(p99 の監視)
- クラウド・インフラ/SRE・DevOps 全体目次(汎用可観測性基盤)
- 第6章 監視と継続的学習 目次
- MLOps・AI基盤 全体目次