本文へ移動

ホーム / ML / 第5部 運用と責任

第5部 運用と責任・第10章

モデルの監視

★★★ 必須9トピック・面接 5問

本番のモデルが時間とともに劣化するのを見つける方法を押さえる。

10.1ドリフトの種類

用語★★★ 必須
ひとことで

入力データの分布や、入力と答えの関係が変わること。精度が静かに落ちていく原因。

モデルは、学習したときのデータの世界を前提にしています。時間がたって世の中が変わると、エラーは1つも出ないまま、精度だけが静かに落ちていきます。これがドリフトです。

種類何が変わるか例
データドリフト(共変量シフト)入力の分布が変わる新しい年齢層の利用者が増えた・スマホのアプリが新しくなって入力の形が変わった・季節が変わった
コンセプトドリフト入力と答えの関係そのものが変わる同じ行動でも、詐欺の手口が変わって不正かどうかが変わった・景気が変わって同じ人の購入のしかたが変わった
ラベルの分布の変化答えの割合が変わる不正の割合が 1% から 3% に増えた
データドリフトは入力の分布が、コンセプトドリフトは入力と答えの関係が変わるデータドリフト学習したとき今入力の値(例:年齢)コンセプトドリフト答えが変わった前の境目今の境目左は入力だけ見れば気づける。右は正解と比べないと分からない
データドリフトとコンセプトドリフト

データドリフトは入力だけを見れば気づけますが、コンセプトドリフトは入力が同じままでも起きるので、正解と比べないと分かりません。

面接ではこう答える

ドリフトは、時間とともにデータの世界が変わり、モデルの前提がずれることです。入力の分布が変わるデータドリフト、入力と答えの関係そのものが変わるコンセプトドリフト、答えの割合が変わるラベルの分布の変化があります。データドリフトは入力を見れば気づけますが、コンセプトドリフトは入力が同じままでも起きるので、正解と比べないと分かりません。どれもエラーを出さずに精度だけを静かに落とすのが怖いところです。

ひとことで

学習のときと今の特徴量の分布を区間ごとに比べ、どれだけずれたかを1つの値にした指標。

特徴量ごとに、学習のときと今の分布を区間に分けて比べる薄い色:学習のとき 濃い色:今PSI = 区間ごとの差を足し合わせた値
分布を区間に分けて比べる(形はイメージ)

検知の方法:

  • 入力の分布を比べる:特徴量ごとに、学習データ(または直近の安定した期間)と今の分布を比べます。PSI(Population Stability Index)がよく使われ、よく使われる経験則では、0.1 未満は安定、0.1〜0.25 は注意、0.25 以上は大きな変化とされます。ただし値は区間の分け方やデータの量で変わるので、絶対の基準ではなく「見直すきっかけ」として使います。KS 検定なども使えますが、データが多いと小さな差でも「有意」になるので、差の大きさで判断します。
  • データの品質を見る:欠損の割合・値の範囲・カテゴリの種類の数。ドリフトに見えて、実は上流のデータの不具合(列の単位が変わった・全部 NULL になった)ということもよくあります。
  • 予測の分布を見る:予測のスコアの平均や、陽性と判定した割合の変化。正解がなくてもすぐ見られます。
  • 精度を測る:正解が届いたら、実際の精度を期間ごとに計算します。コンセプトドリフトを確実に見つけられるのはこれだけです。

落とし穴:全部の特徴量にアラートを付けると、毎日どこかが鳴って誰も見なくなります。重要度の高い特徴量と予測の分布に絞り、ドリフトが見つかったら「本当に精度に影響しているか」を確かめてから再学習します。

面接ではこう答える

ドリフトの検知では、特徴量ごとに学習のとき、または直近の安定した期間と今の分布を比べます。よく使われる PSI は、値を区間に分けて、区間ごとの割合の差を足し合わせた指標で、経験則では 0.1 未満は安定、0.25 以上は大きな変化とされます。ただし区間の分け方やデータ量で値が変わるので、絶対の基準ではなく見直すきっかけとして使います。予測の分布や、正解が届いた分の精度も合わせて見ます。

本番で「モデルの精度が落ちた」と見えるものの多くは、実は上流のデータの不具合です。ドリフトより先に、データの品質を見ます。

