DX station

ノーコード AI 構築ツール:Azure ML デザイナー を使って、時系列データの異常検知を実践する【後編】

大山 祥彦

大山 祥彦

こんにちは。データサイエンスチームの大山です。

前回の記事(以下リンク先)では、Azure ML デザイナー で時系列データの異常検知を行うにあたり、必要となる前提知識について解説しました(前回の解説した内容 : Azure ML デザイナー の概要、異常検知技術の概要、主成分分析による異常検知手法の説明、異常検知を時系列データに適用する方法)。

後編にあたる本記事では、前編で解説した知識を利用して、実際に Azure ML デザイナー で時系列データの異常検知を行う手順について解説していきます。

また、当社が提供する機械学習サービス ML Connect - Anomaly Detection では、Azure ML の機能を活用し、主にIoT 分野向けに時系列データの異常検知機能の提供をしています。そのため、ML Connect - Anomaly Detection の特徴や Azure ML を活用したことによる利点などについても本記事の最後に解説できればと思います。

【注意】 本記事は 2022年4月から5月上旬における、Azure ML スタジオのユーザーインターフェースを前提に解説しています。ただしその後、2022年5月下旬にかけて、Azure ML スタジオのユーザーインターフェースに改変が入り、特に今回説明するデザイナーの操作やインターフェースについて、本記事で解説している内容と差異が生じています(例えば、コンポーネントを選択するメニュー部分や、コンポーネントの設定を開く際に、これまでは左クリックのみで開いていましたが、ダブルクリックが必要になるなど、細かい部分に差異があります。また、これまで「実験(Experiment)」と呼ばれていた概念が「ジョブ(Job)」に名称が変更されています)。



「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


Azure ML デザイナー を使う前の準備

それでは初めに、Azure ML デザイナー でデータを分析する際に必要となる準備について、解説していきたいと思います。

なお、Azure ML のリソースの作成や Azure ML スタジオ へのアクセス方法については、本記事での説明は行いません。Azure ML、およびとそれに付随して作成される各リソース : Storage Account、Container Registry、Key Vault、Application Insights、については、すでに作成済みであることを前提として解説していきます。

もし Azure ML のリソース作成や、Azure ML スタジオ へのアクセス方法について詳細を知りたい場合は、以下の Azure 公式チュートリアルページの「ワークスペースを作成する」の節を参照してください

準備1 : 今回使用するデータを Azure ML のデータセットに登録する

Azure ML デザイナー でデータを利用するには、分析に使用するデータ(前編の記事で説明した正常データ、および異常を含むデータ、それぞれ2,000行分)について、Azure ML のデータセットにアップロードして登録する必要があります。以下の手順に従って、正常データ、および異常を含むデータを Azure ML のデータセットに登録してください。

1. 使用するデータをローカル PC にダウンロードする : 本記事では、前回の記事で説明した、正弦波 + 正規分布のノイズによって生成したデータを使っていきます。以下のリンクから、それらデータの CSV ファイルがダウンロードできますので、まずはこれらのデータをローカル PC の任意の作業用フォルダにダウンロードしてください。

2. Azure ML の データセットの管理画面を開く : Azure ML スタジオ の左側のメニュー項目から [データセット] を選択し、データセットの管理画面に移動してください

  • Azure ML 上での選択操作は、基本的に左クリックで行います。そのため、「選択」と記述した際は、特別な言及がない限り左クリックでの操作のことを指します。Azure ML デザイナー の操作も基本的には同様ですが、キャンバス上では一部の操作に右クリックを用いることがあります(コンポーネントのメニューの表示などに使います)。本記事では、右クリックによる操作が必要な場合、その都度「右クリック」の指示を記載します。

3. 正常データについて、データセットの新規作成を開始する : まずは、正常データからデータセットに登録していきます。[データセットの作成] のプルダウンを左クリックし、[ローカルファイルから] を選択して、データセットの登録画面を開いてください。

4. データセットの基本情報を入力する : データセットの新規作成画面では、初めに基本情報の入力を行います。[名前] と [データセットの種類] は必須項目です。ここでは正常データの登録を行うため、[名前] を「sine_wave_normal」と設定したとして説明していきます。なお、データセットの種類は、「表形式」から変えないで問題ありません。必須項目の入力が完了したら、[次へ] を選択してください。

5. アップロードするローカル PC のファイルを選択する : [データストアとファイルの選択] 画面では、[参照] 項目のプルダウンを左クリックし、[ファイルの参照] を選択してください。選択すると、ローカル PC のファイルを選択するウィンドウが開くので、アップロード対象の正常データの CSV ファイル(data_change_freq_normal.csv)を選択してください。

6. 選択したローカル PC のファイルをアップロードする : アップロードするローカルファイルを選択すると、[ファイル名] の下部に選択したファイルの名前が表示されます。表示されているファイルが正しければ、[次へ] を選択してファイルのアップロードを行ってください。

7. 設定とプレビューの確認 : ファイルをアップロードすると [設定とプレビュー] 画面に移動し、アップロードした CSV ファイルのサンプルがページ下部に表示されます。CSV ファイルの列名やデータの形式が意図した状態になっているか確認し、問題なければ [次へ] を選択してください。それ以外の設定項目については、今回は変更しないで問題ありません。

