Help us understand the problem. What is going on with this article?

ThingWorxを使って割と手軽に機械学習を体験してみる

More than 1 year has passed since last update.

はじめに

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 ServerThingWorx Platform Analyticsのいずれから選択出来ます。今回はThingWorx Foundation以外にツールを必要としないThingWorx Analytics Serverを選択しています。

ThingWorx-Analytics-Server-Windows-8-4.zipをダウンロードするとThingWorxAnalyticsInstallerフォルダが解凍され、以下のようなファイルが含まれています。
download.png

EXEを実行するとウィザードが現れるので以下の通り進めます。

Nextをクリック。
wizard1.png

I accept the agreementを選択してNextをクリック。
wizard2.png

全てのコンポーネントに✔がある事を確認してNextをクリック。
wizard3.png

任意の場所をインストール先に指定してNextをクリック。今回はデフォルトで指定されていたC:\Program Files (x86)\ThingWorxAnalyticsを指定します。
wizard4.png

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をクリックします。
wizard5.png

ThingWorxのAppKeyと照合が成功するとサマリが表示されるのでNextをクリック。ここではバージョン整合を取る為の厳格なチェックが行われているようです。ThingWorx FoundationとThingWorx Analytics Serverのバージョンはマイナーバージョンも含めて一致させておく必要があります。もし互いに異なるバージョンをインストールしようとした場合はこのウィザードでエラーになりインストールが進める事が出来ません。
wizard6.png

Nextをクリック。
wizard7.png

インストーラが走るので完了するまで数分程度待ちます。
wizard8.png

完了すると成功の画面に遷移するのでFinishをクリック。
wizard9.png

最後にThingWorx Analytics Serverが正しくインストールされている事を確認する為にThingWorxのブラウザ画面を開きます。図の通り新しくANALYTICS MANAGERが出現していれば成功です。

analytics manager.png

対象のチュートリアル:

Build a Predictive Analytics Modelのステップを進めます。基本的に同じステップを辿りますが、この投稿では注意点や補足事項を加筆してあります。

ステップ1:シナリオ

機械学習の体験を始めるにあたり、架空の企業を取り上げたシナリオを設定しています。

MotorCo社はモーターの製造、販売及びサービスを提供している企業です。MotorCoは最近新しいモーターを開発しプロトタイプフェーズまで進めています。そんな中、モーターの重要な可動部分に注入されるグリースが少なくなった場合、それが適切に充填されていないとモーターが致命的な不具合を起こす恐れがあることに気付きました。この事態を未然に防ぐ為、MotorCoはモーターに振動を記録するセンサーを搭載する事にしました。このセンサーが出力する特定の周波数と低グリース状態の関連を調べ、センサー情報をきっかけに故障が発生する前に必要なメンテナンスを施行出来るようにする事を課題としています。またプロトタイプデータを走査し最終的に課題解決する為にThingWorx Analyticsを活用する事にしました。

チャレンジ

この活動を進めるにあたり予め以下の条件が設けられ、この条件下で課題を解決する必要があります。

  • プロトタイプには既知の故障発生時に移行するモードがありますが、現時点ではいつ故障が発生するか予測することができません。
  • この故障モードが解除されるまではプロトタイプは完全操業に移行する事が出来ません。
  • 接続されたデータを監視できる状態にありますが、そのデータをどう利用するかアイデアがありません。
  • 物理センサーを更に追加しようとすると製品全体のコストとして上乗せされてしまうので許容されません。

※最後に結論として触れますが、このシナリオではセンサー1とセンサー2が登場します。これからセンサーと不具合を引き起こす低グリース状態との関連の有無を調べていきますが、関連が高いセンサーだけを残しそれ以外のセンサーを取り外す事で不要なコストを抑えるというビジネス判断が目的のようです。

ステップ2:準備

ThingWorx ComposerのAnalyticsタブで ANALYTICS BUILDER > Settingsをクリックします。

image.png