監視するものよくある不具合の例
入力の件数連携のバッチが止まって、ある日の入力が半分になった
欠損の割合アプリの更新で列が送られなくなり、全部 NULL になった
値の範囲と単位金額の単位が円から千円に変わった・秒がミリ秒になった
カテゴリの種類新しい端末の種類や商品カテゴリが増え、全部「その他」になった
特徴量の取得の失敗オンラインのストアに値がなく、既定値で埋めた割合が増えた
鮮度特徴量の最終更新が昨日のまま止まっている

これらはモデルの指標よりずっと早く、はっきり異常が出ます。上流のチームと「列の意味や単位を変えるときは事前に知らせる」約束(データの契約)を決めておくと、事故を減らせます。

学習の前のデータの検証

ひとことで

レイテンシ・エラー率などシステムの指標と、予測の分布・精度などモデルの指標の両方を見る。

ML のサービスの監視は、普通のサービスと同じシステムの指標に、モデルの指標を足したものです。システムが正常でも、モデルがおかしな答えを返していることがあるからです。

システムが正常でも、モデルがおかしな答えを返していることがあるビジネスクリック率・売上・人に覆された割合モデル予測の分布・陽性の割合・正解が届いた分の精度データ欠損・範囲外・分布のずれ・取得の失敗システムリクエスト数・エラー率・レイテンシ・GPU下の層ほど早く分かり、上の層ほど本当に知りたいことに近い
ML のサービスの監視は4層で見る
分類指標の例
システムリクエスト数・エラー率・レイテンシ(p50・p99)・GPU の使用率とメモリ・キューの長さ
データ入力の欠損の割合・値の範囲外の件数・特徴量の分布(ドリフト)・特徴量の取得の失敗
モデル予測のスコアの分布・陽性の割合・代わりの答え(フォールバック)を返した割合
精度とビジネス正解が届いた分の精度・クリック率・売上・人の確認で覆された割合

SLI・SLO の考え方は SRE の解説で

面接ではこう答える

ML のサービスの監視は、普通のサービスと同じシステムの指標に、モデルの指標を足したものです。システムではリクエスト数、エラー率、レイテンシ、GPU、データでは欠損や範囲外の値や分布のずれ、モデルでは予測のスコアの分布や陽性の割合、そして正解が届いた分の精度とビジネスの指標を見ます。システムが正常でもモデルがおかしな答えを返していることがあるので、4つの層をそろえて見ることが大事です。

ひとことで

解約や不正のように正解が数週間後にしか分からない場合、すぐ分かる代わりの指標と、後からの精度の計算を組み合わせる。

正解が遅れて届くあいだは、すぐ分かる代わりの指標で見張る入力のドリフト・予測の分布・早く分かる行動を見る精度を計算予測した日正解が届く(30日後)予測のログに ID と時刻を残しておき、届いた正解とあとで結合する
正解が遅れて届く場合の監視

正解が遅れて分かる場合:「30日以内に解約するか」「この取引は不正か(チャージバックが来るのは数週間後)」のように、正解がすぐには分かりません。そのため、次のように組み合わせます。

  • すぐ分かる代わりの指標を見る:入力のドリフト・予測の分布・クリックなどの早く分かる行動。
  • 正解が届いたら、予測した日ごとにさかのぼって精度を計算する(予測のログに ID と時刻を残しておき、後で正解と結合する)。
  • 一部を人がすぐ確認して、早めに精度を見積もる。

面接ではこう答える

解約や不正のチャージバックのように、正解が数週間後にしか分からない問題では、精度をすぐには測れません。そこで、入力のドリフトや予測の分布、クリックのような早く分かる行動を代わりの指標として見ます。予測のログにリクエスト ID と時刻を残しておき、正解が届いたら予測した日ごとにさかのぼって精度を計算します。一部を人がすぐ確認して、早めに精度を見積もる方法もあります。

アラートの設計:すぐ人が動くべきもの(エラー率・レイテンシ・推論が止まった・入力が全部 NULL)は呼び出し(ページ)にします。ドリフトや精度の緩やかな低下は、すぐには対応できないので、チケットや日次のレポートに回します。しきい値は、普段の変動の幅(曜日や時間帯の差)を見てから決め、鳴ったときに何をするかの手順(再学習・前のモデルに戻す・上流のデータを確認)を一緒に書いておきます。

種類例届け方
すぐ人が動くエラー率・レイテンシ・推論が止まった・入力が全部 NULL・代わりの答えの割合が急増呼び出し(ページ)
今日中に見る予測の陽性の割合が普段の2倍・重要な特徴量の欠損が増えたチャットに通知・チケット
定期的に見るドリフトの指標・正解が届いた分の精度の推移日次・週次のレポート