8. スキーマの確認 : [スキーマの設定] 画面では、データの各列についてデータセットに含めるかどうかや、列それぞれのデータ型を指定することができます。データ型については Azure ML がある程度推定してくれるため、今回は初期値のまま、特に変更しないで問題ありません。[次へ] を選択して次の画面に進んでください。

9. 詳細の確認 :「詳細の確認」画面では、これまで入力した各設定の設定値が表示されます。設定値が意図した値になっていることを確認したら、[作成] を選択してデータセットの登録を完了してください。

10. データセットの登録完了 : データセットへの登録が完了すると、データセットの管理画面が表示され、登録したデータセットの [名前] がデータセットの一覧に表示されます。

これで学習用の正常データの登録は完了です。検証用の異常を含むデータ(data_change_freq_anomaly.csv)についても全く同様の手順で登録してください。なお、異常を含むデータの名称は「sine_wave_anomaly」と登録したとして以降は説明していきます。

準備2 : Azure ML デザイナー の処理を実行するコンピューティングリソースを作成する

Azure ML デザイナー を利用するには、その処理を実行するためのコンピューティングリソースが必要になります。今回は、コンピューティング クラスターと呼ばれる、複数の仮想マシン(Virtual Machine : VM)で並列計算が可能な Azure ML 管理のコンピューティングリソースを利用します。

  • コンピューティング クラスターは、最低ノード数(並列計算に使う VM の数のこと)を 0 に設定することで、一定時間使用していない場合に自動で停止させることができる機能があります。そのため、意図しない課金の発生が抑えられるという利点があります(加えて、使用するときは自動で必要なノード数まで VM が起動します)。
  • 今回は使用しませんが、Azure ML には、コンピューティング クラスターに似た名称のコンピューティング インスタンスというコンピューティングリソースもあります。こちらは通常の Azure の VM 的に使用できるコンピューティングリソースです。このコンピューティング インスタンスは、自動での起動と停止をサポートしていませんので注意してください。

それでは、以下の手順でコンピューティング クラスターの作成をしていきます。

1. コンピューティング管理画面への移動 : Azure ML ではコンピューティングリソースの管理(コンピューティングリソースの新規作成、起動・停止、削除、ノード数の変更など)をコンピューティングの管理画面で行うことができます。Azure ML スタジオ の左側のメニュー項目から [コンピューティング] を選択し、コンピューティングの管理画面に移動してください。

2. コンピューティング クラスターの新規作成を開始する : コンピューティング クラスターの管理画面に移動するため、画面の上側にある [コンピューティング クラスター] のタブを選択してください。画面が遷移すると、コンピューティング クラスターがまだ作成されていない場合、画面の下側に [新規] ボタンがあります。このボタンを選択して、コンピューティング クラスターの新規作成画面を表示してください。

3. コンピューティング クラスターで使用する VM の設定 : 新規作成を開始すると、コンピューティング クラスターで使用する VM に関する設定画面が開きます。今回は初期値に指定されている設定値(場所(リージョン): Japan East、バーチャルマシン層 : 専用、仮想マシンの種類 : CPU、仮想マシンのサイズ : Standard_DS3_v2 )をそのまま使用します。設定値が合っているか確認したら、[次へ] を選択してください。

4. コンピューティング クラスターの構成に関する設定 : 次に表示される [設定の構成] 画面では、コンピューティング クラスターの名称や最小、最大ノード数、スケールダウンに関する設定が行えます。今回は、[コンピューティング名] と [最大ノード数] のみ初期値から変更します。それぞれ、以下の設定値を指定したとして、以降は解説していきます。

  • [コンピューティング名] : ds3v2-test
  • [最大ノード数] : 5
  • なお、[最小ノード数] は 0 から変更しないでください。もし 1 以上の数字にすると、使用していないときも指定した最低ノード数分の VM が起動し続けることになり、意図しない料金が発生する可能性があります。

設定が終わったら、画面下の [作成] を選択してください。コンピューティング クラスターの作成処理が開始されます。

5. コンピューティング クラスターの作成が完了したことを確認する : [作成] を選択すると、コンピューティング クラスターの管理画面に画面が移動し、画面上の一覧に現在作成したコンピューティング クラスターの情報が表示されます。コンピューティング クラスターの作成が完了すると、[状態] の値が [成功しました] に変わりますので、それまで待機してください。

コンピューティング クラスターの作成まで完了したら、Azure ML デザイナー を使用する準備は完了です。次の節では、登録したデータセットと作成したコンピューティング クラスターを使い、時系列データの異常検知を Azure ML デザイナー で実際に行っていきたいと思います。



「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


Azure ML デザイナー を用いた時系列データの異常検知

それでは、Azure ML デザイナー を使って、主成分分析による異常検知モデルを構築し、そのモデルを使って、異常を含む時系列データの異常部分の検知が、実際にできるかどうか検証していきたいと思います。

