SPSS Modelerで時系列データをつかった故障分析①パターンの分類

SPSS Modelerで時系列データをつかった故障分析を行います。
以前公開した[SPSS Modelerで故障予知](https://qiita.com/kawada2017/items/0b04d5116bcc4b6ea9f6)では、あらかじめ時系列データを予測用に加工していました。今回はすこしレベルアップして以下の2本の記事に分けて、未加工の時系列のデータから故障分析をしてみたいと思います。
①試行錯誤をしながらデータ探索（本記事）
[②時系列データを加工しながら、故障予知](https://qiita.com/kawada2017/items/a7fa843e166dfa98ec73)

この記事は①を行っていきます。
ノードがどのパレットにあるかなどの説明は省きます。


### 稼働確認環境
Modeler 18.2.1
Windows 10 64bit

### 利用データと完成ストリーム
以下からダウンロードしてください。
https://github.com/hkwd/200414FailureAnalysisWithTimeSeries/archive/master.zip

データ：Cond4n_e.csv
完成ストリーム：05explore_machineerr.str

# データの読み込み
ドラッグアンドドロップでCond4n_e.csvをキャンバスに置き、「テーブル」ノードを接続し「実行」してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/94d86fa2-44c7-3eb5-5cac-3cd795b106c3.png)


以下のようなデータが表示されます。各列の意味は以下です。
M_CD: マシンコード
UP_TIIME: 起動時間
POWER: 電力
TEMP: 温度
ERR_CD: エラーコード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/684830a5-9010-9637-b3e6-9c78616f18d7.png)

M_CDとERR_CDが右寄せになっており数値データとして扱われていますが、これはコードなので文字型のデータであるべきです。

テーブルを赤い×ボタンで閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/88b49444-5ce6-8f11-bfda-72e6357331d7.png)


「Cond4n_e.csv」のノードをダブルクリックし、可変長インプットノードのプロパティを開き、「データ」のタブを開き、M_CDとERR_CDの「上書き」にチェックをつけ、「ストーレジ」を整数から文字型に変更します。変更ができたら「プレビュー」をクリックしてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/070126b0-9701-2021-e562-ce93b2bc0905.png)

M_CDとERR_CDが左寄せになりました。
プレビューは赤い×ボタンで閉じてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/dae8ef45-f9e4-76a6-f55d-ffb518156b5a.png)


「Cond4n_e.csv」のノードのプロパティは「OK」で閉じてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/98ad5019-3f88-bd90-8ffc-df714f5cb00f.png)

# データの探索
ここからはデータにどんな傾向があるかを確認してみます。
「Cond4n_e.csv」のノードに「データ型」ノードをつないで、ダブルクリックしてプロパティを開き、「値の読み込み」ボタンをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f65d526d-3542-20b9-eb4c-a1fdf487db31.png)

CSVのデータを読んで、尺度や値の範囲が認識されます。
ロールでERR_CDを「対象」として設定します。これは目的変数（ラベル）を設定しています。
設定が終わったら「OK」で閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/61f06120-e543-322f-c64d-b86a2a8311b3.png)

「データの検査」ノードを接続し、実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d19a97f0-66ef-edc3-fd3a-8fac7f327e45.png)

データの要約を表示してくれます。
カテゴリ数をみるとM_CDが70なので、70台のマシンのデータがあることがわかります、ERR_CDをみると4なので、エラーのパターンは4つあることがわかります。

次にERR_CDのグラフをダブルクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/83a443a6-a80d-9381-442c-9498c9f1532e.png)

エラーコード0が79％ですので、これが正常データだと推測できます。そして101,202,303のエラーがそれぞれ数パーセント発生していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/87270dfc-b9c4-454c-2512-3a204d643e92.png)

確認ができたら、赤い×ボタンで閉じてください。
以下の保存ダイアログは「いいえ」で閉じてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/318f86dc-e38a-483a-2b49-bd4ead22bd05.png)

データ検査ノードの結果に再度戻ります。
平均をみると電力が941ワットだったり、温度が254度だということがわかります。POWERのグラフをダブルクリックして拡大して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6a2dc622-ae85-5787-23f2-33697c618903.png)

電力が低いときに101が起きやすく、逆に高いときに202がおきていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c5ebcef9-03f6-fcfe-58f3-71880289d379.png)

確認ができたら、赤い×ボタンで閉じてください。
保存ダイアログは「いいえ」で閉じてください。

「欠損値検査」のタブに移ると各列の外れ値の数や欠損値の数を調べることができます。今回のデータには欠損値はありませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0be76016-7fa4-8bdf-a076-e340d54fd923.png)

確認ができたら、赤い×ボタンで閉じてください。

もう少しデータを探索してみます。
「散布図」ノードを接続して、ダブルクリックしてプロパティを開いてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a98825dc-9d8b-dcb2-61c2-4e6e8c96e96c.png)

以下のように設定をして実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c0b7b7cc-ed51-45b0-036f-3fa398dc7677.png)

エラーコードと電力と温度の関係がグラフ化されます。
これをみると101は電力が低いときにおこりやすく、202は電力も温度も高いときにおこっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fb0e636a-38e4-af41-5db4-6cf71033d24d.png)

確認ができたら、赤い×ボタンで閉じてください。
保存ダイアログは「いいえ」で閉じてください。

次に散布図をもう一つ接続して、ダブルクリックしてプロパティを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5d4229f6-8e56-e410-1a14-689914269145.png)



以下のように設定をして実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d92ea560-7a92-8438-8acc-23fc73aa5862.png)

エラーコード毎の経過時間と温度の関係がわかります。
202のエラーは時間経過とともに温度が上がっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/26759e28-9087-eb4f-9659-0fedf0b57251.png)