アラートには、鳴ったときに見る手順(ダッシュボードの場所・切り分けの順・戻し方)を必ず付けます。鳴っても何もしないアラートは消すか、レポートに移します。

SLI・SLO の考え方は SRE の解説で

予測のときに ID と時刻を残しておけば、後で正解と結合できる予測ログID・時刻・版・特徴量・スコア正解(数日〜数週間後)ID で結合予測した日ごと精度の推移版ごと・区分ごと
予測ログと正解を後で結合する
残す項目使い道
リクエスト ID・時刻正解と結合する・問い合わせを追う
モデルの版・特徴量の版どの版が答えたか。版ごとの精度
使った特徴量の値学習と推論のずれの調査・次の学習データ(推論時の値なので skew がない)
スコアと最終の判定しきい値の見直し・予測の分布の監視
代わりの答えを返したかフォールバックの割合の監視
レイテンシ(区間ごと)遅い区間の調査

個人情報は、ID に置き換える・保存期間を決める、を守ります。件数が多い場合は、全件ではなく一部を抜き出して保存しても、分布や精度の監視には十分なことが多いです。

ひとことで

モデルの予測が利用者の行動を変え、その行動が次の学習データになることで、偏りが強まっていく現象。

モデルが見せたものだけが選ばれ、それが次の学習データになるモデルが選んで表示人気の商品を上に利用者の行動表示されたものだけクリック次の学習データ人気の商品のラベルばかり
フィードバックループ

モデルの予測が利用者の行動を変え、その行動が次の学習データになるため、モデルが自分の見たい世界を強めてしまうことがあります。これをフィードバックループといいます。

例起きること対策
推薦表示されたものしかクリックされず、人気の商品ばかり勧めるようになる一部をランダムや新しい商品に割り当てる(探索)
不正検知止めた取引は正解(本当に不正か)が分からず、学習データから消えるごく一部を止めずに通して正解を得る・人の確認の結果を使う
与信・審査断った人の返済の実績は永久に分からない判断の境目の一部で正解を得る仕組みを、事業・法務と決める

モデルを当てない比較用のグループ(ホールドアウト)を少し残しておくと、モデルの効果とループの影響を測れます。

面接ではこう答える

フィードバックループは、モデルの予測が利用者の行動を変え、その行動が次の学習データになることで、偏りが自分で強まっていく現象です。推薦では表示されたものしかクリックされないので人気の商品ばかり勧めるようになり、不正検知では止めた取引の正解が分からなくなります。対策として、一部をランダムに表示する探索や、モデルを当てない比較用のグループを残し、偏りのない正解を得られるようにします。

まず「何が変わったか」を、近いところから順に確かめるデプロイモデル・コードの版入力のデータ件数・欠損・単位特徴量の取得失敗・既定値世の中の変化キャンペーン・季節影響が大きければ、原因の特定より先に前の版へ戻す・代わりの答えに切り替える
予測の分布が急変したときの切り分け
順番確かめること見るもの
1. 影響どの機能・どの利用者に、どれくらい影響しているかビジネスの指標・代わりの答えの割合
2. 変更直前にモデル・特徴量・コード・設定を変えていないかデプロイの履歴・レジストリ
3. 入力件数・欠損・値の範囲・新しいカテゴリデータの品質のダッシュボード
4. 特徴量の取得オンラインのストアの失敗・遅延で既定値が増えていないか取得の失敗率・鮮度
5. 外の変化キャンペーン・季節・ニュース・新しい利用者層事業部門への確認・区分ごとの分布

影響が大きいときは、原因が分かる前でも前の版に戻す・代わりの答えに切り替えるなどで先に影響を止め、落ち着いてから原因を調べます。終わったら、見つけるまでの時間を短くするアラートを足します。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • データのドリフトと精度の劣化を検知する
  • システムの指標とモデルの指標の両方を見る
  • ドリフトの種類:入力データの分布や、入力と答えの関係が変わること。精度が静かに落ちていく原因。
  • ドリフトの検知(PSI など):学習のときと今の特徴量の分布を区間ごとに比べ、どれだけずれたかを1つの値にした指標。
  • 監視する指標(4つの層):レイテンシ・エラー率などシステムの指標と、予測の分布・精度などモデルの指標の両方を見る。
  • 正解が遅れて分かる場合の監視:解約や不正のように正解が数週間後にしか分からない場合、すぐ分かる代わりの指標と、後からの精度の計算を組み合わせる。
  • フィードバックループ:モデルの予測が利用者の行動を変え、その行動が次の学習データになることで、偏りが強まっていく現象。

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1モデルの精度が落ちたことにどう気づきますか?

