ゼファーネットのロゴ

Amazon Lookout forEquipmentとAmazonA2Iを使用して、異常な機器の動作を検出し、予測を確認します

日付:

発電機、圧縮機、タービンなどの幅広い産業機械を運用および保守している企業は、運用効率を改善し、コンポーネントの故障による計画外のダウンタイムを回避するために絶えず取り組んでいます。 彼らは、物理センサー(タグ)、データ接続、データストレージ、およびデータの視覚化に多額の投資を行って、機器の状態を監視し、予知保全のためのリアルタイムアラートを取得します。

機械学習(ML)により、機器の履歴データから学習するデータ駆動型モデルを提供できる、より強力なテクノロジーが利用可能になりました。 ただし、このようなMLソリューションの実装には、複雑なインフラストラクチャの管理とセットアップ、および適切なMLスキルの習得が含まれるため、時間と費用がかかります。 さらに、MLアプリケーションでは、機密データの精度を確保し、継続的な改善を提供し、更新された予測でモデルを再トレーニングするために、人間による監視が必要です。 ただし、MLのみのシステムと人間のみのシステムのどちらかを選択せざるを得ないことがよくあります。 企業は、より高い精度を達成するために結果を人間の目で見ながら、MLシステムをワークフローに統合するという両方の長所を求めています。

この投稿では、設定方法を紹介します 機器のAmazonルックアウト 予知保全のために風力タービンデータセットを使用して異常行動検出モデルをトレーニングするには、ループワークフローで人間を使用して、を使用して予測を確認します。 Amazon拡張AI (Amazon A2I)、データセットを拡張し、モデルを再トレーニングします。

ソリューションの概要

Amazon Lookout for Equipmentは、圧力、流量、RPM、温度、電力などのセンサーからのデータを分析し、MLの専門知識を必要とせずに、データに基づいて機器の特定のMLモデルを自動的にトレーニングします。 Amazon Lookout for Equipmentは、独自のMLモデルを使用して、受信センサーデータをほぼリアルタイムで分析し、機械障害につながる可能性のある早期警告の兆候を正確に特定します。 つまり、機器の異常を迅速かつ正確に検出し、問題を迅速に診断し、コストのかかるダウンタイムを削減し、誤ったアラートを削減するための措置を講じることができます。

Amazon A2Iは、人間によるレビューに必要なワークフローを簡単に構築できるMLサービスです。 Amazon A2Iは、すべての開発者にヒューマンレビューを提供し、AWSで実行されているかどうかに関係なく、ヒューマンレビューシステムの構築や多数のヒューマンレビューアの管理に関連する差別化されていない重労働を取り除きます。

Amazon Lookout for Equipmentの使用を開始するには、データセットを作成し、データを取り込み、モデルをトレーニングし、スケジューラーを設定して推論を実行します。 これらの手順を実行した後、Amazon A2Iを使用してヒューマンレビュープロセスをすばやく設定し、拡張データセットまたはヒューマンレビューデータセットを使用してモデルを再トレーニングする方法を示します。

付属するJupyterノートブック、次の手順を説明します。

  1. Amazon Lookout forEquipmentでデータセットを作成します。
  2. Amazon Lookout forEquipmentデータセットにデータを取り込みます。
  3. Amazon Lookout forEquipmentでモデルをトレーニングします。
  4. トレーニング済みモデルで診断を実行します。
  5. Amazon Lookout for Equipmentで推論スケジューラを作成して、リアルタイムリクエストのシミュレートされたストリームを送信します。
  6. Amazon A2Iプライベートヒューマンループを設定し、Amazon Lookout forEquipmentからの予測を確認します。
  7. AmazonA2Iの拡張データセットに基づいてモデルを再トレーニングします。

アーキテクチャの概要

次の図は、ソリューションアーキテクチャを示しています。

ワークフローには次の手順が含まれます。

  1. このアーキテクチャは、推論パイプラインが構築され、センサーデータが推論入力のためにS3パスに定期的に保存されることを前提としています。 これらの入力はCSV形式で保存され、対応するタイムスタンプがファイル名に含まれます。
  2. Amazon Lookout for Equipmentは指定された頻度でウェイクアップし、推論入力からの最新のファイルを処理します Amazon シンプル ストレージ サービス (Amazon S3)パス。
  3. 推論結果は、JSON行ファイル形式で推論出力S3パスに保存されます。 出力には、根本原因分析に使用されるイベント診断も含まれます。
  4. Amazon Lookout for Equipmentが異常を検出すると、推論の入力と出力が、AmazonA2Iを介した検証のためにプライベートワーカーに提示されます。
  5. 民間の労働力は、検出された異常を調査および検証し、新しい異常ラベルを提供します。 これらのラベルは、新しいS3パスに保存されます。
  6. トレーニングデータも、対応する新しいラベルとともに更新され、後続のモデルの再トレーニングのためにステージングされます。
  7. 十分な数の新しいラベルが収集された後、新しいAmazon Lookout for Equipmentモデルが作成され、トレーニングされ、デプロイされます。 再トレーニングサイクルは、連続モデルの再トレーニングのために繰り返すことができます。