まずは、異常検知モデルの学習用のパイプラインの構築から行います。なお、Azure ML デザイナー では、学習用のパイプラインをトレーニング パイプラインと呼んでいるため、以降の説明ではそれに合わせて、トレーニング パイプラインと呼んでいきます。

  • Azure ML デザイナーの操作方法や概念については、以下の Azure ML デザイナー 公式リファレンスのページを参照いただくとより理解できますので、参考にしてください(特に画面上部にある動画だけでも見ていただければ、基本的な操作方法が理解できるかと思います)。
  • Azure Machine Learning デザイナーとは : https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-designer

トレーニング パイプラインの構築

1. Azure ML デザイナー へのアクセス : Azure ML スタジオ の左側のメニューから デザイナー を選択します(もしくは、ホーム画面のデザイナー下部の「今すぐ開始」を選択)。

2. 新しいパイプラインの作成を開始する : Azure ML デザイナーの管理画面に移動したら、左上側の [新しいパイプライン] の項目の下にある [+] の項目を選択して、パイプラインの新規作成を開始します。

3. 既定のコンピューティング先を設定する : パイプラインの新規作成を開始すると、画面がトレーニング パイプラインの作成画面に移ります。この際、画面の右側に [設定] のメニューが表示されます。この設定メニューでは、パイプラインで使用する計算リソースの設定や、パイプライン(正確には後述するパイプライン ドラフト)の名称を変更することができます。今回は、事前に作成したコンピューティング クラスターを利用するため、[既定のコンピューティング先の設定] を以下の値に設定してください(本設定では、項目のプルダウンを選択すると、選択可能な設定が表示されるので、その中から指定したい設定を選択してください)。

  • [コンピューティングの種類を選択] : コンピューティング クラスター
  • [Azure ML コンピューティング クラスターを選択する] : ds3v2-test

なお、[設定]のメニューは、メニュー外部を左クリックしてしまうと閉じてしまいますが、画面上部の歯車のアイコンを選択すると再度表示することができます。

4. パイプライン ドラフトの名称を設定する : 作成するパイプラインの名称を設定します。名称は [設定] メニューを下にスクロールすると表示される [ドラフトの名称] から変更することができます。ここでは名称を「anomaly-detection-training-pipeline」と設定したとして、以降は説明していきます。

  • ドラフト(もしくは、パイプライン ドラフト)とは、名前の通り パイプラインの「下書き」、つまり、今から画面上で構築しようとしている、各コンポーネントが接続された処理フローのことを指します。
  • なお、パイプライン ドラフトの名称は、画面上部に表示されている名称を直接編集することでも変更できます。

パイプライン ドラフト全体の設定が完了したら、[設定] メニュー以外の画面を左クリックして、[設定] メニューを閉じてください。そうすると、キャンバス(グレーの背景部分)の部分が広く表示されます。パイプライン ドラフトの構築は、このキャンバスの上に、処理が定義されたコンポーネントを左側の [資産] のメニューから選択して配置し、それらコンポーネント同士を連結することで構築していきます。

5. Azure ML デザイナーの基本操作の説明 : それでは、Azure ML デザイナー の操作方法について、学習用のデータセット(sine_wave_normal)の配置、および列を抽出するコンポーネント([Select Columns in Dataset])の配置、そしてその両者を連結する操作の手順を通して説明します。

【学習用の正常データセットの配置】 [資産] メニューの [Datasets] を選択してください。[Datasets] を選択すると、登録されているデータセットのコンポーネントが一覧として表示されます。ここでは、学習用データセット(sine_wave_normal)をキャンバス上に配置します。コンポーネントをキャンバス上へ配置するには、配置したいコンポーネントをドラッグ & ドロップして、キャンバス上に移動させることで配置することができます。

正常にデータセットのコンポーネントが配置された後の図が以下となります。

他のコンポーネントについても、今操作した方法と同様に、[資産] メニューから配置したいコンポーネントを探し、それをキャンバス上にドラック & ドロップすることで配置を行うことができます。

【列を抽出するコンポーネントの配置】 次に異常検知の対象とする列(sensor1 列)だけをデータから抜き出すために、列を抽出する処理 [Select Columns in Dataset] を配置して、データセットと連結する方法を説明します。

[Select Columns in Dataset] は、[Data Transformation] に属するので、そこから [Select Columns in Dataset] を探して、キャンバス上に配置してください(なお、資産メニュー上部の「名前、タグ、説明で検索します」と書かれている検索欄に探したいコンポーネント名を入力することでも探すことができます)。

[Select Columns in Dataset] が配置できたら、[sine_wave_normal] と [Select Columns in Dataset] を連結します。コンポーネント間の連結は、それぞれの出力ポート(コンポーネントの下部の白丸部分)と入力ポート(コンポーネント上部の白丸部分)をドラック & ドロップで接続することで行います。

  • なお、ここでは出力ポート、入力ポートが共に一つしか存在していませんが、複数の出力ポートや入力ポートを持つコンポーネントも存在します。その場合、ポートごとに入出力されるデータの種類が異なるため注意してください。各ポートが何を入出力とするかは、ポートの上にカーソルを置くと説明が表示されるため、その情報を参考にして判断してください。

