DSXLのModelビルダーで故障予知

#Data Science Experience Local(DSXL)のMachine LearningのModelビルダー（モデル作成ウィザード）を使って、故障予知モデルを作ってみます

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

###参照
Machine learning models - IBM Data Science Experience
https://datascience.ibm.com/docs/content/local/models.html?audience=local&context=analytics#create-a-model-with-the-model-builder

##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のModelビルダーを使って、電力や温度の変化などから5期先のエラーコードを予測するモデルを作成します。

C1. Modelsのタブを開き、Add ModelでModelビルダーを開始します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/bc2572b5-9ab5-3e4d-11d3-875bcd2b01ba.png)

C2. 任意の名前を付けてManual MethodでCreateします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/06e7782c-2044-f80c-2c45-5a7a71c9801d.png)

C3. 学習データとしてCond3n_e.csvを選択しNextをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/2f1ce24f-b01c-c6e9-3de5-d8e6d79b5c8c.png)

C4. 学習データを事前加工します。カテゴリーデータのIndex化などはAutomatic Data Prepatrationの機能で自動で行われます。ここではそのままNextをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/142a2fa9-ebe7-0cd5-2a58-4b1eb59fe5e6.png)

C5. 予測モデルを定義します。
まず、予測対象列である5期先のエラーである「ERR_CD_5FUTURE」を選択します。
次に 「ERR_CD_5FUTURE」は0,101,202,303などの複数の値を持っているため、Multiclass Classificationを選択します。
またValidation Splitは交差検証のためのデータの分割割合を示しています。ここでは60%を学習に使い、20%をテストに使う設定になっています。

そして、Add Estimatorをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/612ce2a5-14fb-8e21-de34-c86e7d89a463.png)

C6. ここでは選択可能なモデル作成アルゴリズムうち、Decision TreeとRandom Forrestを選んでみます（Naive Bayesはマイナス値がある場合には動きません）。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/ed6f5264-0dda-43ce-eabc-abf0ff90237d.png)


C7. 準備が整ったのでNextをクリックし、モデリングを開始します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/2aefb72b-230a-e45c-2313-681a5e4dbd07.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/a134165b-9e47-9a28-8876-7c9a1c07b105.png)

C8. モデルが完成し、テストデータをつかった評価も行われました。Random Forrestのほうが若干良いモデルであったためこれを保存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/3381cfe0-8308-d9c0-f563-4e5a60fb41b2.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/e0437052-d0aa-b8cc-efa7-68df9892d6c4.png)

C9. モデルが完成しました。
wml-sparkml-model-1.1とDSXLのMachine Learning APIで作られたAPIであることを示しています。
モデルをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/42de37c8-c9b8-9597-e922-03ec4a4944de.png)


##D. テスト
D1. テストしてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/ff487204-707e-9a24-1012-071879ba2d87.png)

D1. 以下のようなテストデータを入力してSubmitします。
M_CD: 111
UP_TIIME: 66
POWER: 1102
TEMP: 254
POWER_DIFF: 31
TEMP_DIFF: 21
POWER_5MAVG: 10
TEMP_5MAVG: 7

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/9ce47daa-eb42-de60-4cbb-4b9c9473343c.png)

202のエラーが5期先に発生する可能性が80.2％と予測されました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/474b1b07-13cc-4d3c-bb83-efc4f2cd63cc.png)

このように電力や温度の状態で将来のエラー発生を予測するモデルを作成することができました。このモデルに対してREST APIでアクセスすることで故障を予知するアプリケーションを作成することが可能です。