前提条件

始める前に、次の手順を実行してJupyterノートブックをセットアップします。

  1. ノートブックインスタンスを作成する in アマゾンセージメーカー.

SageMakerノートブックに必要なものがあることを確認してください AWS IDおよびアクセス管理 (IAM)の前提条件セクションで言及されている役割と権限 ノート.

  1. ノートブックがアクティブなときに、 Jupyterを開く.
  2. Jupyterダッシュボードで、 新作、選択して ターミナル.
  3. ターミナルで、次のコードを入力します。
cd SageMaker
git clone https://github.com/aws-samples/lookout-for-equipment-demo

  1. 最初にデータ準備ノートブックを実行します– 1_data_preparation.ipynb
  2. 次に、このブログのノートブックを開きます– 3_integrate_l4e_and_a2i.ipynb

これで、ノートブックセルで次の手順を実行する準備が整いました。 セットアップ環境の手順を実行して、ノートブック全体で使用する必要なPythonSDKとライブラリをセットアップします。

  1. AWSリージョンを指定し、S3バケットを作成し、次のコードセルにバケットの詳細を入力します。
REGION_NAME = '<your region>'
BUCKET = '<your bucket name>'
PREFIX = 'data/wind-turbine'

データセットを分析し、コンポーネントのメタデータを作成します

このセクションでは、既存の風力タービンデータを前処理し、Amazon Lookout forEquipmentに取り込む方法について説明します。 必ず実行してください データ準備ノート 実行する前に 付属のノート ブログがこの投稿のすべてのステップを実行するために。 あなたには必要だ データスキーマ Amazon Lookout forEquipmentで既存の履歴データを使用するため。 データスキーマは、Amazon Lookout forEquipmentにデータの意味を伝えます。 データスキーマはデータを記述するため、その構造は、それが記述するコンポーネントのデータファイルの構造を反映しています。

すべてのコンポーネントは、データスキーマに記述されている必要があります。 各コンポーネントのデータは、データスキーマに示されているように構造化された個別のCSVファイルに含まれています。

次のフォルダ構造を使用して、各アセットのコンポーネントのデータを個別のCSVファイルに保存します。

S3 bucket > Asset_name > Component 1 > Component1.csv

ノートブックセクションに移動します データセットの前処理とロード 次のセルを実行してデータを検査します。

import pandas as pd
turbine_id = 'R80711'
df = pd.read_csv(f'../data/wind-turbine/interim/{turbine_id}.csv', index_col = 'Timestamp')
df.head()

次のスクリーンショットは、出力を示しています。

次に、コンポーネントマップを作成して、Amazon Lookout forEquipmentが取り込むデータセットを作成します。 セクションの下のノートブックセルを実行します データセットコンポーネントマップを作成する コンポーネントマップを作成し、取り込み用のCSVファイルを生成します。

Amazon Lookout forEquipmentデータセットを作成する

機器にはAmazonLookoutを使用しています データセットを作成 データセットを作成し、前の手順で作成したコンポーネントマップを入力として提供するAPI。 次のノートブックセルを実行して、データセットを作成します。

ROLE_ARN = sagemaker.get_execution_role()
# REGION_NAME = boto3.session.Session().region_name
DATASET_NAME = 'wind-turbine-train-dsv2-PR'
MODEL_NAME = 'wind-turbine-PR-v1' lookout_dataset = lookout.LookoutEquipmentDataset(
dataset_name=DATASET_NAME,
component_fields_map=DATASET_COMPONENT_FIELDS_MAP,
region_name=REGION_NAME,
access_role_arn=ROLE_ARN
) pp = pprint.PrettyPrinter(depth=5)
pp.pprint(eval(lookout_dataset.dataset_schema))
lookout_dataset.create()

次の出力が得られます。

