データの Concept drift 問題について

ちゃお…†

まいおり…†

今回はConcept driftについて調べてたのでメモを書こうと思います。

Concept driftとは

機械学習やその周辺分野では、モデルを無益なものにするデータの変動をConcept drift (コンセプト変動; コンセプトドリフト; 概念ドリフト) と呼びます。

Concept driftは、モデルが予測するための説明変数の統計的性質が思いがけないことで時間とともに変わってしまうと起きます。 Concept driftが起こると時間が経つごとに予測精度が低くなる問題を引き起こします。 この問題において最も重要なことは、動的に変動するデータやデータモデルに関するDrift detection (ドリフト検出) と Drift adaptation (ドリフト適応) によるアプローチです。

予測モデルの衰退

機械学習において、データモデルは確率分布のような統計的な性質を持っています。 しかしデータがトレーニングデータセットの統計的性質から逸脱している場合、その変動を解決しないと予測モデルの精度はあてになりません。

データ設定の衰退

ソフトウェア工学において、データ完全性に影響する3つのデータドリフトが知られています。

ソフトウェア環境の変更 (infrastructure drift) は、ソフトウェア基盤設定をあてにならないものにしてしまうことがあります。

Structural drift (構造変動) は、データベースを無益なものにしてしまうようなデータスキーマの変更をしたときに起こります。

Semantic drift (セマンティック変動) はデータの構造を変えていないにもかかわらずデータの意味が変わってしまうことです。 複雑なアプリケーションでは、多くの独立した開発者が、その変更がソフトウェアシステムの他の領域に及ぼす影響を正しく認識せずに、変更を導入するケースが多くあります。

多くのアプリケーションシステムでは、ビジネスモデルの変更、システムの更新、システムが動作するプラットフォームの切り替えなど、さまざまな理由で動作するデータの性質が変化することがあります。

クラウドコンピューティングの場合、クラウド上で動作するアプリケーションに影響を与える可能性のあるインフラのドリフトは、クラウドソフトウェアのアップデートによって引き起こされることがあります。

データドリフトがデータの忠実性に及ぼす有害な影響には、いくつかの種類があります。データ腐食 (Data corrosion) は、ドリフトしたデータを検出されずにシステム内に通すことです。データ損失 (Data loss) は、適用されたスキーマとの不適合により、有効なデータが無視される場合に起こります。Squandering (無駄遣い) とは、データ処理パイプラインの上流で新しいデータフィールドが導入されるものの、下流のどこかでデータフィールドが存在しない現象です。

整合性のないデータ

データドリフトとは、データベースの記録と現実のデータが、時間の経過とともに変化し、一致しなくなる現象のことを指します。これは、顧客、従業員、市民、住民など、人が関わるデータベースでよく見られる問題です。人間のデータドリフトは、居住地や名前などの個人データの未記録の変化や、データ入力時のエラーによって引き起こされることがあります。

また、データドリフトとは、データベースの複数のレプリカにおけるデータ要素の不整合を指す場合があります。ただ、その原因を特定することは困難です。簡単なドリフト検出方法は、チェックサムを定期的に実行することです。しかし、その対策はそれほど簡単ではないかもしれません。

不正検知アプリケーションにおいて、対象とする概念は、ある取引が不正であるかどうかを示す値「yes」または「no」を持つバイナリ属性の不正である可能性があります。あるいは、天気予報のアプリケーションでは、気温、気圧、湿度など、複数のターゲットとなる概念が存在する可能性があります。