6. トレーニングパイプラインに必要なコンポーネントを全て配置して連結する : コンポーネントの配置と連結方法の説明を行ったので、次は今回トレーニングパイプラインで使用する全てのコンポーネントについて、全てキャンバス上に配置し連結してしまおうと思います。以下に記載するコンポーネントを、画像に記載する順番に従って、配置と連結を行ってください(特に、入出力のポートの位置に気を付けてください)。

  • [sin_wave_normal] : 学習用の正常データ。すでに配置済み
  • [Select Columns in Dataset] : 使用する列だけを抽出するコンポーネント。すでに配置済み
  • [Execute Python Script] : Python スクリプトを使ったデータ処理が実行できるコンポーネント。[Python Language] の項目から選択できる。
  • [Train Anomaly Detection Model] : 異常検知モデルの学習(トレーニング)を実行するコンポーネント。[Anomaly Detection] の項目から選択できる。
  • [PCA-Based Anomaly Detection] : 主成分分析(Principal Component Analysis: PCA)を使った異常検知モデルを定義しているコンポーネント。[Anomaly Detection] の項目から選択できる。
  • [Score Model] : 学習済みのモデルを使って、入力データに対し推論を行うコンポーネント。[Model Scoring & Evaluation] の項目から選択できる(推論とは学習済みの機械学習モデルにデータを入力して、出力結果を得る操作のことです。今回は異常検知結果を計算するということが推論することに相当しています)。
  • [Convert to CSV] : 出力結果のデータを CSV ファイルへ変換し、Storage Account(Blob Storage の コンテナ内)へ保存を行うコンポーネント。[Data Transformation] の項目から選択できる。

各コンポーネントの連結を行ったら、次はコンポーネントそれぞれについて必要な設定を行っていきます。コンポーネントの設定の変更は、対象のコンポーネントを選択すると画面右端に表示される、設定変更メニューから行うことができます。

以降の手順では、以下のコンポーネントについて設定を変更していきます。

  • [Select Columns in Dataset]
  • [Execute Python Script]
  • [PCA-Based Anomaly Detection]

7. [Select Columns in Dataset] の設定 : まずは、[Select Columns in Dataset] について、抽出する列を選択します。抽出する列の選択は [Select Columns in Dataset] の設定メニューを開き、[Select columns] の項目の「列の変更」から行います。

「列の変更」を選択すると、以下の画像の様に「Select columns」の設定メニュー画面が表示されます。「列名を入力してください」の項目を選択すると、「time」、「sensor1」の2列がプルダウンに表示されるので、その内「sensor1」だけを選択してください。列を選択すると、メニュー右下の「保存」ボタンが青色になり選択できる様になるので、「保存」を選択して変更した設定を確定してください。

設定が保存されると、以下の画像の様に「Select columns」の項目が「列の名前 sensor1」と表示されます。

以上で、[Select Columns in Dataset] の設定は完了です。

8. [Execute Python Script] の設定 : 前回の記事で説明した部分時系列化の処理は、Azure ML デザイナーのコンポーネントには存在していません。そのため、この部分だけはプログラムを使った処理が必要になります。今回は、Python で記述された処理が実行できる [Execute Python Script] を利用して、部分時系列化の処理を行います。

  • なお、部分時系列化処理用の Python スクリプトは、本記事に記載している内容をコピーして貼り付けるだけなので、スクリプトの内容が理解できていなくても問題はありません。

まずは、配置した [Execute Python Script] の設定メニューを開いてください。メニューを表示すると、「Python script」の項目以下にテンプレート用の Python のコードが書かれているかと思います。

今回はこのテンプレートを使用しないため、一旦全て削除してしまいます。メモ帳などと同じ様に書き換え可能なので、例えば、CTRL + A で全選択し、Delete キーで全削除してください。

削除したら、[Python script] の領域に、以下の部分時系列化を行う Python スクリプトをコピーして貼り付けてください。

# The script MUST contain a function named azureml_main
# which is the entry point for this module.

# imports up here can be used to
import pandas as pd
import numpy as np

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be None.
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):
    #### parameters ####
    window_size = 24 # window size
    ####################

    # Execution logic goes here
    ##### 部分時系列変換 
    # ※出力形式がpd.DataFrame に固定されているので、入力データは1次元時系列データのみ対応
    partial_ts_array = transform_partial_timeseries_vector(dataframe1, window_size, axis=0)

    # 出力は pdandas.DataFrame である必要があるため、numpy array -> pd.DataFrameに変換
    output_df = pd.DataFrame(partial_ts_array[:,:,0])

    # Return value must be of a sequence of pandas.DataFrame
    return output_df,

### 部分時系列ベクトルを作る関数
# X_df: 元の入力データ 2次元Dataframe 
# window: window size
def transform_partial_timeseries_vector(X_df, window, axis=0):
    lst = X_df.values
    
    x_out_l = []
    x_out_l_append = x_out_l.append
    for i in range(lst.shape[axis] - window + 1):
        tmp = lst[i:i+window]
        x_out_l_append(tmp)
    
    x_out_array = np.array(x_out_l)# numpy array
    return x_out_array