Dataset "wind-turbine-train-dsv2-PR" does not exist, creating it... {'DatasetName': 'wind-turbine-train-dsv2-PR', 'DatasetArn': 'arn:aws:lookoutequipment:ap-northeast-2:<aws-account>:dataset/wind-turbine-train-dsv2-PR/8325802a-9bb7-48fb-804b-ab9f5b79f49d', 'Status': 'CREATED', 'ResponseMetadata': {'RequestId': '52dc754c-84da-4a8c-aaef-1908e4348837', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '52dc754c-84da-4a8c-aaef-1908e4348837', 'content-type': 'application/x-amz-json-1.0', 'content-length': '203', 'date': 'Thu, 25 Mar 2021 21:18:29 GMT'}, 'RetryAttempts': 0}}

または、Amazon Lookout forEquipmentコンソールに移動してデータセットを表示することもできます。

選んでいいですよ 詳しく見る データスキーマ データセットのスキーマを表示します。 選んでいいですよ 新しいデータを取り込む コンソールからデータの取り込みを開始するか、ノートブックに表示されているAPIを使用して、Python Boto3APIを使用して同じことを行うことができます。

実行する ノート データを取り込むセル。 取り込みが完了すると、次の応答が返されます。

=====Polling Data Ingestion Status===== 2021-03-25 21:18:45 | IN_PROGRESS
2021-03-25 21:19:46 | IN_PROGRESS
2021-03-25 21:20:46 | IN_PROGRESS
2021-03-25 21:21:46 | IN_PROGRESS
2021-03-25 21:22:46 | SUCCESS

データを前処理し、Amazon Lookout for Equipmentにデータを取り込んだので、トレーニング手順に進みます。 または、 データを取り込む.

SageMakerラベリングワーカーを使用してデータセットにラベルを付ける

Amazon Lookout for Equipmentで直接使用できる既存のラベル付きデータセットがない場合は、 カスタムラベリングワークフローを作成する。 これは、たとえば、企業がさまざまな操作からのアラートを中央施設に送信してSMEが確認および更新できるようにする、リモート操作施設を構築したい場合に関連する可能性があります。 ラベリングUIのサンプルクラウドHTMLテンプレートについては、 GitHubリポジトリ.

次のスクリーンショットは、サンプルのラベリングUIがどのように見えるかの例を示しています。

この投稿では、トレーニング用のデータセットに付属のラベルを使用します。 次のステップで実際のトレーニング用に作成したラベルファイルを使用する場合は、ラベルファイルをS3バケットにコピーして、トレーニング構成内の場所を指定する必要があります。

Amazon Lookout forEquipmentでモデルを作成する

このセクションでは、次の手順を説明します。

  • モデルパラメータを準備し、データをテストセットとトレーニングセットに分割します
  • Amazon Lookout for EquipmentAPIを使用してモデルをトレーニングする
  • トレーニング済みモデルの診断を取得する

モデルパラメータを準備し、データを分割します

このステップでは、データセットをテストとトレーニングに分割し、ラベルを準備し、を使用してトレーニングを開始します。 ノート。 ノートブックコードを実行する 列車を分割してテストする データセットをトレーニングとテストのためにそれぞれ80/20分割に分割します。 次に、次のコードに示すように、ラベルの準備コードを実行し、トレーニング構成の設定に進みます。

# Prepare the model parameters:
lookout_model = lookout.LookoutEquipmentModel(model_name=MODEL_NAME, dataset_name=DATASET_NAME, region_name=REGION_NAME) # Set the training / evaluation split date:
lookout_model.set_time_periods(evaluation_start, evaluation_end, training_start, training_end) # Set the label data location:
lookout_model.set_label_data(bucket=BUCKET, prefix=PREFIX+'/labelled_data/', access_role_arn=ROLE_ARN) # This sets up the rate the service will resample the data before # training:
lookout_model.set_target_sampling_rate(sampling_rate='PT10M')

上記のコードでは、期間、ラベルデータ、モデルのターゲットサンプリングレートなどのモデルトレーニングパラメーターを設定しました。 これらのパラメータの詳細については、を参照してください。 モデルの作成.

列車モデル

これらのモデルパラメーターを設定した後、次のトレインモデルAPIを実行して、データセットとトレーニングパラメーターを使用してモデルのトレーニングを開始する必要があります。

lookout_model.train()

次の応答があります。

{'ModelArn': 'arn:aws:lookoutequipment:ap-northeast-2:<accountid>:model/wind-turbine-PR-v1/fac217a9-8855-4931-95f9-dd47f0af1ec5', 'Status': 'IN_PROGRESS', 'ResponseMetadata': {'RequestId': '3d385895-c62e-4126-9622-38f0ebed9715', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '3d385895-c62e-4126-9622-38f0ebed9715', 'content-type': 'application/x-amz-json-1.0', 'content-length': '152', 'date': 'Thu, 25 Mar 2021 21:27:05 GMT'}, 'RetryAttempts': 0}}

