TT Lab
はじめる
学ぶ 学習パス コース

先週のモデルの方が良かった。誰も見つけられない

範囲の中で動く分布

TT Labで続きを見る

一言でいうと

ドリフトは契約違反ではありません。値がすべて許容範囲の中にあっても、分布は動くことがあり、それをつかむには、範囲の検査ではなく、分布を比較する指標が必要です。

なぜ必要なのか

前のモジュールで作ったデータ契約は強力ですが、1つだけつかめないものがあります。使用時間の平均が38時間から55時間に動いても、その値は、依然として「0–400」という範囲の中にあります。契約は通り、学習も正常で、アラートもありません。ところが、モデルが学んだ関係は、古い分布の上に築いたものなので、予測は少しずつ外れはじめます。

ラベルがすぐには来ない問題が、ここに重なります。解約予測なら、その顧客が本当に解約したかは、1か月後にならないとわかりません。正解率で異常に気づくには、1か月待たなければならないのに、入力の分布は今すぐ測れます。そのため、ドリフトの監視は、ラベルを待つ間に使う、早期のシグナルです。

どう動くのか

TFXのドキュメントは、データの検証を3つに分けて説明します。スキーマに基づく検証、学習とサービングのスキュー(training-serving skew)の検出、そして一連のデータをつなげて見ながら、ドリフトを探すことです(TensorFlow Data Validation)。3つ目がこのモジュールの主題で、前の2つとは別の検査であることが要点です。

最も単純な形は、基準データの平均と標準偏差を記憶しておき、新しいデータの平均が何シグマ動いたかを見ることです。母集団の標準偏差は、標準ライブラリですぐに計算できます(statistics)。

shift_sigma = (새 데이터의 평균 − 기준의 평균) ÷ 기준의 모집단 표준편차

|shift_sigma| 0.1 정도   잡음 범위
|shift_sigma| 1.0 이상   기준 분포에서 확실히 벗어남 → 경보

シグマ1つで、すべてを測れるわけではありません。カテゴリ型の特徴量には平均がなく、分布が片側に大きく偏った値では、平均の移動が、実際の変化より小さく見えます。そのため、実務では、区間に分けて割合の差を測る方式や、分位値の比較を一緒に使います。どの方式でも、共通点は同じです。基準の分布をどこかに保存しておく必要があり、その保存物も、モデルのようにバージョンを持つ必要があるということです。

基準を何にするかが、次の決定です。学習に使ったデータで固定すれば、「モデルが学んだ世界」との距離を測ることになり、先週の本番データにすれば、「急に変わったか」を測ることになります。2つは別の質問なので、たいてい一緒に置きます。

指標にしたあとは、監視システムの仕事です。特徴量ごとに値を1つずつ出力し、しきい値を超えたときにアラートを出します。指標の名前は、単位を接尾辞として付け、基本単位を使う慣例に従うほうが、あとで読みやすいです(Metric and label naming)。アラートを再学習のトリガーにそのままつなげることもできますが、その前に、プロモーションのゲートがある必要があります。分布が変わったからという理由で再学習したモデルが、よりよいという保証はないからです。

ドリフトを測ったからといって、モデルをすぐに変える必要はありません。監視の第一の目的は、驚かないことです。分布が動いているという事実を知っていれば、1か月後に正解率が落ちたとき、原因を最初から探さなくて済みます。逆に、何も測っていなければ、その1か月は、まるごと推測になります。

現場での姿

最もよくある失敗は、アラートが多すぎることです。特徴量が200個のモデルで、それぞれにしきい値を設けると、毎日いくつかは超えます。数日たつと、誰も見なくなります。そのため、実際には、モデルが大きく依存する上位の数個の特徴量だけを監視するか、特徴量ごとの値を1つの要約値にまとめて、アラートを設けます。

2つ目は、ドリフトをすぐに事故と読むことです。料金プランを改編すれば、使用時間の分布は当然変わります。それはデータが壊れたのではなく、世の中が変わったので、必要な対応は、ロールバックではなく再学習です。逆に、上流のパイプラインが単位を分から時間に変えてしまった場合なら、再学習ではなく修正が必要です。指標は2つを区別してくれないので、アラートには、常に「何を確認すべきか」が付いている必要があります。

3つ目は、アラートを自動再学習にそのままつなげておくことです。分布が動いたからという理由で再学習したモデルが、よりよいという保証はどこにもなく、むしろ壊れたデータをそのまま学習してしまうこともあります。そのため、アラートと再学習の間にはデータ契約の検証が、再学習とデプロイの間にはプロモーションのゲートが、それぞれ置かれている必要があります。

4つ目は、基準を更新しないことです。再学習でチャンピオンを入れ替えたなら、ドリフトの基準も、新しい学習データに移す必要がありますが、これを忘れると、アラートが永遠にオンのままになります。

4つ目は、特徴量1つだけを見て、原因を断定することです。使用時間が上がったのが、本当にユーザーの行動の変化なのか、収集方法が変わったのか、それとも特定の顧客層が大量に流入したのかは、その1つの数字だけでは分かれません。そのため、アラートの横には、常に同じ期間のサンプル数と上位の分位値が、一緒にある必要があります。平均だけを見ると、サンプルが10倍に増えたことと、値が動いたことを区別できません。

次のクイズで確認すること

契約の検証とドリフトの検出が、それぞれ何をつかむのか、ラベルが遅れて来る状況で、入力の分布を測る理由が何なのか、ドリフトのアラートを再学習にすぐつなげるとき、何がさらに必要なのかを確認します。