DSXLのSPSS Modelerで故障予知

#Data Science Experience Local(DSXL)のSPSS Modeler Flowsの機能を使って、故障予知モデルを作ってみます
SPSS Modeler Flowsの機能はオンプレのデスクトップソフトウェアのSPSS Modelerの機能をDSXL上で利用可能にした機能です。2018年1月のDSXL1.1.3ではBeta版になりますが、わかりやすい分析が可能ですので紹介します。

###環境
DSXL 1.1.3.00 (20180122_0943) x86_64

###参照
SPSS Modeler Flows add-on - IBM Data Science Experience
https://datascience.ibm.com/docs/content/local/canvas.html?audience=local&context=analytics

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. DSXLにログインしプロジェクトにインポートします。
プロジェクトリストを開き、NewProjectでプロジェクトを作ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/597713a5-0320-e06b-6408-b7f06a0f3200.png)
FromFileで先ほどダウンロードしたZIPファイルを指定し、Createします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/18722b77-55f0-007e-9d00-5788f9e8fd72.png)

##B.データの確認
B1. データを確認します
プロジェクトのAssetのDataSetsからCond3n_eというデータをPreviewします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/a2303e9c-fe4c-6aab-79c7-daf29faaf92b.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/098ca559-9dec-8303-11d6-c6c8eb6853c9.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/5066b156-7a83-54ee-839e-669a1d05075c.png)

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

C1. SPSS Modeler Flows(またはStreams)のタブを開き、Add flow(またはStreams)でFlow(またはStreams)を作成を開始します。FlowまたはSteamとは分析の処理フローを定義した設計図のようなものです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/105e0f5c-ee7a-d7d1-0511-978fa29681a8.png)

C2. Blankを選択し、任意の名前を付けてCreateします。
なお、ここで「From File」を選択するとオンプレ版のSPSS Modelerでつくった.strファイルを読み込むこともできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/b1bff16c-8f31-6062-c94a-c7f29fa7a48a.png)


C3. 学習データを選択します。
Cond3n_e.csvをドラッグアンドドロップで中央のキャンバスという領域に置きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/95027a2d-e52b-e42e-44dd-55aba683e41a.png)


C4. データの中身を確認します。
Cond3n_e.csvのノードを選び右クリックでView Dataを選びます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/29505dda-c62f-1c31-457a-7b6024eeb732.png)

データが表示されました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/197c9dee-db0e-328d-5184-73dd193443c2.png)

Stream名をクリックして、キャンバスに戻ります。

C5. データの型定義
Nodesの一覧からField OperationsのTypeを選び、キャンバスにドラッグアンドドロップします。
そして、Cond3n_e.csvのノードと接続します。
次に右クリックをしてプロパティを開きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/3864e92f-c5af-d738-8470-0d2ca1f6cffd.png)

Settingsを開き、Configure Typesをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/9e7ac5c1-546c-928b-2c3c-8d154a58d955.png)

Add Columnsで列のデータ型を定義します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/44e2c9f7-0f16-0939-231c-03a146a43f52.png)


全ての列を選択し、OKをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/f2d6c99a-a97a-eb96-8c2e-9786d55c3e68.png)

一番上の二つのM_CDとUP_TIMEのRoleをNoneに設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/bbf8ed5c-0996-de81-0cfa-cf8ed33a5c8a.png)

一番下の列のERR_CD_5FUTUREのMeasureを「Categorical」、Roleを「Target」に設定します。TEMPやPOWERをつかって、ERR_CD_5FUTUREを予測するという設定になります。Read Valuesをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/a33a9364-b728-45dc-8df4-543af9ae6eda.png)

OKをクリックして閉じます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/120d4b99-b692-e6e0-eac8-b26595a4663e.png)


C6. データの検査
Nodesの一覧からOutputsのData Auditを選び、キャンバスにドラッグアンドドロップします。
そして、Typeノードと接続します。
次に右クリックをしてRunします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/f8be9f4c-6713-bf59-3233-d9ad2c968a97.png)