または、Amazon Lookout for Equipmentコンソールに移動して、モデルの作成後にトレーニングを監視することもできます。

この例で提供するサンプルタービンデータセットには、数百万のデータポイントがあります。 トレーニングには約2.5時間かかります。

トレーニング済みモデルを評価する

モデルがトレーニングされた後、Amazon Lookout for Equipmentはそのパフォーマンスを評価し、結果を表示します。 パフォーマンスの概要と、異常な機器の動作イベントに関する詳細情報、およびそれらを検出したときにモデルがどの程度うまく機能したかを示します。 モデルのトレーニングと評価のために提供したデータと障害ラベルを使用して、Amazon Lookout for Equipmentは、モデルの予測が真陽性であった回数を報告します。 また、すべての真のポジティブの平均事前警告時間を報告します。 さらに、非イベントの期間とともに、モデルによって生成された誤検知の結果を報告します。

パフォーマンス評価の詳細については、を参照してください。 出力の評価.

トレーニング診断を確認する

次のコードを実行して、トレーニング診断を生成します。 を参照してください 付属のノート このステップで実行する完全なコードブロック。

LookoutDiagnostics = lookout.LookoutEquipmentAnalysis(model_name=MODEL_NAME, tags_df=df, region_name=REGION_NAME)
LookoutDiagnostics.set_time_periods(evaluation_start, evaluation_end, training_start, training_end)
predicted_ranges = LookoutDiagnostics.get_predictions()

返された結果は、対応する日付範囲の異常な機器の予測に対する各機能の寄与率を示しています。

Amazon Lookout forEquipmentで推論スケジューラを作成します

このステップでは、 推論スケジュールの作成r APIはスケジューラーを作成して開始します。これにより、すぐにコストがかかり始めます。 推論のスケジューリングとは、新しい測定データを分析するための継続的なリアルタイム推論計画を設定することです。 スケジューラを設定するときは、入力データのS3バケットの場所を指定し、データ内の個別のエントリ間に区切り文字を割り当て、必要に応じてオフセット遅延を設定し、推論の頻度を設定します。 また、出力データ用にS3バケットの場所を指定する必要があります。 次のノートブックセクションを実行してモデルで推論を実行し、推論スケジューラを作成します。

scheduler = lookout.LookoutEquipmentScheduler(
scheduler_name=INFERENCE_SCHEDULER_NAME,
model_name=MODEL_NAME_FOR_CREATING_INFERENCE_SCHEDULER,
region_name=REGION_NAME
) scheduler_params = { 'input_bucket': INFERENCE_DATA_SOURCE_BUCKET, 'input_prefix': INFERENCE_DATA_SOURCE_PREFIX, 'output_bucket': INFERENCE_DATA_OUTPUT_BUCKET, 'output_prefix': INFERENCE_DATA_OUTPUT_PREFIX, 'role_arn': ROLE_ARN_FOR_INFERENCE, 'upload_frequency': DATA_UPLOAD_FREQUENCY, 'delay_offset': DATA_DELAY_OFFSET_IN_MINUTES, 'timezone_offset': INPUT_TIMEZONE_OFFSET, 'component_delimiter': COMPONENT_TIMESTAMP_DELIMITER, 'timestamp_format': TIMESTAMP_FORMAT
} scheduler.set_parameters(**scheduler_params)

推論スケジューラを作成したら、次のステップは推論用のサンプルデータセットを作成することです。

推論データを準備する

ノートブックの手順を実行して、推論データを準備します。 タグの説明をロードしましょう。 このデータセットには、データ記述ファイルが付属しています。 ここから、必要に応じてコンポーネントのリスト(サブシステム列)を収集できます。 解釈の参照点として、データ記述のタグメタデータを使用します。 タグ名を使用して、AmazonA2Iが使用するリストを作成します。 詳細については、セクションを参照してください Amazon A2Iをセットアップして、Amazon Lookout forEquipmentからの予測を確認します このポストで。

サンプルの推論データセットを構築するために、元の時系列の評価期間から過去2時間のデータを抽出します。 具体的には、タービンのシミュレートされたリアルタイムタグを含む10つのCSVファイルを3分間隔で作成します。 これらはすべてAmazonSXNUMXの inference-a2i folder。 データの準備ができたので、次のコードを実行してスケジューラーを作成します。

create_scheduler_response = scheduler.create()

次の応答があります。

===== Polling Inference Scheduler Status ===== Scheduler Status: PENDING
Scheduler Status: RUNNING ===== End of Polling Inference Scheduler Status =====

または、Amazon Lookout for Equipmentコンソールで、 推論スケジュールの設定 トレーニング済みモデルのセクションを作成し、必要なパラメーターを指定してスケジューラーを設定します。

