SPSS CADSで数値予測モデル・モニタリング②ダミーモデルで判定

SPSS CADSでカテゴリ値の予測については標準の機能で劣化検知を検知する、[モデル・モニタリング](https://qiita.com/kawada2017/items/43ea5d0a4589f402d9eb
)が可能です。

しかしながら、回帰などの数値予測のモデルにはこの機能が基本的には使えません。

二つの実現方法があります。
1. [Modelerスクリプトをつかってメトリクスから判定](https://qiita.com/kawada2017/items/14da0f87164e19674039)
1. [ダミーモデルを作って判定](https://qiita.com/kawada2017/items/5cc02756336317b8d4cb)

この記事では②の方法で実現してみます。
この方法では数値予測結果を正解フラグで判定して、カテゴリ予測モデルのモデル劣化検知の機能を利用する方法です。
ですので、一般的なMAPE、RMSE、R2乗などの評価メトリクスを使いたい場合には①の方法を使ってください。

# 正解を判定するストリーム

①と同じ「濃度」の予測を行っています。しかし、絶対誤差の割合が20％以内なら「正解」、それ以上なら「不正解」という判定を行っています。MAPEでは絶対誤差の割合の全体平均をとりますが、ここでは１件ごとに絶対誤差の割合が20％より大きいものを「不正解」として扱って2値の判定結果に変換しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fd562cdd-3667-b4b7-8e14-6a2c543d5e43.png)

ここでダミーの0,1判定モデルを作ります。
100件の0,1のデータを作りINPUTとOUTPUTが全く同じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0b548152-c447-0661-e97c-2205009b8624.png)

単純に、INPUTが1ならOUTPUTも1、INPUTが0ならOUTPUTも0というモデルになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5d0e58c9-d548-2a70-4591-04c6ee44bfa5.png)

このスコアリング枝に濃度の予測値の絶対誤差が20％より大きいものは間違いとするデータを作ります。INPUTを全て「1」にしていますので、モデルは「1」を予測するのですが、絶対誤差が20％より大きい場合は「0」になりますので、予測が間違ったことになります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ec95a2e7-835d-9974-67db-a0ceaf2d0d7e.png)

「sensorhist.csv」を入力に実行すると70.27%の正解率です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bfd317e4-4c4e-2ca2-98dd-ffbac29c8c74.png)

「sensornew.csv」を入力に実行すると47.75%の正解率です。この劣化を検知したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/00ce6fda-44ef-aa73-23ab-ac9e3a893fbf.png)

ストリームのプロパティの「展開」タブで「モデル更新」を選び、「スコアリングノード」、「モデリングノード」、「モデルナゲット」を指定します。濃度予測モデルではなく、ダミーの１，０判定のモデルを指定することがポイントです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bacc1835-b247-4539-e255-2cc498f6cb76.png)


# モニタリングをするCADSジョブの作成
CADSのジョブを作り、ジョブ変数に「FILENAME」をつくりデフォルトは「sensorhist.csv」としておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6443f8ad-2525-2c12-6332-517a16519443.png)


先ほどのストリームを配置します。
そして、Modeler Serverやコンテンツ・リポジトリ―サーバーとそれらのログイン情報を設定します。
そして、「ストリームの実行」ではなく「モデルの管理」を選び、「Bad」の閾値を「70」にし、メトリックは「精度」にしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/16b754f5-2ec1-ccf8-9487-46b1778c324e.png)




そして、「データファイル」タブで入力ファイルを「${JobVariable.FILENAME}」で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1238117c-01f0-c971-45de-ebcfecfd1919.png)


次に劣化ありの処理を作ります。本当はメールを送りたいところですが、今回のテスト環境ではメール発信ができなかったので、ダミーで「echo "ng"」を行う「全般」ステップを配置しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/237e1497-d251-9208-ae10-1406be98f123.png)

そして、「条件付き」リレーションシップをつけ、条件には「completion_code == 100」を入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6a3be6ec-2f14-aba7-67eb-b965cea766af.png)

この作り方はカテゴリ予測モデルの劣化検知と同じです。

https://qiita.com/kawada2017/items/43ea5d0a4589f402d9eb#%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%B8%E3%83%A7%E3%83%96%E3%81%AE%E4%BD%9C%E6%88%90


# テスト実行
ジョブをオプションありで実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b63b6556-17ad-0a4d-930a-94b882081b24.png)

FILENAMEは「sensorhist.csv」のまま実行します。正解率「70.27%」になるはずなので、「劣化なし」になるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ae35a174-5b7f-4d89-c164-f2b1a577c89c.png)

結果は成功でした。「劣化あり」ステップは実行されていませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/cf5a5632-99c4-3360-8974-722849856c7d.png)


次にFILENAMEは「sensornew.csv」で実行します。今度は、正解率は「47.75%」になるはずなので、「劣化あり」になるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/45a13cea-0d8d-13e7-d204-6adc5b98b476.png)

「劣化あり」のステップが実行されていますので、正しく判定ができました。
①のスクリプトによる劣化判定と異なり、ジョブ全体の実行結果としては「成功」扱いになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d611455a-c7f4-1dec-e3b4-2c59a46ead1d.png)

また、モデルの管理ビューで見ても結果が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b084aec2-7282-6d47-5dff-52539c729a6b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/968e512f-a19f-cafe-2439-a20b58c4420f.png)


# 環境とサンプル
* 環境
    * SPSS Modeler 18.4
    * SPSS CADS 8.4
    * Windows Server
* サンプルストリームとデータ

https://github.com/hkwd/spssmodelerscript/raw/master/240321scriptExec/scriptexec.str

https://raw.githubusercontent.com/hkwd/spsssample/master/240321CADSMLOpsContinous/sensorhist.csv

https://raw.githubusercontent.com/hkwd/spsssample/master/240321CADSMLOpsContinous/sensornew.csv

# 参考
#### CADSでMLOps #3モデル・モニタリング #SPSS - Qiita 
https://qiita.com/kawada2017/items/43ea5d0a4589f402d9eb