CADSでMLOps #3モデル・モニタリング

SPSS Modelerで作ったモデルをCADSと組み合わせてMLOpsで管理していきます。

MLOpsを4つのパートに分けて説明します。
この記事ではモデルモニタリング・パイプライン作成について説明します。

1.[モデル作成](https://qiita.com/kawada2017/items/b5e1f94fafadbd2452eb)
2.[スコアリング](https://qiita.com/kawada2017/items/f7aa3716bb916ca76603)
**3.モデルモニタリング**
4.[モデルリフレッシュ](https://qiita.com/kawada2017/items/e5a8cd9ad53817d47cb1)


全体イメージの中では、フィードバックデータをつかってモデルを監視するモデルモニタリング・パイプライン（CADSジョブ）を作成して、モニタリングを行うところまでの解説になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1641dd4a-7c5c-22b6-61a5-c01d081c0f31.png)


# モニタリングジョブの作成
まず、スコアリングのジョブをコピーして貼り付け、名前を付けます。ここでは「キャンペーン予測モニタリング」としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a1331f40-aab9-bd89-84bc-e5f453454785.png)

コピーして作成したジョブを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7041cf36-dffb-3678-ed8d-48f573753fee.png)

ジョブステップ名は「キャンペーン予測モニタリング」を指定しました。
ここではスコアリングと異なりオブジェクトのバージョンは「LATEST」に指定しました。

タイプ：「評価」これがモニタリングを示しています。
メトリック：「精度」
パフォーマンスには閾値とそのラベルを設定します。
ここでは以下のように設定しました。
0%-50%：不良
50%-70%：注意
70%-100%：良好


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3b19a95c-01db-7e44-a6c1-148d50e17092.png)

「データファイル」タブに移り「${JobVariable.FILENAME}」としてジョブ変数が指定されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/37599571-10d5-93b5-2f9a-db86628de700.png)


「通知」のジョブステップを追加して、ジョブステップ名を「劣化通知」と設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b273b100-b059-ecc8-0b3b-f95e655fcead.png)

「条件付き」のリレーションシップで接続して、条件の式として「completion_code <= 200」を設定します。これで「注意」や「不良」と判定された場合に「劣化通知」のジョブステップが呼び出されるという定義ができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/2b77287b-08a3-5ead-bb37-504d370f42ac.png)

completion_codeの判定式はそれぞれ以下のようになります。

評価タイプ
|色|評価|判定式|
|--|--|--|
|緑|Better|completion_code == 300|
|黄|Good|completion_code == 200|
|赤|Bad|completion_code == 100|

「劣化通知」のジョブステップの「通知」タブを開き、「更新」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d667e7bc-7a7f-3ea3-7198-16970e2a9c79.png)

「...」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0ea4a542-3acb-90ef-8f49-ae6663582bf2.png)

Eメールアドレスを入力します。この例では「dsuser1@ibm.com」を設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/861c6494-ed76-697f-ad70-c39346dff4d0.png)

「件名」や「メッセージ」を適当に修正します。プレビューで届くメールのイメージを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5c56444b-0420-7afa-2e57-f7ffaabec2bf.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9d698294-bd79-03b0-5e44-ea054e9c84d8.png)

# モニタリングジョブの実行

設定ができたので「保存」で保存をして、「オプションありでジョブを実行」してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/48a4d027-8166-1279-83be-e147f6367bb8.png)

FILENAMEに「学習データ.csv」を指定します。これはモデル作成時と同じデータで評価していますので、80％程度の精度が期待されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f58f6a1c-d7a9-06c3-bb83-e058aa30045f.png)


「表示」「ビューの表示」「モデル管理」を選んで開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/24ad9041-a26f-98d9-3834-892dcd8f1c5f.png)

インデックスという欄をみると「86」となっていて、緑丸のアイコンが表示されています。「学習データ.csv」で評価した場合にこのモデルは「良好」であることを意味しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7e1bb3f9-6f1f-6f45-d2d4-42fff9e966f2.png)

次にフィードバックデータで評価してみます。「オプションありでジョブを実行」してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/cd33ed86-b318-7988-31e2-4d1a5cb70ac2.png)

FILENAMEに「フィードバックデータ.csv」を指定します。これはモデル作成移行にデータの傾向が変わっていればモデルのあたりが悪くなっている可能性があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/65a49f5b-b804-7dec-e80f-a2854b5e11ce.png)

「モデル管理」のビューを確認するとインデックスが「67」になり、黄色丸のアイコンが表示されています。「フィードバックデータ.csv」で評価した場合にこのモデルは「注意」であることを意味しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8260bec6-a1bf-0fb0-46aa-d8e35127c978.png)

確かにメールでも劣化の通知が届いていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/97ab297f-5e3c-98a5-c377-6305efc9aeda.png)


# サンプルストリームやデータ、PES

https://github.com/hkwd/spsssample/tree/master/220805CADSMLOps

* テスト環境
  * Modeler 18.3
  * CADS 8.3
  * Windows 2019


# 参考情報
なぜMLOpsが必要なのか(vol97-0014-ai) 
https://community.ibm.com/community/user/japan/blogs/provision-ibm1/2021/08/17/vol97-0014-ai

失敗しないMLOps (vol97-0017-ai) 
https://community.ibm.com/community/user/japan/blogs/provision-ibm1/2021/10/31/vol97-0017-ai

MLOpsのキホンと動向 | IBM ソリューション ブログ 
https://www.ibm.com/blogs/solutions/jp-ja/mlops-2021-data/