上記のコードを入力した状態が以下の画像となります(特に保存ボタンなどを押す必要はなく、書き換えるだけで設定は保持されます)。これで、部分時系列化処理を行うための [Execute Python Script] の設定が完了です。

  • 今回の記事を試すだけであれば、コードの内容を理解しないでも問題はないのですが、一点だけ変更可能なパラメータがあるので、その点について説明しておきます。上から15行目程にある、window_size の変数は、初期設定では24と設定しています。この変数は、部分時系列の長さを決める変数で、この24という設定の場合、部分時系列の列の長さが24時点分になります。この部分時系列の長さは、異常検知の精度に比較的影響を与えるパラメータのため、データによって適切な数字が変わってきます。本記事では、事前に検証して今回のデータに適合する数字を探索し、ある程度上手くいく数字として24を設定値にしておきました。
  • 機械学習のモデルには、この様なデータから直接決めるのが難しいモデル自体を定義するパラメータが多くの場合含まれています。これらのパラメータをハイパーパラメータと呼び、このハイパーパラメータをどの様に決めるかということは、機械学習のモデル構築で重要な課題の一つになっています。

9. [PCA-Based Anomaly Detection] の設定 : それでは次に、主成分分析による異常検知モデルを定義している [PCA-Based Anomaly Detection] の設定を変更していきます。設定メニューを開いたら、以下の設定値について、記載している値に変更してください。

  • Number of components to use in PCA : 4
  • Enable input feature mean normalization : True

1 つめの「Number of components to use in PCA」の設定値は、主成分分析で次元削減した後の主部分空間の次元の数です。この設定の場合、元の24次元空間(部分時系列の長さ)の入力データを4次元の空間に次元削減するということを示しています。

また、「Enable input feature mean normalization」の設定は、データの正規化処理を実行するかどうかを指定する設定値です。正規化とはデータのスケールの変化などを行い、数値的に取り扱いやすくする処理のことです。正規化には複数の種類がありますが、Azure ML デザイナー の [PCA-Based Anomaly Detection] の場合、平均正規化(列ごとにデータの平均値を引いた後、列ごとの最大値 と最小値の差で割るスケーリング処理)が実行されます。

これで [PCA-Based Anomaly Detection] の設定も完了です(こちらも、特に保存ボタンなどを押す必要はなく、書き換えるだけで設定は保持されます)。

以上で全てのコンポーネントの設定が終わりました。これで、トレーニング用のパイプライン ドラフトの構築は完了です。次はついに、構築したパイプライン ドラフトを元にして、異常検知モデルの学習を実行していきます。

10. 異常検知モデルの学習の実行 : 実行の前に、一度作成したパイプライン ドラフトの保存を行ってください(キャンバスの左上辺りにある保存アイコンで保存できます。なお、自動保存がオンであれば自動で進捗が保存されているため、あくまで念のための操作ということになります)。

それでは、構築したパイプライン ドラフトをトレーニング パイプラインとして実行します。キャンバスの右上にある、[送信] ボタンを選択すると、パイプライン実行のセットアップ画面が表示されます。

パイプライン実行のセットアップ画面では、パイプラインの実行結果を保存するための Azure ML の実験(Experiment)を指定する必要があります。今回は初めての実行なので、[新規作成] を選択します。ここでは、実験の名称を「anomaly-detection-demo」とします。実験の名称を [新しい実験名] に入力してください。

実験の指定が終わったら、トレーニング パイプラインの実行準備は完了です。送信を選択して、トレーニング パイプラインの実行を開始してください。

パイプラインの実行が開始されると、上側に配置されたコンポーネントから順番に処理が行われていきます。この処理には、コンピューティング クラスターの起動時間やコンポーネントごとの計算処理にある程度時間がかかります。全てのコンポーネントの実行が完了するまで、しばらく待機してください(今回のデータは、あまり大きなデータではないので、数分程度で全ての処理が完了するかと思います)。

コンポーネントの実行が完了すると、左端が緑色に変わります。データセット以外の全てのコンポーネントの実行が完了したら、トレーニング パイプラインの実行は完了です。

11. 学習用データに対する異常検知結果の確認 : それでは、学習用データに対して、異常検知モデルの推論結果がどの様になっているか確認してみましょう。異常検知モデルによる推論結果を Azure ML デザイナー上で確認するには、[Score Model] の出力ポートを「右クリック」して表示されるメニューから「データを表示する」を選択してください。

データを表示すると、入力データ列(部分時系列化したデータ)と、その右端に異常検知の計算結果の列が追加されたテーブルが表示されます(右端まで画面に入っていないと思うので、右端までスクロールしてください)。

Scored Labels は正常・異常の判定結果(正常:0、異常:1)、Scored Probabilities は学習済みの異常検知モデルによって計算された異常の確率( 0-1 に規格化)を表しています(Azure ML デザイナー では、Scored Probabilities が 0.5 より大きい場合、異常と判定されます)。