推論結果を取得する

ノートブックの手順を実行する 推論の実行を一覧表示する 前の手順で作成したスケジュールから実行の詳細を取得します。 スケジューラーが最初の推論を実行するまで5〜15分待ちます。 完了すると、 リスト推論実行 現在の推論スケジューラのAPI。 唯一の必須パラメーターはスケジューラー名です。

推論の実行を照会する期間を選択することもできます。 指定しない場合、推論スケジューラのすべての実行が一覧表示されます。 時間範囲を指定する場合は、次のコードを使用できます。

START_TIME_FOR_INFERENCE_EXECUTIONS = datetime.datetime(2010,1,3,0,0,0)END_TIME_FOR_INFERENCE_EXECUTIONS = datetime.datetime(2010,1,5,0,0,0)

このコードは、 2010-01-03 00:00:00 前に 2010-01-05 00:00:00 記載されています。

次のような特定のステータスでの実行をクエリすることもできます。 IN_PROGRESS, SUCCESS, FAILED:

START_TIME_FOR_INFERENCE_EXECUTIONS = None
END_TIME_FOR_INFERENCE_EXECUTIONS = None
EXECUTION_STATUS = None execution_summaries = [] while len(execution_summaries) == 0: execution_summaries = scheduler.list_inference_executions( start_time=START_TIME_FOR_INFERENCE_EXECUTIONS, end_time=END_TIME_FOR_INFERENCE_EXECUTIONS, execution_status=EXECUTION_STATUS ) if len(execution_summaries) == 0: print('WAITING FOR THE FIRST INFERENCE EXECUTION') time.sleep(60) else: print('FIRST INFERENCE EXECUTEDn') break execution_summaries

次の応答があります。

{'ModelName': 'wind-turbine-PR-v1', 'ModelArn': 'arn:aws:lookoutequipment:ap-northeast-2:<aws-account>:model/wind-turbine-PR-v1/fac217a9-8855-4931-95f9-dd47f0af1ec5', 'InferenceSchedulerName': 'wind-turbine-scheduler-a2i-PR-v10', 'InferenceSchedulerArn': 'arn:aws:lookoutequipment:ap-northeast-2:<aws-account>:inference-scheduler/wind-turbine-scheduler-a2i-PR-v10/e633c39d-a4f9-49f6-8248-7594349db2d0', 'ScheduledStartTime': datetime.datetime(2021, 3, 29, 15, 35, tzinfo=tzlocal()), 'DataStartTime': datetime.datetime(2021, 3, 29, 15, 30, tzinfo=tzlocal()), 'DataEndTime': datetime.datetime(2021, 3, 29, 15, 35, tzinfo=tzlocal()), 'DataInputConfiguration': {'S3InputConfiguration': {'Bucket': '<your s3 bucket>', 'Prefix': 'data/wind-turbine/inference-a2i/input/'}}, 'DataOutputConfiguration': {'S3OutputConfiguration': {'Bucket': '<your s3 bucket>', 'Prefix': 'data/wind-turbine/inference-a2i/output/'}}, 'CustomerResultObject': {'Bucket': '<your s3 bucket>', 'Key': 'data/wind-turbine/inference-a2i/output/2021-03-29T15:30:00Z/results.jsonl'}, 'Status': 'SUCCESS'}]

実際の予測結果を取得する

推論が成功するたびに、バケットの出力場所にJSONファイルが作成されます。 各推論は、単一の新しいフォルダーを作成します results.jsonl その中のファイル。 ノートブックのこのセクションを実行して、これらのファイルを読み取り、その内容を表示できます。

results_df

次のスクリーンショットは結果を示しています。

推論スケジューラを停止します

推論スケジューラを必ず停止してください。 この投稿の残りの手順では必要ありません。 ただし、ソリューションの一部として、推論スケジューラを実行して、機器のリアルタイム推論を継続する必要があります。 このノートブックセクションを実行して、推論スケジューラを停止します。

Amazon A2Iをセットアップして、Amazon Lookout forEquipmentからの予測を確認します

推論が完了したので、推論結果を確認して更新するUIを設定する方法を理解しましょう。これにより、モデルを再トレーニングするためにAmazon Lookout forEquipmentに送り返すことができます。 このセクションでは、Amazon A2Iカスタムタスクタイプを使用して、ウォークスルーノートブックを介してAmazon Lookout for Equipmentと統合し、ループプロセスで人間を設定する方法を示します。 次の手順が含まれます。

  • ヒューマンタスクUIを作成する
  • ワークフロー定義を作成する
  • AmazonA2Iヒューマンループに予測を送信する
  • ワーカーポータルにサインインし、Amazon Lookout forEquipment推論予測に注釈を付けます