Analytics Serverフィールドでインストール時に設定したサーバー名を検索します。Mylaptop-AnalyticsServerがヒットするはずなのでそれを選択します。

setting1.png

SSLを使用しないのでチェックボックスをオフにします。Verify Configurationをクリックします。

setting2.png

Verificationが成功するとAnalytics Server Versionが表示されるのでそれを確認しSaveをクリックします。保存されるとAnalytics Server ConfigurationがSavedに変化されればOKです。

ステップ3:データをアップロードする

ThingWorx Analyticsが使うデータをアップロードします。analytics_vibration.zipをクリックしPCへダウンロードして下さい。ファイルを解凍するとvibration_data_and_header.csv及びvibration_metadata.jsonを取得出来ます。

アップロードしたデータを見ていきます。
uploadeddata.png
データにはヘッダがありそれぞれ以下を示しているようです。

  • s1-fb1:センサー1 or 2における周波数帯 1 - 5を示す。
  • low_greese:低グリース状態の有無を示す。

ANALYTICS BUILDER > DATAをクリックします。

image.png

Datasets下のNew...をクリックするとNew Datasetポップアップが開きます。

image.png

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を検索して選択します。

image.png

Submitをクリックします。

image.png

アップロードが成功するとDatasetsの一覧にvibration_datasetが表示されます。

ステップ4:シグナル

このセクションではデータセットのうち、設定した目標に統計的に最も相関の高い単一のデータを検索する"シグナル"を作成します。但し必ずしもそれが設定したゴールそのものを示すものではなく、データが期待する目標と相関していることを意味します。

ANALYTICS BUILDER > Signalsをクリックします。

image.png

上部にあるNew...をクリックします。New Signalsポップアップが開きます。

image.png

Signal Nameフィールドにvibration_signalと入力します。Data from Existing Datasetの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。Filter (required)フィールドでall_dataを設定したままにします。Excluded Fields from Signalフィールドをデフォルトの空白の状態にしておきます。

image.png

Submitをクリックします。

image.png

シグナルの状態がCOMPLETEDに変更されるまで30秒間程度待ちます。結果が下部に表示されます。

image.png

結果を見てみます。統計的に低グリースの状態と相関が高い単一データが順にリストされます。s1_fb1~s1_fb5が上位にある通り、センサー1の5つの周波数帯が低グリースの状態と最も相関していることがわかります。またs2_fb1~s2_fb4が示すセンサー2の内、周波数帯1と4だけが関連しており2、3、5は殆ど関連性が無い事がわかります。

ステップ5:プロファイル

シグナルのセクションではゴールと相関の高い単一のデータを検索しました。このセクションではゴールと相関が高いその単一データの"組み合わせ"である"プロファイル"を作成します。

ANALYTICS BUILDER > Profilesをクリックします。
image.png

上部にあるNew...をクリックします。New Profileポップアップが開きます。

image.png

Profile Nameフィールドにvibration_profileと入力します。Data from Existing Datasetの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。Filter (required)フィールドでall_dataを設定したままにします。Excluded Features from Profileフィールドをデフォルトの空白の状態にしておきます。

image.png

Submitをクリックします。

image.png

シグナルの状態がCOMPLETEDに変更されるまで30秒間程度待ちます。結果が下部に表示されます。

image.png

結果を見てみます。統計的に有効と考えられる複数のプロファイル(データの組み合わせ)がリストされていますが、はじめの3つのプロファイルだけが総レコード数の内かなりの割合を占めており、後半のプロファイルの大部分は無視することができそうです。
profile.png
profile2.png

相関性が高そうな最初のプロファイルの中にはセンサー1とセンサー2の両方の周波数帯が表示されます。しかしシグナルの結果よりセンサー1が高い相関性を持っている事を考慮するとセンサ1が依然として全体で最も重要であることを示していそうです。つまりセンサー1はそれ自体でも組み合わせでも統計的に有益でありセンサー2は統計に不要という予測が立ちます。(一見センサー2は重要に見えるようでもそれはセンサー1との組み合わせの場合のみ該当する)