上記データについて、Scored Labels の統計情報(列を左クリックすると右側に表示されます)を確認してみます。全てのデータが 0 と判定されており、学習用データは全て正常と判定されていることがわかります。これは、学習用データを正常データとして学習したため、想定通りの結果です。当然の結果の様に思うかもしれませんが、異常検知モデルが上手く学習できていない場合、学習用データについても異常であると誤検知してしまうことがあります。学習用データが正しく正常であると判定できているかどうか確認することは、モデルの妥当性を判断する上で重要なポイントの一つです。

では、推論結果のCSVファイルをローカルPCにダウンロードして、中身のデータを確認してみます。[Convert to CSV] の出力ポートを「右クリック」してメニューを表示し、「データにアクセス」を選択してください。

「データにアクセス」を選択するとブラウザに新しいタブが開き、以下の画面の様に、Azure 上で 対象のCSV ファイル が保存されている Storage Account の管理画面(Blob Storageの コンテナ)に遷移します。保存されている CSV ファイルの名称は「data.csv」です。

この対象の CSV データを左クリックで選択すると、画面の右側に以下の様なメニュー画面が表示されます。メニュー画面の上部にある、「ダウンロード」を選択すると、対象の CSV ファイルがローカル PC 上にダウンロードすることができます。

12. ダウンロードした学習用データの異常検知結果を可視化 : 対象のファイルをダウンロードすると「data.csv」という名称のファイルが、ダウンロード先のフォルダに保存されます。CSV ファイルのため、Microsoft Excel などを用いることで、グラフとして結果を可視化することができます。

ここでは元データの sensor1 列 と data.csv の異常確率(Scored Probabilities 列)をグラフにして比較し、結果の妥当性を確認してみます。以下が横軸を時間にして、sensor1 列(上図)と Scored Probabilities 列(下図)をグラフにした図です。Scored Probabilities は0-1の範囲を取り、0.5以上が異常を表します。このグラフから、全ての時刻について Scored Probabilities は0に近い値を取っており、学習用データについては、全ての時刻で正常であると、正しく判定できていることが確認できました。

推論パイプラインの構築

異常検知モデルの学習ができたので、次は異常を含む検証用のデータを用いて、データの正常でない部分を異常であると正しく検知できるか確認してみます。そのために、まずはトレーニング パイプラインのパイプライン ドラフトを元にして、推論用のパイプライン ドラフトを作成します。

1. バッチ推論パイプラインのパイプライン ドラフトの作成 : それでは、学習の実行をしたトレーニング パイプライン(anomaly-detection-training-pipeline)の画面に戻ってください。キャンバス領域の上部に、[推論パイプラインの作成] の項目がありますので、それを選択してプルダウンを表示してください。

今回は、バッチ推論パイプラインという種類の推論パイプラインを作成します。バッチ推論パイプラインは、学習パイプラインとほぼ同じ機能を持ち、定期的に一定量のデータを推論するのに向いたパイプラインです。一方で、異常検知に限らず、リアルタイムな推論の実行には向いていません。リアルタイムな推論が必要な場合は、リアルタイム推論パイプラインを使用してください。

バッチ推論パイプラインは、プルダウンの [バッチ推論パイプライン] を選択することで作成することができます。選択すると以下の画像の様に、バッチ推論パイプラインのパイプライン ドラフトの画面に、画面が遷移します。なお、推論パイプライン ドラフトは、トレーニング パイプライン ドラフトの名称に「-batch inference」という suffix が付与された名称が自動で初期名称として設定されます。

今回、トレーニング パイプライン ドラフトの名称を「anomaly-detection-training-pipeline」としたため、推論パイプライン ドラフトの名称にも「training」が入ってしまっています。これは少々紛らわしいので、以降は名称を「anomaly-detection-pipeline-batch inference」に変更したとして説明していきます。名称の変更方法は、トレーニング パイプライン ドラフトと同じです。

2. 入力元のデータセットを検証用データセット(sine_wave_anomaly)に置き換える : 作成された推論パイプライン ドラフトでは、入力元のデータセットが、学習用データセットのままになっています。そのため、この入力データセットを検証用の異常を含むデータセット(sine_wave_anomaly)に置き換える必要があります。

コンポーネントの削除は、削除したいコンポーネントを選択し、キャンバス上部にある削除ボタンを押すことで削除できます。もしくはコンポーネントを右クリックして表示されるメニューにある [削除] を選択することでも削除できます(なお、選択してからキーボードの Delete キーを押すだけでも削除できます)。

[sine_wave_normal] をキャンバス上から削除したら、検証用データセットである [sine_wave_anomaly] をキャンバス上に配置して、[Select Columns in Dataset] の入力ポートと連結してください。

以上で、検証用データに対して推論パイプラインを使い異常検知を行う準備ができました。

  • 【参考】 パイプラインの入力データ部分は、データセット以外にも複数のコンポーネントの選択肢があります。例えば [Web Service] の項目にある、[Web Service Input] を利用すれば、Web API として Post リクエストによってデータを受け渡すことが可能です(これはデータの出力についても同様です)。 また、[Data Input and Output] の項目にある、[Import Data] や [Export Data] を使えば、Azure の Storage Account を入力先や出力先にすることもできます。

3. 検証用データに対して、異常検知を実行する : バッチ推論パイプラインの実行手順は、トレーニング パイプラインの場合と全く同じです。