模範回答

正解がすぐ分かるかどうかで分けて考えます。すぐ分かる場合は、正解と予測を結合して、精度を日ごとに計算し、しきい値を下回ったら知らせます。多くの場合は正解が遅れて届くので、その間は代わりの指標を見ます。重要な特徴量の分布を学習データと比べる(PSI など)、予測のスコアの分布や陽性の割合が変わっていないか、欠損や範囲外の値が増えていないか、です。

正解が届いたら、予測のログに残した ID と時刻で結合して、さかのぼって実際の精度を確かめます。入力の分布は同じでも答えとの関係が変わるコンセプトドリフトは、これでしか分からないからです。急ぐ場合は、一部を人が確認して早めに見積もります。

深掘りされたら

  • ドリフトを検知したら、すぐ再学習しますか?

見られているポイントドリフトの監視と、遅れて届く正解の扱い

Q2データドリフトとコンセプトドリフトの違いは何ですか?

模範回答

データドリフトは、入力の分布が変わることです。たとえば利用者の年齢層が変わった、新しいアプリで入力の形が変わった、などで、入力だけを見れば気づけます。

コンセプトドリフトは、入力と答えの関係そのものが変わることです。たとえば詐欺の手口が変わり、同じような行動でも不正かどうかが変わる場合です。入力の分布は同じままでも起きるので、正解と比べて精度を測らないと分かりません。どちらも、再学習が必要になる主な原因です。

深掘りされたら

  • ラベルの割合だけが変わった場合は、どう対応しますか?

見られているポイント入力の分布か関係の変化か・検知の仕方の違い

Q3モデルの監視で、どんなアラートを設定しますか?

模範回答

すぐ人が動くべきものと、後で見ればよいものを分けます。推論のエラー率・レイテンシの p99・推論が止まった・入力の欠損が急に増えた・予測の陽性の割合が急に大きく変わった、などはすぐ呼び出すアラートにします。ドリフトや精度の緩やかな低下は、チケットや日次のレポートにします。

しきい値は、曜日や時間帯による普段の変動を見てから決め、アラートごとに「鳴ったら何をするか」(前のモデルに戻す・上流のデータを確認する・再学習する)を書いておきます。全部の特徴量に付けると鳴りすぎて見られなくなるので、重要な特徴量に絞ります。

深掘りされたら

  • 予測の分布が急に変わったとき、最初に何を確かめますか?

見られているポイント緊急度で分ける・しきい値の決め方・手順を書く

Q4予測の分布が急に変わりました。何から調べますか?

模範回答

まず、世の中が変わったのか、システムが壊れたのかを切り分けます。急な変化はシステム側の原因が多いので、同じ時刻にデプロイや設定の変更がなかったか、上流のデータで欠損や NULL が増えていないか、特徴量の単位や型が変わっていないか、特徴量の取得が失敗して既定値になっていないかを確かめます。

特徴量ごとの分布を変化の前後で比べると、どの入力が原因かを絞れます。システムの原因なら前の状態に戻し、本当に利用者の行動が変わった(キャンペーンなど)のであれば、精度への影響を確かめてから再学習を検討します。

深掘りされたら

  • 上流のデータの変更に早く気づくには、どうしますか?

見られているポイントシステムの変化と現実の変化の切り分け・特徴量ごとの比較

Q5PSI などのドリフトの指標は、どう使いますか?

模範回答

PSI(Population Stability Index)は、ある特徴量の値をいくつかの区間に分け、基準の期間(学習データなど)と今の期間で、各区間に入る割合がどれだけずれたかを1つの数にしたものです。よく使われる経験則では、0.1 未満は安定、0.25 以上は大きな変化とされます。ただし値は区間の分け方やデータの量で変わるので、絶対の基準にはしません。

運用では、重要な特徴量と予測のスコアに絞って毎日計算し、普段の値の幅を見てからしきい値を決めます。超えたら、すぐ再学習するのではなく、上流のデータの不具合ではないか、精度に影響が出ているかを確かめます。KS 検定のような検定は、データが多いと小さな差でも「有意」になるので、差の大きさで判断します。

深掘りされたら

  • カテゴリの特徴量のドリフトは、どう測りますか?

見られているポイント仕組みの直感・経験則の限界・検知した後の動き