ノートブックに記載されている手順に従って、Amazon A2IAPIを初期化します。 AmazonA2I出力が必要な初期化ブロックでバケット名を設定してください。

a2ibucket = '<your bucket>'

また、初期化ステップでプライベートワーカーを作成し、ワークチームARNを提供する必要があります。

SageMakerコンソールで、 民間の労働力を作る。 民間労働力を作成した後、 労働力ARNを見つける ノートブックにARNを入力します。

WORKTEAM_ARN = 'your private workforce team ARN'

ヒューマンタスクUIを作成する

ここで、ヒューマンタスクUIリソースを作成し、液体HTMLでUIテンプレートを提供します。 提供されているものをダウンロードできます template そしてそれをカスタマイズします。 このテンプレートは、ヒューマンループが必要な場合は常にヒューマンワーカーにレンダリングされます。 70を超える構築済みUIについては、 amazon-a2i-サンプル-タスク-uis GitHubリポジトリ。 このテンプレートは、 GitHubレポ.

このテンプレートを使用して、コンソールを介して、またはノートブックで次のコードを実行することにより、タスクUIを作成できます。

def create_task_ui(): response = sagemaker_client.create_human_task_ui( HumanTaskUiName=taskUIName, UiTemplate={'Content': template}) return response

ヒューマンレビューワークフロー定義を作成する

ワークフロー定義では、以下を指定できます。

  • 前の手順で作成したワーカーテンプレートまたはヒューマンタスクUI。
  • タスクが送信される従業員。 この投稿では、前提条件の手順で作成した個人の従業員です。
  • 従業員が受け取る指示。

この投稿では Create Flow Definition ワークフロー定義を作成するためのAPI。 ノートブックで次のセルを実行します。

create_workflow_definition_response = sagemaker_client.create_flow_definition( FlowDefinitionName= flowDefinitionName, RoleArn=role, HumanLoopConfig= { "WorkteamArn": WORKTEAM_ARN, "HumanTaskUiArn": humanTaskUiArn, "TaskCount": 1, "TaskDescription": "Review the contents and select correct values as indicated", "TaskTitle": "Equipment Condition Review" }, OutputConfig={ "S3OutputPath" : OUTPUT_PATH } )
flowDefinitionArn = create_workflow_definition_response['FlowDefinitionArn'] 

AmazonA2Iヒューマンループに予測を送信する

Pandas DataFrameからアイテムリストを作成し、Amazon Lookout forEquipementの出力を保存します。 次のノートブックセルを実行して、レビュー用に送信するアイテムのリストを作成します。

NUM_TO_REVIEW = 5 # number of line items to review
dftimestamp = sig_full_df['Timestamp'].astype(str).to_list()
dfsig001 = sig_full_df['Q_avg'].astype(str).to_list()
dfsig002 = sig_full_df['Ws1_avg'].astype(str).to_list()
dfsig003 = sig_full_df['Ot_avg'].astype(str).to_list()
dfsig004 = sig_full_df['Nf_avg'].astype(str).to_list()
dfsig046 = sig_full_df['Ba_avg'].astype(str).to_list()
sig_list = [{'timestamp': dftimestamp[x], 'reactive_power': dfsig001[x], 'wind_speed_1': dfsig002[x], 'outdoor_temp': dfsig003[x], 'grid_frequency': dfsig004[x], 'pitch_angle': dfsig046[x]} for x in range(NUM_TO_REVIEW)]
sig_list

次のコードを実行して、AmazonA2IループのJSON入力を作成します。 これには、人間のレビュー担当者に表示されるAmazon A2IUIへの入力として送信されるリストが含まれます。

ip_content = {"signal": sig_list, 'anomaly': ano_list
}

次のノートブックセルを実行してAmazonA2I APIを呼び出し、ヒューマンループを開始します。

import json
humanLoopName = str(uuid.uuid4()) start_loop_response = a2i.start_human_loop( HumanLoopName=humanLoopName, FlowDefinitionArn=flowDefinitionArn, HumanLoopInput={ "InputContent": json.dumps(ip_content) } )

ノートブックの次のセルを実行すると、ヒューマンループのステータスを確認できます。

ワーカーポータルを介して結果に注釈を付ける

次のノートブックセルを実行して、プライベートワークフォースポータルに移動するためのログインリンクを取得します。

workteamName = WORKTEAM_ARN[WORKTEAM_ARN.rfind('/') + 1:]
print("Navigate to the private worker portal and do the tasks. Make sure you've invited yourself to your workteam!")
print('https://' + sagemaker_client.describe_workteam(WorkteamName=workteamName)['Workteam']['SubDomain'])

