故障予測をAutoAIでやってみた

# 記事の概要
本記事ではCP4DaaSを用いて、機械の予知保全モデルを作成してみる。
SPSS Modelerでアイコンぽちぽちして、データの加工を実施したあとに、機械学習のアルゴリズムの選定など難しい知識を必要としない、AutoAIを使ってみる。

## データセットについて
データは、[UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/index.php)から[AI4I 2020 Predictive Maintenance Dataset Data Set](https://archive.ics.uci.edu/ml/datasets/AI4I+2020+Predictive+Maintenance+Dataset)を用いる。
データは、故障のタイプにひもづく特性を含む過去の時系列データセットである。
|列名  |データタイプ  |説明  |
|---|---|---|
|UID  |SMALLINT  |レコードID  |
|PRODUCT_ID  |VARCHAR(6)  |シリアル番号：製品の品質を表すL(低),M(中),H(高)の文字と製品固有のシリアル番号  |
|TYPE  |VARCHAR(1)  |製品タイプ  |
|AIR_TEMP_K  |DECIMAL(5.1)  |室温(華氏)  |
|PROC_TEMP_K  |DECIMAL(5.1)  |工程温度(華氏)  |
|RPM  |SMALLINT  |回転速度  |
|TORQUE  |DECIMAL(4.1)  |トルク  |
|TOOL_MIN  |SMALLINT  |工具摩耗量  |
|MACHINE_FAIL  |SMALLINT  |機器故障フラグ（1は故障、0は故障なし）  |
|TWF  |SMALLINT  |工具摩耗故障（故障原因が工具摩耗故障の場合に1、それ以外は0）  |
|HDF  |SMALLINT  |放熱不良（故障原因が放熱不良の場合に1、それ以外は0）   |
|PWF  |SMALLINT  |電力故障（故障原因が電力故障の場合に1、それ以外は0）   |
|OSF  |SMALLINT  |過ひずみ故障（故障原因が過ひずみ故障の場合に1、それ以外は0）   |
|RNF  |SMALLINT  |ランダム故障（故障原因がランダム故障の場合に1、それ以外は0）   |


## 前提
1. プラットフォーム接続したDb2 on Cloudに「MAINTENANCE_INFO」として、[AI4I 2020 Predictive Maintenance Dataset Data Set](https://archive.ics.uci.edu/ml/datasets/AI4I+2020+Predictive+Maintenance+Dataset)を入れておく。
2. データを探す時に見つけやすいように、データ・カタログには、「MAINTENANCE_INFO」は「生産設備保守情報」、それ以外の列名には、上記の説明を紐づけておく。
この前、メタデータの自動付与をしてみたけど、あれは便利だったな。次回記載しようかな。
3. 分析プロジェクトとして、「qiitaデモ」を作成
4. デプロイメントに「space2」を作成
# 本編
とある工場の現場。。。
（ざわざわ）
管理職A：
今日また機械故障したらしいよ。また納期遅れるじゃん。。。
しかも、どこが故障したのか原因探るのも時間かかるし。。。ったく、最近は経費節約で、人も時間も足りてないのに！故障すなよ💢

しゃーない、ちょっと最近聞いたところによると、データ分析プラットフォームを導入したことで、AIの知識がなくても作れるらしいし、それでまずは、故障の原因分析、試してみるか。

けどなー、うちの会社いろんなDBを使用してて、どこに何のデータがあるか、よくわからん。この前もデータくれって、IT部門に連絡して、作ってもらったりしてると、めっちゃ時間かかるんよ。その時間めっちゃ無駄だし、めんどくさいわ。
すぐに、過去の保守情報データ欲しいんだけどな〜（ぽちぽち、とCP4DaaSの画面を触ってみる）

### データカタログ
1. CP4DaaSの上の検索窓でぐぐると、欲しいデータ出てくるじゃん。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/3211c0ba-3aa9-a82c-3d12-30a35f9d23c7.png)
2. ふむふむ、「データの概要」では、列名の名前が何を意味しているのか見れるし、「資産」では、中身のデータも観れるのね。このデータ使えそうだから分析してみるか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/6639c357-b6a6-148a-47f7-1e7aa32270bf.png)
データ分析できるように、ここからcsvファイルで吐き出して、その後に、、、
おっと、そんなこと必要ないのか！？
3.「プロジェクトに追加」を押せば、簡単に追加して分析できるのね！いいじゃん。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/a9fb3b37-0cd6-8c2d-1b97-c48f99af8298.png)
### SPSS
4.分析プロジェクトに移動してみると、ちゃんと入ってるね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/7928e2eb-8b72-0fbf-7650-47d3847d244e.png)
5.「新規資産」にスキルレベルや用途に応じたツール群が入っているのね。今回は、AutoAIを使いたいから、そのためにSPSS Modelerでデータ加工しますか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/0b134ec3-181f-38c1-991e-3ccdc6a6566b.png)
6. 左側のアイコン使って、感覚的に繋げていけばいいのね。まずは、データ資産を選択して、その後今回対象とする「MAINTENANCE_INFO」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/8acdf1c4-e191-b6e5-67b8-2204d6549100.png)
7. 機械学習をするために、故障名が入っている列を作る必要があるのか。フィールド作成アイコンを使用して、新しく列を作って、その後必要無くなった列をフィルターで取り除けば、モデルを作るためのデータが作れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/d5206237-b1e6-45bb-ca70-a36e666c55c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/27f84a0a-339a-5f49-e176-c9b9087b5b87.png)
8. あとはデータを吐き出して終わりだね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/7a8a6f9d-b3a8-b4e5-22cd-04a0f26f85f5.png)
### AutoAI
9. 「新規作成」から「AutoAI」を選択し、詳細の構成を選択していく。ふむふむ、予測する内容を選定するだけで勝手に最適であろうアルゴリズムとかを試してくれるのか。いいね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/f4a1fb61-bdde-2812-c4c3-46a803702ffd.png)
10. たった4分でモデルが作れたみたい。しかもいくつか試してくれて、その中で「正解率」が高いモデルをランク付してくれている！モデルの評価や適合率とかも色々みれるみたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/43d33cd5-ebd4-c698-cd64-054382e76254.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/ee8aee4d-d624-bdf0-86da-f5f81abb6545.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/178d2b01-70a9-6cf8-9d8b-27d0dc48de72.png)
といったものの、モデル評価とかみても、よくわからんし、要はこれでどれだけ故障を予測できているのかが大事だよね。
11. デプロイメントスペースに作成したモデルをデプロイして試してみるか。
以下のFAIL_TYPEを抜いたデータを入れてちゃんと予測できているのか、確かめるか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/f497c666-b1c1-a659-c6ea-3119b99beb16.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/8a1cd995-b5e1-c5ca-b244-f272b1f5b5ff.png)
んー、信頼度が高い「HDF」、「PWF」、「NO_FAIL」は予測できたけど、それ以外がな〜。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/4f75c9d9-1ba9-b072-b8c9-915307818161.png)
よくよくデータを振り返ってみてみると、混合行列の「TWF」と「RNF」のデータがないじゃん。データ量が全体に対して、0.5%以下だ！もっと、データ量を増やす、もしくは、教示なし学習の異常検知とかがいいのかな。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505349/18af4033-46f3-dd35-668b-4c631a2a6397.png)
でも、そんなに時間かけずに、ぱぱっとモデルの作成はできたな〜。しかも難しい作業はほぼなく、慣れたらもっと早くできそう。
あとは、教示なし学習の異常検知モデルや、モデルの特徴量から相関関係を明らかにしても面白いかもね。
あとは、故障箇所を明らかにするのも大事だけど、工場の機械の時系列データから、故障時期も予測できたら、もっといいな。今度分析してみよ。