ステップ6:モデルを作成する

これまで走査したデータに基づいて、将来発生する可能性の高い事象を予測する"モデル"を作成します。モデルはそれ自体が一定量のデータを保持するわけではなくデータに対して実行されます。またモデルを取り扱うにあたり最低限必要な予備知識として、一般的に機械学習で用いられる手法の一つであるROC曲線AUCについて説明します。この2つは技術ブログや文献で沢山の情報がありますが、ここではThingWorxの利用で最低限必要な知識を操作と共に説明していきます。

モデルの作成

ANALYTICS BUILDER > Modelsをクリックします。
image.png

上部にあるNew...をクリックします。New Predictive Modelポップアップが開きます。
image.png

Model Nameフィールドにvibration_modelと入力します。Data Selectionの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。Filter (required)フィールドでall_dataを設定したままにします。Excluded Fields from Modelフィールドをデフォルトの空白の状態にしておきます。

image.png

Submitをクリックします。

image.png

モデルの状態がCOMPLETEDに変更されるまで約60秒間程度待ちます。

image.png

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ページが開きます。
rocauc.png

低グリース状態と判定する基準(閾値)を変えてプロットを取り描画したROC曲線です。またROC曲線とX軸、Y軸で囲まれた部分、つまりROC曲線から右半分の面積をAUC(Area under an RoC curve)と呼びます。理想的な分類はTPRが100%かつFPRが0%であり、AUCの面積が出来るだけ大きいものほど良いモデルと言えます。

?をクリックすると用語の詳細を確認する事が出来ます。
image.png
左上のConfusion Matrixタブをクリックすると、正しい予測であるTrue PositiveFalse Negativeの総数と、正しくない予測であるFalse PositiveTrue Negativeの比較を確認出来、前者が後者よりも高い精度の高い予測モデルである事がわかります。
image.png
同様に?をクリックすると用語の詳細を確認する事が出来ます。
image.png

ステップ7:モデルの最適化

プロファイルのステップより、センサー2がゴールを達成する為に不要である可能性がわかっています。作成したもモデルからセンサー2の要素を取り除く事でより精度の高い予測モデルを作成出来る可能性があるので、その比較を行います。

ANALYTICS BUILDER > Modelsをクリックします。
image.png

New...をクリックします。Model Name (required)フィールドにvibration_model_s1_onlyと入力します。Data Selectionの下のDataset (required)フィールドでvibration_datasetを選択します。Goal (required)フィールドでlow_greaseを設定したままにします。

image.png

Excluded Fields from Model:の右横にあるExclude Fieldsをクリックします。Exclude these Fields from this Model:ポップアップが開きます。

image.png

s2_fb1をクリックしセンサー2の最初の周波数帯を選択します。シフトキーを押しながらs2_fb5をクリックし、センサー2全ての周波数を選択します。

image.png

全てのセンサー2の値が選択されている状態で中央のAdd >ボタンをクリックします。

image.png

左下のSelectをクリックしポップアップを閉じます。

image.png

Submitをクリックします。

image.png

モデルの状態がCOMPLETEDに変更されるまで約60秒間程度待ちます。

image.png

vibration_model_s1_onlyが選択された状態でView...をクリックします。

image.png

ROC曲線を確認する事ができ、センサー2を含むオリジナルと同等の結果が得られました。同様に、Confusion Matrixの結果より正しい予測と正しくない予測の比率も同等の結果が得られました。

image.png

このモデルの結果より、センサーは1つでも2つでも低グリース状態を凡そ同じ制度で検出する事が出来るようです。1つのセンサと予測モデルを活用する事で、低グリース状態を正確に検出し不具合発生前にメンテナンスすることができれば、物理センサーのコストを抑えながらモーターの安全性や品質を上げるビジネス価値の創造に役立ちそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした