CADSでMLOps #2スコアリング

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

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

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


全体イメージの中では、スコアリング・パイプライン（ModelerストリームとCADSジョブ）を作成して、CADSのレポジトリに保存し、実行していみるところまでの解説になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/536e9f60-e887-7b9b-752e-9b00eace730c.png)

# スコアリングストリームの作成
スコアリングデータを読み込みます。
年齢と性別、そしてオプトインの情報がありますが、キャンペーン反応の情報はありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6065f217-5e49-466a-e311-cac953baa4db.png)

データ・加工処理とモデルはモデル作成のパイプラインからコピーします。モデルの名前は見分けがつきやすいように「スコアリング」としておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6c97d6a9-ad37-3a58-eb1a-4c71cabde0d6.png)

エクスポートノードを接続し、プレビューを見てみると、予測結果として「&#36;R-キャンペーン反応」と「&#36;RC-キャンペーン反応」の2列が追加されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/11c70558-1dee-c6e6-9a02-a2037800d666.png)

# スコアリング枝の設定

スコアリング枝の設定をします。「ストリームのプロパティ」の「展開」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1775fa01-afcd-f957-de47-981ed0443473.png)

以下をそれぞれ設定します。
展開タイプ：「モデル更新」
スコアリングノード：スコアリング後のエクスポートノード。この例では「スコアリング後データ.csv」
モデリングノード：モデルを作成したモデリングノード。この例では「キャンペーン反応」
モデルナゲット：スコアリング枝のモデルナゲット。この例では「スコアリング」


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e90b4666-b970-5adb-5e12-39b4f28f98c5.png)

スコアリングに使われる枝が太線表示になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5d7f6c84-b260-1d02-d7d3-155560cb4506.png)

# ビジネスルールの定義
スコアリングデータがそのまま業務適用できるとは限りません。
ここではオプトインのデータのみに絞るビジネスルールを定義しています。出力結果は「判断結果.csv」に出力するようにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3fd0a367-d0ed-c4f9-6b55-2a99cb50ddfc.png)

# CADSレポジトリへの保管
完成したストリームをCADSに保管します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c1ae2022-274e-56bc-f115-852de2613872.png)

上書きで保管します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9e99bbf7-62bb-372c-c546-84df03c62b1d.png)

このモデルでスコアリングを運用に載せるという想定で、バージョンラベルに「Production」を指定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bef981da-4b29-36a5-97e4-5d69fed815db.png)

# スコアリング用のCADSジョブの作成

「新規」で「ジョブ」を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7acceca2-50e2-bf52-020b-18fdc6f0828b.png)

名前を付けて「終了」をクリックします。ここでは「キャンペーン予測スコアリング」としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d3c7e8cd-8a40-b1b0-e05f-8779df9b8a1c.png)

まず、ジョブ変数を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/59fd5144-1eaf-2b13-1d20-09e97dfce275.png)

ここではスコアリングデータをジョブ変数で指定できるようにFILENAMEという変数で定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/30bb1cd3-c9b2-0978-aaeb-1ba19842bc8e.png)

次に「キャンペーン予測.str」をジョブのキャンバスにドラッグアンドドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/05f29d5a-8f17-17f0-d0c9-c98d150c5717.png)

ジョブステップ名は「キャンペーン予測スコアリング」としました。

オブジェクトのバージョンは「Production」ラベルがついたものとします。これはその後新しいバージョンのストリームが登録されていても、このスコアリングジョブでは「Production」のラベルを付いているストリームを使い続けるという意味になります。誤って意図をしないモデルを使わないための設定です。

Modeler Serverとコンテンツリポジトリ―サーバー（CADSレポジトリ）のサーバーと実行ユーザーを指定します。

タイプを「モデル管理」の「スコア」とします。
そしてスコアリング枝を「判断結果.csv」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/2d9b0c3c-dbf5-9803-8548-8f7694a546e4.png)

「データファイル」タブに移り、「スコアリングデータ.csv」に「\${JobVariable.FILENAME}」としてジョブ変数を指定します。

設定が終わったら保存ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7b999a0a-02ca-ef90-5cd9-bcbfdd4c0e7e.png)

# スコアリングジョブの実行
作成したスコアリングジョブを右クリックして、「オプションありでジョブを実行」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c38c14a8-054e-c63d-8e16-262132fd7cec.png)

FILENAMEは変更可能ですが、ここではそのまま実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/57b9713b-3ce3-ee6b-9f47-6e690f792102.png)

スコアリング結果が出力されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/44763597-74bb-f55d-5a9b-946712017e68.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/