【ML初心者アドベントカレンダー】モデルのモニタリングについて


# この記事の目的

モデルのモニタリングについて、Machine Learning Lens も絡めて学ぶ

# 機械学習モデルのドリフトについて 

モデルを使用するにあたって、継続的なモニタリングを行いドリフトを検知する必要があります。
ドリフトとは何か？については引用させていただいた下記の記事が一番わかりやすかったです。

> ドリフト（Drift）とは、何らかの「予期せぬ変化」によって、モデルの予測性能が時間経過とともに劣化していくことを指す

https://atmarkit.itmedia.co.jp/ait/articles/2202/21/news033.html


## データドリフト

機械学習モデルの学習に使用したデータセットと実際の運用環境で扱うデータセットの間に差異が生じる現象のこと。

https://aws.amazon.com/jp/blogs/news/detect-data-drift-with-amazon-sagemaker-model-monitor/


## コンセプトドリフト

機械学習モデルが学習した概念自体が時間の経過とともに変化してしまう現象。正解そのものが置き換わってしまうこと。
※ 冬は暖かいダウンが売れるが、夏は売れない。この場合は、正解のデータが時間の経過で「ダウン」ではなくなっている。

# AWS サービスを使ったモデルモニタリング

AWS にはモニタリングサービスがいくつかありますが、それぞれでできることが異なるので簡単にまとめます。

|サービス|概要|
|---|---|
|SageMaker Model Monitor|データ品質とモデルパフォーマンスをモニタリングできる。モデルそのもののパフォーマンスを知りたい場合はこちら|
|SageMaker Clarify|バイアス検出とモデル解釈が行える。簡単なレポートも生成可能|
|Amazon CloudWatch|トレーニングジョブやエンドポイントのメトリクスをモニタリングできる。モデルの品質ではなくて環境の状態とかを知りたいときにはこちら|


# Well-Architected Machine Learning Lens

Machine Learning Lens は 2021年に追加されたAWS Well-Architected Framework の一部で、機械学習（ML）システムの設計に関するベストプラクティスのことです。

https://aws.amazon.com/jp/blogs/news/introducing-the-new-aws-well-architected-machine-learning-lens/

モニタリングについては、下記のような記載があります。
（「」内は私なりの解釈です。詳しくはリンク先を参照していただければと思います。）

## 運用の卓越性の柱

 * モデルの可観測性と追跡を有効にする
   * 「継続的なモニタリングを実施し、推論の問題を特定して、事前に回避するための監視を設計しよう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mloe-15.html

 * アーキテクチャと構成を同期し、環境間の偏りをチェックする
   * 「本番環境でも開発環境でも同じ構成、同じモデルを使用して同じ精度を出そう」 

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mloe-16.html


## セキュリティの柱

* 意図した正当な消費者へのアクセスを制限する
  * 「モデルへのアクセスは最小権限で行い、ユーザーには安全なアクセス経路を提供しよう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlsec-12.html

* 人間とデータのやり取りを監視して異常なアクティビティを検出する
  * 「アクセスログを有効にし、異常なログを監視しよう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlsec-13.html

## 信頼性の柱

* モデルエンドポイントの自動スケーリングを許可する
  * 「需要を満たすためにエンドポイントは自動でスケーリングできるようにしておこう。監視も忘れないでね」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlrel-12.html

* 管理されたバージョン管理戦略で回復可能なエンドポイントを確保する
  * 「モデルがいつでも回復できるようにどっかに構成をまとめて管理しておこう。バージョン管理もしておこう」
  * AWS CloudFormationとか使うといいよ

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlrel-13.html

## パフォーマンス効率の柱

* モデルの説明可能性を評価する
　* 「求められた時、きちんと推論の結果を説明できるようにしよう」
　* Amazon SageMaker AI Clarify を使用するといいよ

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlper-13.html

* データドリフトを評価する
  * 「ドリフトがモデルに与える影響を理解しておこう。ドリフトを監視し、再トレーニングできるようにしておこう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlper-14.html

* モデルのパフォーマンス低下を監視、検出、処理する
  * 「モデルは時間の経過でだめになっていくから、きちんと監視して最適なタイミングでモデルを更新できるように備えておこう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlper-15.html

* 自動化された再トレーニングフレームワークを確立する
  * 「データとモデルの予測を監視して、バイアス等が一定の値に達したら自動でトレーニングできるように仕組みを作っておこう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlper-16.html

* 再トレーニングのための更新されたデータ/機能のレビュー
  * 「再トレーニングをするときは、前回のトレーニング時にはなかったデータや新しくなっているデータについても考慮しておこう」
  * Amazon SageMaker AI Data Wrangler を使用して変化するデータを探索できるよ 

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlper-17.html

* 人間参加型モニタリングを含める
  * 「人間が参加するモニタリングを使ってみよう。ラベル付けは人間の方が精度高いよ」
  * Amazon Augmented AI を使用すると人間によるレビューを受けることができるよ


https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlper-18.html


## コスト最適化の柱

* MLアクティビティごとの使用状況とコストを監視する
  * 「リソースにタグをつけて、何がどれだけお金使ってるのかを見ておくようにしよう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlcost-27.html

* ML モデルの投資収益率を監視する
  * 「本番稼働中のモデルのレポートを見て、ちゃんと市場に見合った価値を提供できているか見ておこう。だめそうだったら改善しよう」
  * Amazon QuickSightを使用してビジネス観点のレポートが作成できるよ

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlcost-28.html

* エンドポイントの使用状況を監視し、インスタンス群を適切なサイズにする
  * 「リソースがきちんとCPUとかメモリとか最適なサイズを使っているか確認して、過不足がありそうだったら調整しよう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlcost-29.html

## 持続可能性の柱

* 材料効率の測定
  * 「作業の大変さとモデルの生み出す利益が割に合っているか確認しよう」

https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlsus-15.html

* 必要な場合にのみ再トレーニングを行う
  * 「わざとやるんじゃなくて問題が見つかったときにだけ再トレーニングを行うようにしよう」


https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/mlsus-16.html