オンラインショップにおける顧客の行動は、時間の経過とともに変化する可能性があります。例えば、週間商品売上を予測する場合、充分に動作する予測モデルが開発されているとします。このモデルでは、広告に費やした金額や実施しているプロモーションなど、売上に影響を与える可能性のある指標を入力として使用することができます。このモデルは、時間の経過とともに精度が低下していく可能性があります。商品販売のアプリケーションでは、Concept driftの理由の1つに季節性があります。つまり、消費行動は季節ごとに変化します。例えば、夏よりも冬のホリデーシーズンの方が売上が高くなる可能性があります。Concept driftは、一般に、データセットを構成する共変量が、ターゲットセットの変動をより正確に説明できなくなったときに起こります。つまり、何らかの交絡変数が出現し、それを単に説明できないために、モデルの精度が時間と共に徐々に低下していく可能性があります。一般的に、作成後の分析の一環としてヘルスチェックを行い、Concept driftの兆候が見られたら、新しい仮定でモデルを再トレーニングすることが推奨されます。

考えられる改善策

Concept driftによる予測精度の低下を防ぐために、リアクティブソリューションと追跡型ソリューションが採用されることがあります。

リアクティブソリューションは、変化検出テストなどのトリガーメカニズムに反応してモデルを再学習させ、データ生成プロセスの統計量の変化として概念ドリフトを明示的に検出します。Concept driftが検出されると、現在のモデルはもはや最新ではなく、予測精度を回復するために新しいモデルに置き換える必要があります。反応型アプローチの欠点は、変更が検出されるまでパフォーマンスが低下する可能性があることです。

追跡型ソリューションでは、モデルを継続的に更新することで、概念の変化を追跡しようとします。これを実現する方法としては、オンライン機械学習、最近観測されたサンプルに対する頻繁な再トレーニング、分類器のアンサンブルを維持し、新しい分類器を最新のサンプルバッチでトレーニングしてアンサンブル内の最も古い分類器を置き換えるなどがあります。

文脈情報があれば、Concept driftの原因をよりよく説明するために使用することができます。例えば、売上予測のアプリケーションでは、季節に関する情報をモデルに追加することで、Concept driftを補うことができるかもしれません。時期に関する情報を提供することで、モデルの劣化率は低下すると考えられますが、Concept driftが完全になくなることは考えられません。なぜなら、実際の消費行動は、静的で有限なモデルには従わないからです。消費行動に影響を与える新しい要因がいつでも発生し、既知の要因の影響やその相互作用が変化する可能性があります。

固定した自然法則に支配されない複雑な現象については、Concept driftを避けることはできません。社会経済的プロセスや生物学的プロセスなど、人間の活動から生じるすべてのプロセスは、Concept driftが生じる可能性が高いからです。したがって、どのようなモデルであっても、定期的な再トレーニング (リフレッシュとも呼ばれる) が必要です。

ソフトウェア

  • scikit-multiflow: 様々なドリフト検出アルゴリズムを実装したPythonライブラリです。
  • Evidently: 機械学習を扱うデータ科学者やエンジニアのために作られたPythonライブラリです。Evidentlyは、検証から本番まで、モデルのテスト、評価、動作の追跡を支援します。
  • NannyML: 一変量および多変量の分布ドリフトを検出し、Ground truthラベルなしで機械学習モデルの性能を推定するためのPythonライブラリです。
  • RapidMiner: 知識発見、データマイニング機械学習のための無料のオープンソースソフトウェアで、データストリームマイニング、時間変化する概念の学習、ドリフトしている概念の追跡を特徴としています。データストリームマイニングプラグイン(旧concept drift plugin)と組み合わせて使用されます。
  • MOA (Massive Online Analysis): コンセプトドリフトを伴うデータストリームのマイニングに特化した、無料のオープンソースソフトウェアです。前置評価法、EDDMコンセプトドリフト法、ARFF実データセットのリーダー、SEAコンセプト・STAGGER・回転超平面・ランダムツリー・ランダム半径ベースの関数などの人工ストリームジェネレーターが含まれています。また、MOAはWekaとの双方向のやり取りをサポートしています。

データセット

リアル

その他

  • KDD'99: 軍事ネットワーク環境での模擬侵入が含まれています。ハンドリングコンセプトのドリフトを評価するベンチマークとしてよく利用されています。

論文

データ生成フレームワーク