AmazonA2Iコンソールにリダイレクトされます。 ヒューマンレビュージョブを選択し、 作業を開始する。 変更を確認して修正した後、 送信.

AmazonS3で結果ストアを評価できます。

結果を評価する

ラベリング作業が完了すると、ヒューマンレビューワークフロー定義で指定されたS3出力パスで結果を利用できるようになります。 人間の回答が返され、JSONファイルに保存されます。 を実行します ノート Amazon S3から結果を取得するセル:

import re
import pprint pp = pprint.PrettyPrinter(indent=4)
json_output = ''
for resp in completed_human_loops: splitted_string = re.split('s3://' + a2ibucket + '/', resp['HumanLoopOutput']['OutputS3Uri']) print(splitted_string[1]) output_bucket_key = splitted_string[1] response = s3.get_object(Bucket=a2ibucket, Key=output_bucket_key) content = response["Body"].read() json_output = json.loads(content) pp.pprint(json_output) print('n')

人間がレビューした回答とフロー定義で応答を受け取ります。 完全な応答を得るには、ノートブックを参照してください。

AmazonA2Iの拡張データセットに基づくモデルの再トレーニング

次に、Amazon A2Iの出力を取得して処理し、Amazon Lookout for Equipmentに返送して、人間による修正に基づいてモデルを再トレーニングします。 を参照してください 付属のノート このセクションで完了するすべての手順について。 元のラベルファイルの最後のいくつかのエントリを見てみましょう。

labels_df = pd.read_csv(os.path.join(LABEL_DATA, 'labels.csv'), header=None)
labels_df[0] = pd.to_datetime(labels_df[0])
labels_df[1] = pd.to_datetime(labels_df[1])
labels_df.columns = ['start', 'end']
labels_df.tail()

次のスクリーンショットは、ラベルファイルを示しています。

新しい日付範囲でラベルを更新する

次に、AmazonA2Iヒューマンレビュープロセスから受け取った新しいラベルで既存のラベルデータセットを更新しましょう。

faulty = False
a2i_lbl_df = labels_df
x = json_output['humanAnswers'][0]
row_df = pd.DataFrame(columns=['rownr'])
tslist = {} # Let's first check if the users mark equipment as faulty and if so get those row numbers into a dataframe for i in json_output['humanAnswers']: print("checking equipment review...") x = i['answerContent'] for idx, key in enumerate(x): if "faulty" in key: if str(x.get(key)).split(':')[1].lstrip().strip('}') == "True": # faulty equipment selected faulty = True row_df.loc[len(row_df.index)] = [key.split('-')[1]] print("found faulty equipment in row: " + key.split('-')[1]) # Now we will get the date ranges for the faulty choices for idx,k in row_df.iterrows(): x = json_output['humanAnswers'][0] strchk = "TrueStart"+k['rownr'] endchk = "TrueEnd"+k['rownr'] for i in x['answerContent']: if i == strchk: tslist[i] = x['answerContent'].get(i) if i == endchk: tslist[i] = x['answerContent'].get(i) # And finally let's add it to our new a2i labels dataset
for idx,k in row_df.iterrows(): x = json_output['humanAnswers'][0] strchk = "TrueStart"+k['rownr'] endchk = "TrueEnd"+k['rownr'] a2i_lbl_df.loc[len(a2i_lbl_df.index)] = [tslist[strchk], tslist[endchk]]

次の応答があります。

checking equipment review...
found faulty equipment in row: 1
found faulty equipment in row: 2

次のスクリーンショットは、更新されたラベルファイルを示しています。

更新されたラベルデータを新しい拡張ラベルファイルにアップロードしましょう。

a2i_label_s3_dest_path = f's3://{BUCKET}/{PREFIX}/augmented-labelled-data/labels.csv'
!aws s3 cp $a2i_label_src_fname $a2i_label_s3_dest_path

新しい測定値でトレーニングデータセットを更新します

ここで、Amazon A2Iから取得したものに基づいて、元のトレーニングデータセットを新しい測定範囲で更新します。 次のコードを実行して、元のデータセットを、拡張データの追加に使用する新しいDataFrameにロードします。 を参照してください 付属のノート 必要なすべてのステップについて。

turbine_id = 'R80711'
file = '../data/wind-turbine/final/training-data/'+turbine_id+'/'+turbine_id+'.csv'
newdf = pd.read_csv(file, index_col='Timestamp')
newdf.head()

次のスクリーンショットは、元のトレーニングデータセットのスナップショットを示しています。