キャンバス上部の [送信] を選択すると、パイプライン実行のセットアップ画面が表示されるので、実行を記録する実験名を選択した後に、[送信] を選択してください。この際、実験については、すでに「anomaly-detection-demo」を作成しているので、今回はそれを選択します。すでに存在する実験を選択するには、[既存のものを選択] を選択した上で、[既存の実験] のプルダウンから対象の実験を選ぶことで指定できます。

推論パイプラインの実行を開始すると、トレーニング パイプラインと同じ様に、コンポーネントが順番に実行されていきます。推論パイプラインでも、全てのコンポーネントの実行には数分程度かかるので、完了するまで待機してください。

4. 検証用データに対する異常検知結果の確認 : 学習用データと同じ手順で、検証用データに対する異常検知結果を確認します。

まずは、デザイナーの画面上で結果のデータを表示してみます。[Score Model] の出力ポートからトレーニング パイプラインの時と同様の手順でデータを表示し、Scored Label 列の統計情報を確認してください。すると、学習用データの時と異なり、異常(数値は1)と判定されているデータが存在していることがわかります。

ただし、これだけではどのデータが異常と判断されたかわからないため、推論結果の CSV ファイル(ファイル名はトレーニング パイプラインの時と同様に data.csv)をダウンロードし、グラフとして可視化してみます。

以下の図は、横軸を時間として、検証用データの sensor1 列(上図)と、異常検知結果である異常確率(Scored Probabilities 列、0.5以上が異常に分類される)(下図)をグラフにして比較した図になります。それぞれのグラフを比較すると、ちょうど振動数が変化している異常部分において、Scored Probabilities が、ほぼ1に近い値を示しています。これは想定通りに、異常部分を正しく異常として検知できていることを示しています。

この様に、Azure ML デザイナー を使用すれば、今回は一部 Python スクリプトによる処理が必要でしたが、ほとんどの作業についてコードを書くことなく、機械学習を用いた異常検知が実施できてしまうということが体感できたかと思います。

リソースグループと属するリソースの削除

Azure のサービスは従量課金制であり、特に一部のサービスはリソースが存在するだけでも料金が発生してしまうため、意図しない課金が発生する可能性があります。Azure ML の場合は、Azure ML のリソースに付随して作成される Storage Account や Container Registry、また今回は使用していませんが、コンピューティング インスタンスの作成を行うと、たとえ起動していなくても VM の managed disk 分の料金がかかることになります。

そのため、もし今後頻繁に利用する予定がないのであれば、Azure ML を作成したリソース グループについて、内部に属するリソースごと全て削除してしまうのが安全です。以下の手順は、Azure ML のチュートリアルに記載されている、チュートリアル実施後のリソースの削除手順となります。今後、作成したリソースを使用する予定がないのであれば、以下の手順に従って、リソースの削除を行ってください。

  1. Azure Portal で、左端にある [リソース グループ] を選択します。
  2. 一覧から、作成したリソース グループを選択します。
  3. [リソース グループの削除] を選択します。
  4. リソース グループ名を入力します。次に、[削除] を選択します。


「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


時系列データの異常検知機能を提供する当社サービス(ML Connect - Anomaly Detection)のご紹介

当社では、IoT 領域における時系列データの異常検知向け機械学習システムとして、ML Connect - Anomaly Detection をサービスとして提供しています。ML Connect とは、要約すると機械学習による学習と推論の自動化システムであり、時系列データの異常検知向けに ML Connect - Anomaly Detection、時系列データの将来値予測向けに ML Connect - Forecast の 2 種類のサービスを提供しています。

ML Connect - Anomaly Detection の概要

ML Connect - Anomaly Detection は、IoT データ基盤と連携することにより、以下の機能が実現できるサービスとなります。

  • 複数機器から収集した時系列データに対して、異常検知モデルの学習処理を行う機能
  • 複数機器から収集した時系列データに対して、定期的に異常検知を実行する機能
  • 検証用の異常を含むデータについて、異常検知モデルの有効性を検証する機能
  • 単一の時系列データの異常だけでなく、複数の時系列データ間の相関異常を検知する機能

また、ML Connect - Anomaly Detectionは当社が提供する IoT 基盤サービスである IoT Core Connect(ICC)と連携して運用することを想定して設計されています。ICC とデータ連携することにより、ゲートウェイデバイスのデータ取得から、機械学習モデルによる学習と推論の実行、そして推論結果の可視化まで一貫したサービスとして提供することが可能となっています。以下の画像は、ML Connect - Anomaly Detection の異常検知結果を ICC で可視化した際のレポート画面のサンプルとなります。

ML Connect - Anomaly Detection の活用先

本サービスにて構築できる異常検知モデルの主な活用先としては、以下に記載する様な各種センシングデータを活用した、機器の予知保全が挙げられます(予知保全 : 設備の状態を連続的に監視することで設備の劣化状態を把握・予知して、部品を交換したり修理したりする保全方式)。

  • 工場の生産設備から収集した機器の状態監視データ(振動・加速度、電流・電圧・電力、温度、熱量、圧力、など)
  • 建築物に設置された各種機械設備の状態監視データ(振動・加速度、電流・電圧・電力、など)
  • 発電施設や発電関連設備の電流・電圧・電力データ

