#はじめに
PTCが提供しているThingWorxの無料体験版であるThingWorx Developer Portalを使用して、予備知識は抜きにして機械学習を体験し、機械学習が使われる分野やThingWorxがどう関係するのかを肌で感じてみましょうという記事です。
#前提と準備
ステップに入る前に必要な準備と前提条件を記載しておきます。
###使用環境:
Windows 10 PC、ブラウザにGoogle Chromeを使用しています。
###対象バージョン:
ThingWorx 8.4.1をベースとしておりますが、無料体験版でご利用いただけるThingWorx 8.4をとインターフェースに差異はありません。今後リリースされるものを含む異なるバージョンを利用する場合は手順や機能の互換が取れない可能性があります。
###PTCアカウント登録:
環境を手に入れて始める為にはPTCのポータルサイトへアカウント登録を完了している必要があります。ThingWorxの開発者ポータルサイトにアカウントをつくり、試用版サーバーインスタンスを立ち上げるを参考にアカウント登録を完了させて下さい。
###ThingWorx環境のセットアップ:
ダウンロードリンクにアクセスし、無料体験版の2つの環境をダウンロード、セットアップが完了している必要があります。リンクは英語版と日本語版がありますが、2019年4月時点では下記の通りダウンロード可能なものに差異があるようです。最新版が利用出来る英語版を利用される事を推奨します。
- **ThingWorx Foundation:**日本語版はバージョン8.3に対し、英語版はバージョン8.4をダウンロード可能です。
- ThingWorx Analytics Server:日本語版はバージョン8.3に対し、英語版はバージョン8.4をダウンロード可能です。またその中でもThingWorx Analytics ServerとThingWorx Platform Analyticsのいずれから選択出来ます。今回はThingWorx Foundation以外にツールを必要としないThingWorx Analytics Serverを選択しています。
ThingWorx-Analytics-Server-Windows-8-4.zipをダウンロードするとThingWorxAnalyticsInstallerフォルダが解凍され、以下のようなファイルが含まれています。
EXEを実行するとウィザードが現れるので以下の通り進めます。
I accept the agreementを選択してNextをクリック。
全てのコンポーネントに✔がある事を確認してNextをクリック。
任意の場所をインストール先に指定してNextをクリック。今回はデフォルトで指定されていたC:\Program Files (x86)\ThingWorxAnalyticsを指定します。
ThingWorx IP Address or Host NameにThingWorxのサーバアドレスを入力します。localhostの場合でもアドレス127.0.0.1を設定する必要があるので注意が必要です。ThingWorx PortにThingWorxの接続ポート番号を入力します。ThingWorx AppKeyに予めThingWorxで作成した任意のAppKeyを入力します。Analytics Server Thing NameにThingWorxで表示するAnlayticsサーバ名を入力する。デフォルトは**"コンピュータ名"-AnalyticsServerが設定されています。今回はMylaptop-AnalyticsServerに名前を変更します。今回はトライアルでSSLを使用しないのでUse SSL?はチェックをオフにします。全ての情報を入力しNext**をクリックします。
ThingWorxのAppKeyと照合が成功するとサマリが表示されるのでNextをクリック。ここではバージョン整合を取る為の厳格なチェックが行われているようです。ThingWorx FoundationとThingWorx Analytics Serverのバージョンはマイナーバージョンも含めて一致させておく必要があります。もし互いに異なるバージョンをインストールしようとした場合はこのウィザードでエラーになりインストールが進める事が出来ません。
最後にThingWorx Analytics Serverが正しくインストールされている事を確認する為にThingWorxのブラウザ画面を開きます。図の通り新しくANALYTICS MANAGERが出現していれば成功です。
###対象のチュートリアル:
Build a Predictive Analytics Modelのステップを進めます。基本的に同じステップを辿りますが、この投稿では注意点や補足事項を加筆してあります。
機械学習の体験を始めるにあたり、架空の企業を取り上げたシナリオを設定しています。
MotorCo社はモーターの製造、販売及びサービスを提供している企業です。MotorCoは最近新しいモーターを開発しプロトタイプフェーズまで進めています。そんな中、モーターの重要な可動部分に注入されるグリースが少なくなった場合、それが適切に充填されていないとモーターが致命的な不具合を起こす恐れがあることに気付きました。この事態を未然に防ぐ為、MotorCoはモーターに振動を記録するセンサーを搭載する事にしました。このセンサーが出力する特定の周波数と低グリース状態の関連を調べ、センサー情報をきっかけに故障が発生する前に必要なメンテナンスを施行出来るようにする事を課題としています。またプロトタイプデータを走査し最終的に課題解決する為にThingWorx Analyticsを活用する事にしました。
####チャレンジ
この活動を進めるにあたり予め以下の条件が設けられ、この条件下で課題を解決する必要があります。
- プロトタイプには既知の故障発生時に移行するモードがありますが、現時点ではいつ故障が発生するか予測することができません。
- この故障モードが解除されるまではプロトタイプは完全操業に移行する事が出来ません。
- 接続されたデータを監視できる状態にありますが、そのデータをどう利用するかアイデアがありません。
- 物理センサーを更に追加しようとすると製品全体のコストとして上乗せされてしまうので許容されません。
※最後に結論として触れますが、このシナリオではセンサー1とセンサー2が登場します。これからセンサーと不具合を引き起こす低グリース状態との関連の有無を調べていきますが、関連が高いセンサーだけを残しそれ以外のセンサーを取り外す事で不要なコストを抑えるというビジネス判断が目的のようです。
ThingWorx ComposerのAnalyticsタブで ANALYTICS BUILDER > Settingsをクリックします。
Analytics Serverフィールドでインストール時に設定したサーバー名を検索します。Mylaptop-AnalyticsServerがヒットするはずなのでそれを選択します。
SSLを使用しないのでチェックボックスをオフにします。Verify Configurationをクリックします。
Verificationが成功するとAnalytics Server Versionが表示されるのでそれを確認しSaveをクリックします。保存されるとAnalytics Server ConfigurationがSavedに変化されればOKです。
ThingWorx Analyticsが使うデータをアップロードします。analytics_vibration.zipをクリックしPCへダウンロードして下さい。ファイルを解凍するとvibration_data_and_header.csv及びvibration_metadata.jsonを取得出来ます。
アップロードしたデータを見ていきます。
データにはヘッダがありそれぞれ以下を示しているようです。
- s1-fb1:センサー1 or 2における周波数帯 1 - 5を示す。
- low_greese:低グリース状態の有無を示す。
ANALYTICS BUILDER > DATAをクリックします。
Datasets下のNew...をクリックするとNew Datasetポップアップが開きます。
Dataset Name (required)にvibration_dataset
を入力します。File Containing Dataset Data (CSV format):セクション下のChoose Fileをクリックし、vibration_data_and_header.csvを検索して選択します。File Containing Dataset Field Configuration (JSON format):セクション下のChoose Fileをクリックしvibration_metadata.jsonを検索して選択します。
Submitをクリックします。
アップロードが成功するとDatasetsの一覧にvibration_datasetが表示されます。
このセクションではデータセットのうち、設定した目標に統計的に最も相関の高い単一のデータを検索する**"シグナル"**を作成します。但し必ずしもそれが設定したゴールそのものを示すものではなく、データが期待する目標と相関していることを意味します。
ANALYTICS BUILDER > Signalsをクリックします。
上部にある**New...**をクリックします。New Signalsポップアップが開きます。
Signal Nameフィールドにvibration_signal
と入力します。Data from Existing Datasetの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。Filter (required)フィールドでall_dataを設定したままにします。Excluded Fields from Signalフィールドをデフォルトの空白の状態にしておきます。
Submitをクリックします。
シグナルの状態がCOMPLETEDに変更されるまで30秒間程度待ちます。結果が下部に表示されます。
結果を見てみます。統計的に低グリースの状態と相関が高い単一データが順にリストされます。s1_fb1~s1_fb5が上位にある通り、センサー1の5つの周波数帯が低グリースの状態と最も相関していることがわかります。またs2_fb1~s2_fb4が示すセンサー2の内、周波数帯1と4だけが関連しており2、3、5は殆ど関連性が無い事がわかります。
シグナルのセクションではゴールと相関の高い単一のデータを検索しました。このセクションではゴールと相関が高いその単一データの**"組み合わせ"である"プロファイル"**を作成します。
ANALYTICS BUILDER > Profilesをクリックします。
上部にある**New...**をクリックします。New Profileポップアップが開きます。
Profile Nameフィールドにvibration_profile
と入力します。Data from Existing Datasetの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。Filter (required)フィールドでall_dataを設定したままにします。Excluded Features from Profileフィールドをデフォルトの空白の状態にしておきます。
Submitをクリックします。
シグナルの状態がCOMPLETEDに変更されるまで30秒間程度待ちます。結果が下部に表示されます。
結果を見てみます。統計的に有効と考えられる複数のプロファイル(データの組み合わせ)がリストされていますが、はじめの3つのプロファイルだけが総レコード数の内かなりの割合を占めており、後半のプロファイルの大部分は無視することができそうです。
相関性が高そうな最初のプロファイルの中にはセンサー1とセンサー2の両方の周波数帯が表示されます。しかしシグナルの結果よりセンサー1が高い相関性を持っている事を考慮するとセンサ1が依然として全体で最も重要であることを示していそうです。つまりセンサー1はそれ自体でも組み合わせでも統計的に有益でありセンサー2は統計に不要という予測が立ちます。(一見センサー2は重要に見えるようでもそれはセンサー1との組み合わせの場合のみ該当する)
これまで走査したデータに基づいて、将来発生する可能性の高い事象を予測する**"モデル"を作成します。モデルはそれ自体が一定量のデータを保持するわけではなくデータに対して実行されます。またモデルを取り扱うにあたり最低限必要な予備知識として、一般的に機械学習で用いられる手法の一つであるROC曲線やAUC**について説明します。この2つは技術ブログや文献で沢山の情報がありますが、ここではThingWorxの利用で最低限必要な知識を操作と共に説明していきます。
###モデルの作成
ANALYTICS BUILDER > Modelsをクリックします。
上部にある**New...**をクリックします。New Predictive Modelポップアップが開きます。
Model Nameフィールドにvibration_model
と入力します。Data Selectionの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。Filter (required)フィールドでall_dataを設定したままにします。Excluded Fields from Modelフィールドをデフォルトの空白の状態にしておきます。
Submitをクリックします。
モデルの状態がCOMPLETEDに変更されるまで約60秒間程度待ちます。
###ROC曲線・AUCの理解とモデルの確認####
入力データに対してYES or NOとして解決できるような2値問題を考える場合、実際の正解と予測の組み合わせである4つに分ける事ができます。
正解 (True/False) | 予測 (Positive/Negative) | 分類 |
---|---|---|
YES | YES | True Positive (TP) |
YES | NO | True Negative (TN) |
NO | YES | False Positive (FP) |
NO | NO | True Negative (TN) |
"正解がYESであったもののうちYESと予測できた割合"をTrue Positive Ratioとし、以下の式で表現します。
TPR(True Positive Ratio)=TP/(TP+FN)
また"正解がNoであったもののうちYesと予測してしまった割合"をFalse Positive Ratioとし、以下の式で表現します。
FPR(False Positive Ratio)=FP/(FP+TN)
TPRが出来るだけ大きいものが良く、FPRが出来るだけ小さい方が良い分類という事がわかります。また割合なので0<=TPR, FPR<=1です。
実は前のステップで作成したモデルもこの2値分類問題を扱っています。センサーと周波数帯のデータに対して低グリース状態であるものを1、そうではないものを0として扱います。ROC曲線(Receiver Operation Characteristic)はTPRを横軸、FPRを縦軸としてグラフです。ThingWorxでそれを確認する事が出来ます。完成したモデルが選択されている状態でView...をクリックするとModel Informationページが開きます。
低グリース状態と判定する基準(閾値)を変えてプロットを取り描画したROC曲線です。またROC曲線とX軸、Y軸で囲まれた部分、つまりROC曲線から右半分の面積を**AUC(Area under an RoC curve)**と呼びます。理想的な分類はTPRが100%かつFPRが0%であり、AUCの面積が出来るだけ大きいものほど良いモデルと言えます。
?をクリックすると用語の詳細を確認する事が出来ます。
左上のConfusion Matrixタブをクリックすると、正しい予測であるTrue PositiveとFalse Negativeの総数と、正しくない予測であるFalse PositiveとTrue Negativeの比較を確認出来、前者が後者よりも高い精度の高い予測モデルである事がわかります。
同様に**?**をクリックすると用語の詳細を確認する事が出来ます。
プロファイルのステップより、センサー2がゴールを達成する為に不要である可能性がわかっています。作成したもモデルからセンサー2の要素を取り除く事でより精度の高い予測モデルを作成出来る可能性があるので、その比較を行います。
ANALYTICS BUILDER > Modelsをクリックします。
**New...**をクリックします。Model Name (required)フィールドにvibration_model_s1_only
と入力します。Data Selectionの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。
Excluded Fields from Model:の右横にあるExclude Fieldsをクリックします。**Exclude these Fields from this Model:**ポップアップが開きます。
s2_fb1をクリックしセンサー2の最初の周波数帯を選択します。シフトキーを押しながらs2_fb5をクリックし、センサー2全ての周波数を選択します。
全てのセンサー2の値が選択されている状態で中央の**Add >**ボタンをクリックします。
左下のSelectをクリックしポップアップを閉じます。
Submitをクリックします。
モデルの状態がCOMPLETEDに変更されるまで約60秒間程度待ちます。
vibration_model_s1_onlyが選択された状態で**View...**をクリックします。
ROC曲線を確認する事ができ、センサー2を含むオリジナルと同等の結果が得られました。同様に、Confusion Matrixの結果より正しい予測と正しくない予測の比率も同等の結果が得られました。
このモデルの結果より、センサーは1つでも2つでも低グリース状態を凡そ同じ制度で検出する事が出来るようです。1つのセンサと予測モデルを活用する事で、低グリース状態を正確に検出し不具合発生前にメンテナンスすることができれば、物理センサーのコストを抑えながらモーターの安全性や品質を上げるビジネス価値の創造に役立ちそうです。