ここで、更新されたトレーニングデータセットを、以前に作成したシミュレートされた推論データとともに使用します。このデータでは、人間のレビュー担当者が、推論の実行時に障害のある機器を発見したことを示しました。 次のコードを実行して、シミュレートされた推論データセットのインデックスを変更し、各読み取りの10分間の期間を反映します。

sig_full_df = sig_full_df.set_index('Timestamp')
tm = pd.to_datetime('2021-04-05 20:30:00')
print(tm)
new_index = pd.date_range(
start=tm,
periods=sig_full_df.shape[0],
freq='10min'
)
sig_full_df.index = new_index
sig_full_df.index.name = 'Timestamp'
sig_full_df = sig_full_df.reset_index()
sig_full_df['Timestamp'] = pd.to_datetime(sig_full_df['Timestamp'], errors='coerce')

次のコードを実行して、シミュレートされた推論データセットを元のトレーニングデータセットに追加します。

newdf = newdf.reset_index()
newdf = pd.concat([newdf,sig_full_df])

最近のタイムスタンプを持つシミュレートされた推論データは、トレーニングデータセットの最後に追加されます。 それでは、CSVファイルを作成し、そのデータをAmazonS3のトレーニングチャネルにコピーしましょう。

TRAIN_DATA_AUGMENTED = os.path.join(TRAIN_DATA,'augmented')
os.makedirs(TRAIN_DATA_AUGMENTED, exist_ok=True)
newdf.to_csv('../data/wind-turbine/final/training-data/augmented/'+turbine_id+'.csv')
!aws s3 sync $TRAIN_DATA_AUGMENTED s3://$BUCKET/$PREFIX/training_data/augmented

次に、この拡張データセットを使用してコンポーネントマップを更新し、データをAmazon Lookout for Equipmentにリロードし、このデータセットを使用してこのトレーニングモデルを再トレーニングします。 を参照してください 付属のノート モデルを再トレーニングするための詳細な手順については。

この投稿では、Amazon Lookout for Equipmentを使用してモデルをトレーニングし、風力タービンデータセットを使用して異常な機器の動作を検出する方法、トレーニングされたモデルからの診断を確認する方法、ループ内の人間を使用してモデルからの予測を確認する方法について説明しました。 Amazon A2Iは、元のトレーニングデータセットを拡張し、人間のレビューからのフィードバックを使用してモデルを再トレーニングします。

Amazon Lookout forEquipmentとAmazonA2Iを使用すると、継続的な予測、レビュー、トレーニング、フィードバックループを設定して、予測を監査し、モデルの精度を向上させることができます。

このソリューションについてのご意見と、それがお客様の産業ユースケースにどのように適用されるかをお知らせください。 をチェックしてください GitHubレポ この投稿への完全なリソースについては。 詳細については、Webページにアクセスしてください 機器のAmazonルックアウト & Amazon拡張AI。 お返事おまちしております。 幸せな実験!


著者について 

 ダスタン・アイツハノフ アマゾンウェブサービスを使用したアプライドAIのソリューションアーキテクトです。 彼は、機械学習、モノのインターネット、ビッグデータ駆動型アプリケーションに重点を置いた、スケーラブルなクラウドベースのプラットフォームの設計と構築を専門としています。 仕事をしていないときは、キャンプに行ったり、スキーをしたり、家族と一緒に素晴らしいアウトドアで過ごすことを楽しんでいます。

プレムランガ ジョージア州アトランタを拠点とするエンタープライズソリューションアーキテクトです。 彼は機械学習技術分野コミュニティの一員であり、MLとAIの旅で顧客と協力するのが大好きです。 Premはロボット工学に情熱を注いでおり、自動運転車の研究者であり、ヒューストンやその他の場所にAlexaが制御するBeerPoursを構築しました。

モナモナ バージニア州アーリントンを拠点とするシニアAI / MLスペシャリストソリューションアーキテクトです。 彼女は公共部門の顧客と協力し、彼らが大規模な機械学習を採用するのを支援しています。 彼女はAI / MLのNLPとMLの説明可能性の分野に情熱を注いでいます。

バリス・ヤシン AWSのソリューションアーキテクトです。 彼はAI / ML&Analyticsテクノロジーに情熱を注いでおり、スタートアップのお客様がAWSで困難なビジネスおよび技術的な問題を解決するのを支援しています。

コインスマート。 BesteBitcoin-ヨーロッパのBörse
ソース:https://aws.amazon.com/blogs/machine-learning/detect-abnormal-equipment-behavior-and-review-predictions-using-amazon-lookout-for-equipment-and-amazon-a2i/

スポット画像

最新のインテリジェンス

スポット画像