# モデルの作成
ここまでで電力や温度が高かったり低かったり、またその組み合わせによってエラーが起きそうであるることが分かりました。
ここでは機械学習のアルゴリズムをつかって、これらのエラーコードの発生分類を行ってみます。

「CHAID」という決定木のモデル作成ノードを「データ型」ノードと接続して、実行してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/55143f2c-d30a-e95e-3315-9fc0301f4490.png)

自動生成されたモデル「ERR_CD」をダブルクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0776b256-5630-60b9-bb9e-537d55e0ad3c.png)

予測変数の重要度が表示されています。
ERR_CDを分類するためにはTEMPが最も重要であることがわかります。
また、UP_TIMEやM_CDも次いで重要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/2c2865cc-8992-6504-3ddc-a6f8a5b44c5a.png)

次に「ビューアー」タブに移って、「度数情報を表とグラフで表示」をクリックしてください。
「CHAID」のアルゴリズムはこのようなツリーでモデルの情報を表現します。
これをみると101のエラーは全体では9%しか発生しませんが、TEMPが244度以下、かつUP_TIMEが69時間以上だと98％の確率で発生していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a5e99bf4-72c6-7d0c-1ef4-fd7adc8fefe3.png)


もう一つ別のルールを見てみます。
このルールではTEMPが251度から252度の間でMC_CDが284だと41％の確率で101が発生しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ee6b2b82-0ff4-bbe9-fe61-2bc654c2d305.png)

このように決定木では、人間がある程度理解できる形で分析ができます。
ですので、ルールの意味を考えてみることができます。

例えば、M_CDはマシンのIDであり、それ自身は本来的には意味はないはずで、予測には使ってはいけないかもしれません。一方で問題の発生しやすいマシンのIDがあるとしたら、その設置状況の気温などに別の要因の影響を受けているかもしれません。そういう場合はマシンの設置場所の気温を説明変数に加えることを検討すべきかもしれません。
また、もしかするとこのデータは、エラーが発生する40時間前から切り出されたデータであって、実際にはもっと長い時間運用されているのかもしれません。その場合UP_TIMEも使うべきではないかもしれません。

このような事情はデータからだけではわからないこともあります。業務の担当者と話をして、本当にこれらのデータに意味があるのか、それとも使うべきでないのかを業務の観点から判断してもらう必要があります。
SPSS ModelerではこのようにわかりやすいGUIで分析の結果を表示するので、業務担当者にも直感的に理解してもらいやすいことが特徴です。

では、ここではM_CDとUP_TIMEはエラーコードの分類には使うべきではないという想定でモデルを作り直してみます。
黒い×ボタンを押してモデルの表示を閉じてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bacd53bc-c8a8-c3c7-7aa6-a781db9fded1.png)

データ型ノードをダブルクリックして、プロパティを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bedff202-0634-e7cf-15fb-bec8dc68f7dd.png)

「M_CD」と「UP_TIME」のロールを「なし」に設定します。これはM_CDとUP_TIMEは分類の説明変数に使わないという意味になります。
「OK」をクリックして閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3ec52c9d-d5cc-e923-3cb4-709636c3ce63.png)

モデルを作成しなおします。
「CHAID」ノードで右クリックして実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e2bfc16e-b2e0-5d22-630d-848952bd2fc2.png)

再作成された「ERR_CD」のモデルナゲットをダブルクリックして開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/70d2e937-9866-e627-118e-2dd21088fadd.png)

M_CDやUP_TIMEを用いずにTEMPとPOWERだけでモデルが作成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/56f45754-6d2f-89e1-4b8d-e019dc6425f1.png)


次に「ビューアー」タブに移って、「度数情報を表とグラフで表示」をクリックしてください。
TEMPが244度以下、かつPOWERが879ワット以下だと93%の確率で101のエラーが発生しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/654493db-0b14-25d6-73e7-fc395293ad28.png)


このように非常に簡単にモデルを作成しなおせることで、いろいろな試行錯誤を行うことができます。この程度の操作であれば、業務担当者の目の前で一緒にその変化を確認してもらうこともできます。

なお、現場の業務担当者の方は温度と電力が低いときに101のエラーが起きやすいことが知っているかもしれません。しかしモデルをつくることによって、具体的に何度以下、何ワット以下の時に何パーセント起きているということがわかります。既存の業務知識を定量化することができるのです。

# 次回故障の予知に向けて
ここまで時系列データをつかってデータを探索し、エラーコードの分類モデルを作り、どういうときにどのエラーが発生するのかを調査してみました。
しかし故障の”予知”をしようとするときに、このモデルは実はあまり役に立ちません。なぜでしょうか？

データを見て考えてみましょう。
レコード設定タブから条件抽出ノードを「ERR_CD」のモデルナゲットに接続して、ダブルクリックしてプロパティを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a4d13115-b2b1-f9c5-dd69-7fa27093dca0.png)

エラーが発生しているマシンのM_CD = '104'の条件を設定しOKで閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9ee6ac74-0fc5-6e42-cc99-63897dc9cbb8.png)

「テーブル」ノードを接続し、実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/80ef9be8-52b4-2023-1b32-9d1b7d3ed34d.png)



このデータをみて、なぜこのモデルが故障の”予知”にはあまり役に立たないかを考えてみてください。
$R-ERR_CDがモデルによって判別されたエラーコードを示しています。ヒントは以下のような予測と実績の比較をしてみるとわかってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/571d27fc-199b-8103-417f-da679561c451.png)

「なぜか」の答えは、[次回の故障予知の回](https://qiita.com/kawada2017/items/a7fa843e166dfa98ec73)にお話しします。


#### 参考：SPSS Modelerによる製造系データの分析ハンズオン・コンテンツへのリンク - Qiita 

https://qiita.com/kawada2017/items/383a8d1059d008ccfad0