実行がおわったら、view outputsのパレットを開き、Data Audit of [7 fields]をダブルクリックして内容を確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/a5376b44-98ab-77d2-40a4-53ff2da70207.png)


各列の最大値、平均、外れ値の数などの情報を一覧で確認することができます。
確認をしたらストリーム名をクリックしてキャンバスに戻ります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/2fc8935a-1cde-ee41-b4d8-38a343004bd6.png)


C7. モデルの作成

Nodesの一覧からModelingのC5.0を選び、キャンバスにドラッグアンドドロップします。C5.0は予測分析のできる決定木アルゴリズムの一つです。
そして、Typeノードと接続します。
次に右クリックをしてRunします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/a1211054-1a5d-3f32-d7c8-7cda59ff5435.png)


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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/c587a2d6-a7d9-34eb-ceb3-8449185af2d9.png)

Predictor ImportanceをみるとTEMP、POWER_5MAVGが説明変数としての重要度が高いことがわかります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/e231a522-9db3-e25d-fbf8-c454e0caa833.png)

Tree DiagramをみるとTEMPが259度未満だと202のエラーと判定されることがわかります。また、TEMPが259度以上でもPOWERが857未満なら101のエラーと判定されることがわかります。
このようにどういう条件でどうなるかがすべて示されるのが決定木モデルの特徴です。Display labels on branchesにチェックをいれZoomを調整して参照してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/5f8d2972-5574-e32f-f546-cfde7810af42.png)

さらに202のノードにカーソルを合わせるとTEMPが259度未満の556件の全てが202のエラーであることがわかります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/1ce1be79-ac46-2cd2-ad0d-a6d49c3094a1.png)

C8. モデルの評価
ストリーム名をクリックし、キャンバスに戻ります。
Nodesの一覧からOutputsのAnalysisを選び、キャンバスにドラッグアンドドロップします。
そして、モデルのナゲットノード（黄色）と接続します。
次に右クリックをしてRunします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/6e3744eb-1c79-33bc-c5af-094a37abb6e2.png)

実行がおわったら、view outputsのパレットを開き、Analysis of [ERR_CD_5FUTURE]をダブルクリックして内容を確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/4063ee84-6ea3-1504-94cd-73e2243cc2e0.png)

作成したモデルの精度は99.33%であることがわかります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/996f00dd-b52c-82d4-25e1-2eb9cfcf7321.png)

##D. スコアリング

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

D1. 新しいセンサーデータの入っているCond3n_e111.csvをファイルから選び、キャンバスに置きます。
そしてView Dataで中身を確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/4b21f9ab-f5d8-c933-207c-688e2735757b.png)

ここにはERR_CD_5FUTUREの列はありません。POWERやTEMPから5期先のエラーを予測してみます。
ストリーム名をクリックして、キャンバスに戻ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/dea3f38a-6c11-fec2-3df2-a31c23cd537f.png)


D2. モデルナゲットを右クリックしてコピーします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/a09990de-326c-5e4b-2a86-eaaf081be303.png)

キャンバスの何もないところで右クリックして、Pasteします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/8030b177-2482-f579-fd78-b8331412d688.png)

D3. Cond3n_e111.csvから貼り付けたモデルナゲットに接続し、さらびNodesの一覧からOutputsのTableを選び、キャンバスにドラッグアンドドロップします。
そして、モデルナゲットノードと接続します。
次に右クリックをしてRunします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/349c5159-2cb5-0596-0f73-d6cc36f4a1ef.png)

実行がおわったら、view outputsのパレットを開き、Table(10 fields,5 records)をダブルクリックして内容を確認します。
 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/58c00264-8e94-f2fa-1829-e0dda9ad8169.png)

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

##おわりに
現在のベータ版ではSPSS内でのみしかスコアリングができませんが、近い将来、センサーデータをためたCSVからバッチでスコアリングしたり、REST APIでアプリから予測したりすることができるようになることが期待されます。