Data Drift
データドリフトとは、本番環境の入力データが学習時の分布から変化し、精度が低下する現象です。ドリフトの種類、統計的検定、再学習を解説します。
データドリフトとは、デプロイ済みモデルが受け取る入力データの統計的分布が、学習に使われたデータと比べて変化することです。モデルは本番環境の入力が学習データと同じ分布に従うと仮定します。この仮定が崩れると、エラーメッセージもモデルのコードや重みの変更もないまま、精度が低下することがあります。ビジョンシステムでよくある原因には、新しいカメラやレンズ、照明や季節の変化、カメラアングルの移動、新しい製品パッケージ、画像圧縮設定の変更などの上流パイプラインの変更があります。ドリフトの検出と対応は、モデル監視と機械学習運用(MLOps)の中核的なタスクです。
分布シフトの種類#
分類器は入力に対するラベルの確率をモデル化します。シフトは入力、ラベル、またはそれらの関係に生じます。
- 共変量シフト: 入力分布が変化しても、特定の入力に対する正しいラベルは変わりません。昼間の画像で学習した検出器が夕暮れの映像を受け取り始めても、車が車であることに変わりはないため、これは共変量シフトにあたります。狭義のデータドリフトはこのケースを指します。
- ラベルシフト: 事前確率シフトとも呼ばれ、クラスの出現頻度が変化します。生産ラインの不良率が1%から5%に上昇すると、検出器のアラートに占める実際の不良の割合も上昇するため、モデルや各不良の見た目が変わらなくても、適合率は変化します。
- 概念ドリフト: 入力とラベルの関係が変化し、同じ入力に対して異なるラベルが必要になります。不正行為者の適応に伴って不正のパターンが変化したり、品質基準の厳格化によって以前は合格していた部品が不合格になったりします。
ドリフトは、カメラの交換のように突然起こることも、レンズの汚れが蓄積するように徐々に起こることも、季節ごとの葉や積雪のように繰り返し発生することもあります。
データドリフトの検出#
ドリフト検出では、通常は学習データまたは検証データを基準サンプルとして、最近の本番データのウィンドウと比較します。ラベルがない場合は、2標本コルモゴロフ–スミルノフ(KS)検定で連続特徴量を、カイ二乗検定でカテゴリ特徴量を比較するか、信用スコアリングで一般的な母集団安定性指標(PSI)を使用し、2つの入力分布に差があるかを検定します。生のピクセルは高次元すぎて直接比較できないため、画像監視では明るさや鮮明度などの要約統計量、または事前学習済みネットワークの埋め込みを検定します。シフト検出手法の研究では、事前学習済み分類器の表現に対する2標本検定が最も効果的であることが分かりました。モデル自体の出力も2つ目のシグナルになります。予測クラスの頻度、画像あたりのボックス数、信頼度スコアの変化は、誰かが精度を測定する前に現れることがよくあります。
import numpy as np
from scipy.stats import ks_2samp
rng = np.random.default_rng(0)
# Mean brightness (0-255) of 500 training images and two batches of 200 production images
reference = rng.normal(130, 25, 500)
same_light = rng.normal(130, 25, 200)
dusk = rng.normal(110, 25, 200)
# Two-sample Kolmogorov-Smirnov test: a small p-value means the distributions differ
for name, batch in (("same light", same_light), ("dusk", dusk)):
result = ks_2samp(reference, batch)
drifted = result.pvalue < 0.01
print(f"{name}: KS statistic {result.statistic:.3f}, p-value {result.pvalue:.2g}, drift {drifted}")学習分布から抽出したバッチのKS統計量は0.046、p値は0.91です。一方、平均輝度が20レベル低下したバッチのKS統計量は0.346、p値は1.1e-15となり、ドリフトとして検出されます。KS統計量は2つの累積分布間の最大の差を表します。非常に大きなサンプルでは、問題のない小さなシフトでもp値が極めて小さくなるため、ドリフトアラートはp値だけではなく、シフトの大きさを測るKS統計量自体に設定されることがよくあります。
ドリフトへの対応#
検出されたシフトによって精度が低下したかどうかは、新しいラベルがあって初めて確認できます。標準的な対応は、直近の本番データをサンプリングしてラベルを付け、そのデータで平均適合率(mAP)やその他のタスク指標を測定し、性能が低下していれば新しいデータと元のデータを混ぜて再学習またはファインチューニングすることです。破滅的忘却を防ぐため、古いサンプルも混合データに残します。明るさ、ぼかし、色を変更するデータ拡張は予測可能な変動に備えてモデルを学習させ、教師なしドメイン適応はラベルなしのターゲットデータを使ってモデルを新しいドメインに適応させます。Ultralytics Platformでは、専用エンドポイントのMonitoringタブに、配信した画像の予測信頼度の平均値、クラス数、ボックスのサイズと位置が時系列で表示されます。また、最近のサンプルをデータセットに保存して、レビューや再学習に利用できます。
データドリフトと関連用語の違い#
- モデルドリフト: データドリフトや概念ドリフトによって引き起こされる、時間の経過に伴うモデル性能の低下です。モデル劣化とも呼ばれます。
- 学習・サービング間のずれ: 別のリサイズ方法を使うなど、学習用と本番用の2つのパイプラインで処理が異なることによって生じる、学習データと本番データの不一致です。時間の経過とともに発生するのではなく、デプロイ初日から存在します。
- 異常検知: 破損したフレームが1つある場合など、基準から外れる個々の入力を検出します。ドリフト検出では分布全体を比較し、画像が一様に暗くなった1週間分のデータなどを検出します。
- 分布外(OOD)検出: 各入力が学習データとどの程度異なるかをスコア化します。通常は、その入力に対する予測をモデルが差し控えるか、人に判断を委ねられるようにします。