ML Connect - Anomaly Detection の特徴・利点

1. 多変量かつ複雑な時系列構造を持つデータの異常検知を実現 : 本記事では主成分分析を利用した異常検知手法を紹介しましたが、主成分分析は線形変換を基礎とした手法のため、複雑な時系列構造を持つデータに適用することが難しいという課題があります。また、多変量時系列データにおける相関異常を検知することも困難です。

一方、ML Connect - Anomaly Detection では、より発展的な深層学習を用いた再構成ベースの異常検知手法を採用しています。このため、時系列構造の特徴をデータから学習することができ、より複雑な時系列データや多変量の時系列データについても異常検知が適用可能となっています。

2. Azure ML パイプラインを利用することによる低い利用コストの実現 : ML Connect - Anomaly Detection は、本記事で紹介した Azure ML のパイプライン上で動作するシステムとして構築されているため、計算リソースの効率的な自動スケーリング化が可能です。そのため、複数のデータの異常検知について並列処理を実行する際も、運用コストの低下を実現しています。

  • なお、ML Connect では、本記事で紹介した Azure ML デザイナー を用いたパイプライン構築手法ではなく、Python を用いたより詳細な処理のパイプラインが構築可能である Azure ML SDK for Python を利用して開発したシステムとなっています。

Azure ML のパイプライン機能を活用したことによる ML Connect - Anomaly Detection の利点は、以下の様にまとめられます。

  • 手動で管理を行うことが困難な多数のデータについて、異常検知の推論を自動で定期実行することが可能となります。ML Connect - Anomaly Detection の Premium プランの範囲では、100デバイス(ゲートウェイデバイス単位)まで対応しています。なお、設計上はそれ以上の数のデバイスやデータとの連携も可能ですが、その場合はカスタム料金となります。
  • 計算リソースとして、Azure ML のコンピューティング クラスターを用いることにより、効率的な自動スケーリング化を実現しています。このスケーリングの効率化によって、計算リソースを常に必要な分だけ利用することができ、複数のモデルについて並列処理を実行する際も、運用コストの低下を実現しています。
  • エンタープライズ向けに設計されたセキュリティの仕組みを利用しているため、セキュアなシステムとしてサービスを提供することが可能となっています。

ML Connect - Anomaly Detection が不向きな利用用途

一方で、以下に記載する様に、ML Connect - Anomaly Detectionによる異常検知が向かないデータやサポート外となる対象も存在します。

  • ML Connect - Anomaly Detection で実施しているデータ前処理の特性上、高周波数特性が主要な特徴となる機器の信号データに適用するのは難しい可能性があります。
  • 自動車やロボットなど、一つの機器に数十から百を超える多量のセンサーを搭載している機器に対して、各センサー間の相関異常を検知する用途はサポートしていません。
  • 音響データを活用した異常検知はサポートしていません。
  • リアルタイムで監視する必要がある機器の異常検知はサポートしていません。
  • ゲートウェイデバイス上での異常検知モデルの推論処理(エッジデバイス上での推論)はサポートしていません。

もし、以上の様な条件での時系列異常検知に関するご要望がある場合は、当社の機械学習導入支援サービスにて、異常検知モデル構築の実証実験(PoC)段階からサポートすることが可能です。そのため、この様なご要望がある場合でも、ぜひ当社にご相談いただければと思います。



「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


おわりに

本記事では、前編の記事で説明した時系列データの異常検知に関する知識をもとにして、Azure ML デザイナー 上で時系列データの異常検知を実施する具体的な手順について解説していきました。そして、簡単なサンプルデータについてではありますが、実際にある程度上手く異常検知ができるということを確認することができました。異常検知技術は、製造業における予知保全を目的とした利用だけでなく、システムの正常性監視やネットワーク監視など、多くの業界で需要がある技術です。本記事が、異常検知技術の概念やイメージをつかむ上で、少しでも皆様の参考になれば幸いです。

また、当社では時系列データを対象とした機械学習システムとして、本記事の最後に紹介した時系列データの異常検知向けの ML Connect - Anomaly Detection、および時系列データの将来値予測向けの ML Connect - Forecast、という2種類のサービスを提供しています。もし、自社で取得している時系列データについて、その活用方法を見出せていないなどの課題をお持ちの担当者の方がいましたら、ぜひ当社までお問い合わせください。

なお、当社では時系列データに限らず、画像、言語、マーケティング、Web サイト、IoT 機器のセンサーデータなど、様々な領域のデータについて、AI や機械学習を活用するための支援を行っています。業務で収集しているデータを活用したい、AI を使用してみたいが何をすればよいかわからない、やりたいことのイメージはあるがどの様なデータを取得すればよいか判断できないなど、データ活用に関する課題であれば広くサポートしますので、その際はぜひ当社までお気軽にご相談いただければと思います。


関連ページ

「CogEra」はこちら
「ML Connect」はこちら
「機械学習導入支援サービス」はこちら

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。