SPSS Modelerで故障予知

#SPSS Modeler Flowsの機能を使って、故障予知モデルを作ってみます

###環境
Modeler 18.1.1

###参照
IBM SPSS Modeler - 概要 - 日本
https://www.ibm.com/jp-ja/marketplace/spss-modeler

##A.事前準備

A1. 以下からプロジェクトのファイルをzipでダウンロードします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/0b1a152d-ec09-984f-f04a-16fec5648993.png)

hkwd/DSXL_MachineErr
https://github.com/hkwd/DSXL_MachineErr

A2. zipファイルを解凍し、データファイルを確認します。。
DSXL_MachineErr-master.zipを解凍するとDSXL_MachineErr-master\DSXL_MachineErr-master\datasetsに以下の3ファイルが入っています。

Cond3n_e111.csv
Cond3n_e.csv
Cond3n_e_new.csv

A3. SPSS Modelerを起動します

##B.データの確認
B1. データを確認します
Cond3n_e.csvというファイルをModelerのキャンバスにドラッグアンドドロップします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/532c2043-c214-c839-9ef3-8f671b12f71c.png)

出力タブからテーブルノードを選択し、ドラッグアンドドロップしたCond3n_e.csvと接続します。
テーブルノードを選択状態にして、黄色の五角形に緑の三角のボタンで実行します。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/bb53f3a4-85e7-88df-fc87-02e8d92996f5.png)


以下のようなデータが入っています。各列の意味は以下です。
M_CD: マシンコード
UP_TIIME: 起動時間
POWER: 電力
TEMP: 温度
POWER_DIFF: 電力差分
TEMP_DIFF: 温度差分
POWER_5MAVG: 電力差分5期移動平均
TEMP_5MAVG: 温度差分5期移動平均
ERR_CD_5FUTURE: 5期先エラーコード

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/6beb9e9b-326d-598f-c3b0-d55dbd6d16fe.png)

確認し終わったら赤い×ボタンで閉じます。

##C.モデル作成
SPSS Modelerを使って、電力や温度の変化などから5期先のエラーコードを予測するモデルを作成します。

C1. データの型定義
フィールド設定タブからフィールド設定のデータ型を選び、キャンバスにドラッグアンドドロップします。
そして、Cond3n_e.csvのノードと接続します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/adba558d-f762-4094-0092-89254d0cd6eb.png)


次に右クリックをして編集をクリックし、プロパティを開きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/5d569aae-c6ea-ed2e-849e-3acbc792d205.png)

ERR_CD_5FUTUREは数値のデータですが、連続型ではないので、ERR_CD_5FUTUREの尺度をカテゴリ型に設定し、値の読み込みします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/98cf8b31-3d30-2080-06b6-0a9c273842e0.png)

ERR_CD_5FUTUREには4種類の名義型のデータがあると判定されます。
一番上の二つのM_CDとUP_TIMEのロールを「なし」に設定します。
一番下の列のERR_CD_5FUTUREのロールを「対象」に設定します。TEMPやPOWERをつかって、ERR_CD_5FUTUREを予測するという設定になります

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/324b73ae-1877-560c-850a-e3a6e4c49541.png)


C2. データの検査
出力タブから「データ検査」を選び、キャンバスにドラッグアンドドロップします。
そして、データ型ノードと接続します。
データ検査ノードを選択状態にして、黄色の五角形に緑の三角のボタンで実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/eef20963-dfe0-8b9e-a2d6-c8dafe901717.png)




各列の最大値、平均などの情報を一覧で確認することができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/7314a840-cc6e-2165-7e2c-22987f16b372.png)

欠損値検査のタブを開くと外れ値や欠損値の情報を確認することができます。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/07ddd852-11da-128d-1d7f-c896aee3bde1.png)


C3. モデルの作成

モデル作成タブの一覧からC5.0を選び、キャンバスにドラッグアンドドロップします。C5.0は予測分析のできる決定木アルゴリズムの一つです。
そして、データ型ノードと接続します。
C5.0を選択状態にして、黄色の五角形に緑の三角のボタンで実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/cf26d99c-2bd6-5def-7886-1ad62c5d6054.png)


実行が終わるとモデルが作成されます。
右クリックで編集を選びます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/be150533-35c4-fda5-44bc-95f54bfe51f4.png)

予測変数の重要度をみるとTEMP、POWERが説明変数としての重要度が高いことがわかります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/c7d14b6c-add3-7571-f76c-1a051737a27c.png)

ビューアータブにうつりを、「度数情報を表とグラフで表示」のアイコンと「左から右」のアイコンをクリックして決定木を表示します。
TEMPが259度未満だと202のエラーと判定されることがわかります。また、TEMPが259度以上でもPOWERが857未満なら101のエラーと判定されることがわかります。
このようにどういう条件でどうなるかがすべて示されるのが決定木モデルの特徴です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/79ebdb42-4673-bb28-579a-afd0209d59fa.png)


C4. モデルの評価
ストリーム名をクリックし、キャンバスに戻ります。
出力タブの一覧から精度分析を選び、キャンバスにドラッグアンドドロップします。
そして、モデルのナゲットノード（黄色）と接続し、実行します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/9e766503-6fbb-6361-03ae-af1c8c447671.png)


作成したモデルの精度は99.33%であることがわかります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/b0e9b2a5-15b3-5eb3-be6a-76a3349c3aaf.png)



##D. スコアリング

良いモデルができたので新しいセンサーデータをこのモデルにかけて将来のエラーを判定してみます。

D1. 新しいセンサーデータの入っているCond3n_e111.csvをファイルから選び、キャンバスに置きます。
そして右クリックしプレビューで中身を確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/07a28ec2-19dc-fbdc-6a1b-98a048801d69.png)

ここにはERR_CD_5FUTUREの列はありません。
赤い×ボタンで閉じます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/fffaff71-c19e-0d79-c59c-3718d561919a.png)

POWERやTEMPから5期先のエラーを予測してみます。

D2. モデルナゲットを右クリックしてコピーします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/a0abe471-6faa-03d4-36c4-da24d722bbef.png)

キャンバスの何もないところで右クリックして、貼り付けします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/4df9943e-7ac2-ae35-d730-c8ffe812076e.png)

D3. 貼り付けたモデルナゲットにCond3n_e111.csvから接続します。
さらに出力タブからテーブルノードを選び、キャンバスにドラッグアンドドロップします。
そして、モデルナゲットノードと接続します。
それからテーブルノードを選択状態にして、黄色の五角形に緑の三角のボタンで実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/f6a6efa0-6f37-9b9f-484c-bea405f6097d.png)

 

D4. 新たに\$C-ERR_CD_5FUTUREと\$CC-ERR_CD_5FUTUREの列が追加されています。
\$C-ERR_CD_5FUTUREが予測結果です。\$CC-ERR_CD_5FUTUREがその確度を示しています。このデータの場合、4レコード目でPOWERやTEMPに大きな変化があったときに将来エラーコード202が起きる可能性が9割以上あると予測をしています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/ad311ad4-ab71-0727-3af1-6a2da5e8c4b2.png)