DataDrift in Azure Machine Learning
Tags: azure, machinelearning, microsoft, datadrift
Published: 2020-04-17 02:54:20

一般的に機械学習モデルの精度は落ちていきます。モデル学習時のデータと最新のデータの特徴が変わってくるためです。本投稿では、Azure Machine Learning の Datadrift 機能について説明します。

![datadrift](https://image.slidesharecdn.com/azureml-datadrift-20200416-200416095947/95/datadrift-in-azure-machine-learning-1-638.jpg?cb=1587031238)
※ スライドを Slideshare で公開しています。
[DataDrift in Azure Machine Learning
](https://www.slideshare.net/keitaonabuta/datadrift-in-azure-machine-learning)

 ---
### 精度変化に対応するための再学習
再学習は次のアプローチでタイミングを検知します。

1. 運用中のモデルの精度が落ちたとき

運用中のモデルの精度が分かるのであれば問題無いのですが、例えばモデルを自社製品に組み込んで出荷してお客様がネットワークに閉じた事業所で利用している場合など、モデルの精度がわからない場合があります。そのような場合には下記アプローチが必要です。

2. データの特徴が変化した時

データの様々な特徴の変化を検知します。本投稿でお話する内容になります。では、どういう時にデータの特徴が変化するのか？については様々なケースがありますが、代表的なものを列挙します。

- データ計測方法の変更
   - 街頭アンケートをWeb形式に切り替える etc
- データ品質の劣化
   - 欠損値の増加、文字の揺らぎ etc
- 季節性などの自然な変化
   - 気温・湿度の変化、消費者の需要の変化 etc
- データ生成物の変化 etc
   - 設備の劣化、嗜好の変化 etc

### Azure Machine Learning 

Azure Machine Learning は機械学習のライフサイクルをフルでサポートする機械学習プラットフォームです。AutoML、HyperParameter Tuning のようなモデル学習を効率的に行ったり、MLOps の仕組みもご提供しています。

**Azure Machine Learning**
_企業向け仕様の機械学習サービスでモデルをよりすばやく構築してデプロイする_
https://azure.microsoft.com/ja-jp/services/machine-learning/

また、データセットを管理する機能もご提供しています。

- データソースへの接続
   - Azure が提供する様々なデータソースへの接続 (Azure SQL Database, Azure PostgreSQL, Azure MySQL Database, Azure Data Lake Storage Gen2 など)
- 属性情報のバージョン管理
- スナップショット保存
- Data Drift (本投稿のトピック)


### DataDrift 機能

DataDrift は学習データや推論データに適用できます。モニタリング対象は大きく下記の2つです。

- データセット全体
- 個々の特徴量

それぞれどのようなアプローチをしているか説明します。

#### データセット全体

DataDrift を検知する分類モデルを Azure Machine Learning を有しており、それを用いています。比較対象の 2 つのデータ (モデル学習時のデータ、最新のデータ) を識別することを試みます。全く識別できない場合は 0 、完全に識別できる場合は 1 となるようなドリフト係数 (Drift Coefficient) を出力します。また内部でモデル解釈機能を利用しており、ドリフトに寄与している

![ドリフト係数と寄与している特徴量](https://docs.microsoft.com/ja-jp/azure/machine-learning/media/how-to-monitor-datasets/drift-overview.png)


#### 個々の特徴量

先ほどはデータセット全体を見ましたが、個々の特徴量についてもアプローチすることができます。こちらは様々なメトリックを提供しています。

- 数値系データ
   - ワッサースタイン距離、最小値、平均値、最大値
- カテゴリーデータ
   - ユークリッド距離、一意の値の数

   ![ワッサースタイン距離](https://docs.microsoft.com/ja-jp/azure/machine-learning/media/how-to-monitor-datasets/feature-details.png)

ワッサースタイン距離とは、異常検知や最適輸送経路問題でも利用されるもので、2 つのデータ分布を出力するものです。SciPyでも簡単に算出することができます。

```python
# 2 つのBeta分布のワッサースタイン距離
from scipy.stats import wasserstein_distance,beta
wasserstein_distance(stats.beta.pdf(x,5,5), stats.beta.pdf(x,8,5))
```

![SciPy による出力例](https://user-images.githubusercontent.com/3815677/79641590-750b9f80-81d3-11ea-98bb-5ad50c9405af.png)

### 他システムとの連携

DataDrift が発生していることを検知する方法としては、デフォルトでメールでのアラート配信機能を提供しています。また、Azure Machine Learning と Event Grid を連携させることで、次のような連携を行うことができます。

- DataDrift をトリガーにしてモデルの再学習 & デプロイを自動実行
- Github の Issue を作成
- Teams, Slack に DataDrift の発生を通知

### まとめ
- モデル精度維持のためにデータセットをモニタリング
   - モデルの精度は日々変化するものです。データの変化はモデル精度に大きく影響します。
- モニタリング対象は “データセット全体” & “個々の特徴量”
- イベントドリブンな機械学習パイプラインの実現
   - 複雑な機械学習環境の連携性を向上することができます。


### 参考情報
- Channel 9 (短編動画 – 日本語字幕あり)   # チャネル登録ぜひ！
   - [Data Drift Monitoring for Azure ML Datasets](https://channel9.msdn.com/Shows/AI-Show/Drift)

-  製品ドキュメント
   - [データセットでデータ ドリフトを検出する (プレビュー)](https://docs.microsoft.com/ja-JP/azure/machine-learning/how-to-monitor-datasets)
   - [Azure Kubernetes Service (AKS) にデプロイされたモデルのデータの誤差 (プレビュー) を検出する](https://docs.microsoft.com/ja-JP/azure/machine-learning/how-to-monitor-datasets)

- Sample Code (Jupyter)
   - [Analyze data drift in Azure Machine Learning datasets](https://nbviewer.jupyter.org/github/Azure/MachineLearningNotebooks/blob/master/how-to-use-azureml/work-with-data/datadrift-tutorial/datadrift-tutorial.ipynb)
   - [Monitor data drift on models deployed to Azure Kubernetes Service](https://nbviewer.jupyter.org/github/Azure/MachineLearningNotebooks/blob/master/how-to-use-azureml/monitor-models/data-drift/drift-on-aks.ipynb)