時系列の異常検出

重要

Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。

2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。

ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。

入力時系列データの異常を検出します。

カテゴリ: 時系列

注意

適用対象: Machine Learning Studio (クラシック) のみ

類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。

モジュールの概要

この記事では、Machine Learning Studio (クラシック) の時系列異常検出モジュールを使用して、時系列データの異常を検出する方法について説明します。 モジュールは、入力として提供する時系列の通常の動作特性を学習し、その情報を使用して通常のパターンからの偏差を検出します。 このモジュールでは、全体的な傾向の変化と、値の大きさまたは範囲の変化の両方を検出できます。

時系列データの変更の検出には、幅広いアプリケーションがあります。 たとえば、センサー、ネットワーク、またはリソースの使用状況をほぼリアルタイムで監視するために使用できます。 サービス エラー、サービス使用状況、およびその他の KPI を追跡することで、重大な異常に迅速に対応できます。 その他のアプリケーションには、医療と金融が含まれます。

異常検出メソッド

異常検出は、"通常" 動作のモデルに準拠していないデータのパターンを見つける問題です。 このような変化を検出するための一般的な方法は、人間が計算した単純なしきい値を使用するか、平均と標準偏差を使用して、データが平均から大きく逸脱したタイミングを判断します。

ただし、このような単純なアプローチは、時系列データに簡単に適応できません。

  • 多数の誤った異常が生成される

  • メソッドは、データ値の変更には適用されません

  • 大規模な時系列に簡単にスケーリングできない

このモジュールでは、時系列傾向からの分散を評価するための 2 つの追加の方法を提供します。

  • 上向きおよび下向きの変化の大きさを測定する

    たとえば、Web サービスの要求の数は、しばらくの間最適な場合があり、その後大幅に増加します。

  • 傾向の方向と期間の測定: 正の変化と負の変化

    たとえば、サービス キューの長さの上昇傾向が続く場合は、根本的な問題を示している可能性があります。 全体的な傾向は一貫して増加しているため、安定と見なされる場合がありますが、傾きの変化は異常としてフラグ付けされる可能性があります。 逆に、サーバーのメモリ使用量を監視している場合、空きメモリ サイズが一定に減少すると、問題が発生する可能性があります。

時系列の異常なパターンの例

上向きと下向きのレベルの変更

たとえば、Web サービスに対する 1 日あたりの要求数を一定期間にわたって監視していて、要求の数が特定の範囲内に留まるように見えるものとします。 ただし、Web サービスを更新すると、その Web サービスに対する要求の数が変わります。 新しい傾向は、元の傾向よりも高いか低いかのいずれかです。上向きと下向きの両方のスパイクを検出できます。

upward and downward level changes

正または負の傾向の変化

たとえば、サービス サポート サイトでキューの長さを監視しているとします。 持続的な上昇傾向は、基になるサービスの問題を示している可能性があります。

それ以外の場合は、永続的な負の傾向が異常である可能性があります。 たとえば、サーバー上のメモリ使用量を監視している場合、空きメモリ サイズが縮小すると、メモリ リークの可能性を示している可能性があります。

positive or negative trend change

リソース

このアプローチの基礎となる研究の詳細については、次の記事を参照してください。

  • Shen-Shyang Ho;Wechsler, H., "交換性のテストによるデータストリームの変化を検出するためのマルチンゲール フレームワーク", パターン分析とマシン インテリジェンス, IEEE Transactions , vol.32, no.12, pp.2113,2127, 2010年12月

    ソースと引用 (Microsoft Academic)

  • Valentina Fedorova、Alex J. Gammerman、Ilia Nouretdinov、Vladimir Vovk、"オンラインでの交換可能性をテストするためのプラグイン martingales"、ICML 2012

    ソースと引用 (Microsoft Academic)

  • Vladimir Vovk、Ilia Nouretdinov、Alex J. Gammerman、"Testing Exchangeability Online"、ICML 2003。

    ソースと引用 (Microsoft Academic)

時系列異常検出を構成する方法

  1. 時系列異常検出モジュールを実験に追加し、時系列を含むデータセットを接続します。

    入力として使用されるデータセットには、文字列形式の datetime 値を含む列と、傾向値を含む別の列を数値形式で少なくとも 1 つ含める必要があります。 その他の列は無視されます。

    各行は、その時点の値を表す時系列のデータ ポイントに対応するため、時刻値は一意である必要があります。

  2. データ列: 数値データ値を含むデータセット内の 1 つの列を選択します。 これらの値は、時間の経過に伴う母集団の合計、1 か月あたりのコスト、一定期間の温度など、モデル化する傾向のデータ ポイントです。

  3. 時間列: 関連付けられた時系列値を含むデータセット内の 1 つの列を選択します。

    列には有効な datetime 値が含まれている必要があります。つまり、すべての日付が、.NET Frameworkでサポートされている日付の範囲内にある必要があります。

    Time 列では、DateTime データ型を使用する必要があります。 日付が文字列形式の場合は、apply SQL Transformation モジュールを使用してキャストするか、R スクリプトの実行モジュールを使用して変換できます。 日付が整数として表される場合は、適切な datetime 変換関数を使用して、有効な datetime 形式を使用して値を表す必要もあります。

    たとえば、次の SQL ステートメントは、Excelシリアル日付値を datetime 形式に変更します。

     SELECT CAST([SerialDate]  AS SmallDateTime) as [NewValidDate] from t1;  
    

    日付の値の形式が正しければ、メタデータの編集モジュールを使用して列の種類を DateTime に設定します。

  4. マルチンゲールの種類: 使用するマルチンゲール関数を選択します。

    • PowerAvg。 このオプションは、パワー マルチンゲールの限界実装です。

      既定値は PowerAvg で、追加のパラメーターはありません。 このオプションは、より安定した異常検出機能を提供し、ほとんどのニーズに適している必要があります。

    • 電源。 電源マルチンゲールの非限界実装。

      Power オプションを使用すると、Epsilon パラメーターに対して 0 ~ 1 の値を指定して検出器の感度を制御できます。 一般に、イプシロン値が高いほど、異常に対する感度は高くなりますが、確実性は低くなります。

    マルチガルの定義とこのモジュールで使用される方法については、「機械学習を使用した異常検出による時系列データの異常の検出」を参照してください。

  5. ストレンジネス関数の種類: このオプションは、特定の種類の異常に使用されます。 次の 3 つのオプションがサポートされています。これ以上パラメーターは必要ありません。

    • RangePercentile

      これは既定であり、ほとんどの場合、レベルの変更を検出するために使用されます。

    • SlowPosTrend。 肯定的な傾向の変化を検出するには、このオプションを選択します。

    • SlowNegTrend。 負の傾向の変化を検出するには、このオプションを選択します。

  6. マルチンゲール 値と ストレンジネス値の長さ: 履歴ウィンドウのサイズを指定します。これは、ルックバック履歴でマルチンゲール値を計算するために使用されます。

    既定値は 500 ですが、0 ~ 5000 の任意の整数を指定できます。 大規模な時系列の場合、既定値は適切に機能します。 時系列が小さい場合は、異常な動作の予想される長さの値を見積もることができます。

    通常、これら 2 つのパラメーターを同じ値に設定することをお勧めします。

  7. ストレンジネス値の長さ: 各データ ポイントで異常を計算するために使用される履歴ウィンドウの長さを指定します。

    既定値は 500 ですが、0 ~ 5000 の任意の整数を指定できます。

    このパラメーターには、 マルチンゲールの長さと同じ制限があります。 つまり、"通常の" 動作を学習するために必要なデータ ポイントの推定数に値を設定する必要があります。

    既定値の 500 はほとんどの場合に適していますが、"normalcy" が測定されるスケールが異なる場合は、ストレンジネス値の長さをマルチンゲールの長さよりも大きな値にすることをお勧めします。

    たとえば、エラーを監視していて、データ ポイントが 15 分間隔でキャプチャされると仮定した場合、通常の傾向を学習するために必要な時間は月によって大きく異なる場合があります。

    一般に、より大きなウィンドウ サイズを使用すると、より大きなデータセットについてモジュールが学習する必要があるため、パフォーマンスが低下します。

    通常、これら 2 つのパラメーターを同じ値に設定することをお勧めします。

  8. アラートのしきい値: 異常スコアによってアラートが生成される値を指定します。

    既定値は 3.25 です。つまり、スコアが 3.25 以上の行ごとにアラートが生成されます。 ○

    0 ~ 100 の任意の浮動小数点数を指定できます。 ただし、しきい値の選択には、秘密度と信頼度の間にトレードオフがあります。

    • しきい値を小さくすると、検出機能は異常に対してより機密性が高くなり、より多くのアラートが生成されます。

    • しきい値を小さくすると、通常の変更が異常として誤って分類される可能性があります。

  9. 実験を実行します。

    このモデルを個別にトレーニングする必要はありません。アルゴリズムは、このモジュールへの入力として指定したデータからパターンを学習します。

結果

トレーニングが完了すると、モジュールは入力時系列と同じ長さの時系列を出力します。ただし、異常な可能性がある値を示すために、2 つの列が追加されます。

  • 異常スコア: 最初の列には、時系列値が異常である可能性を表すスコアが含まれています。

  • アラート: この列には、値が 0 または 1 のフラグが含まれています。1 は異常が検出されたことを意味します。 スコア列に基づいてアラートを生成するためのしきい値を設定できますが、 アラートしきい値 パラメーターは設定できます。

次の例では、異常を検出するマルチンゲール関数を設定する方法と、結果を解釈する方法を示します。

レベルの変更を検出する

さまざまな設定の影響を示すために、この例で使用されるデータセットの例は、8870 個のデータ ポイントで構成され、3 つのレベルが変更されています。 このデータに基づいて、次のパラメーターを使用して 2 つのモデルを作成しました。

  • マルチンゲールの種類: PowerAvg

  • Strangeness 関数型: RangePercentile

  • マルチンゲールの長さ = 50

  • ストレンジネス値の長さ = 50

モデルは受信データに対してトレーニングされましたが、 アラートのしきい値には別の値が適用されました。 予測の結果は、モデル 1 とモデル 2 の次の画像にプロットされます。 これらのグラフでは、青い線はデータ値を表し、赤い線は異常に対して発生した アラート を表します。

アラートのしきい値 0.9

level change with alert of 0.9

このモデルでは、しきい値が低いため、変更が瞬間的な場合でもアラートが発生 (異常検出) されます。

監視している時系列の種類によっては、これらのアラートの一部が誤ったアラートと見なされる場合があります。 ただし、異常を見落とすことができない場合は、より低いしきい値が推奨される場合があります。

アラートのしきい値 3.25

level change with alert of 3.25

このモデルでは、アラートのしきい値が大幅に高くなり、その結果、モデルは長く持続する変更のみを検出します。 アラートのしきい値が高い方が、より長く続く変更のみをキャッチする必要があるシナリオでは、より望ましい場合があります。

正の勾配変化を検出する

異常検出用のこのオプションを示すために、300 個のデータ ポイントを含むデータセットの例を使用しました。 すべてのポイントが全体的にプラスの傾向を形成し、2 つの異常が発生しました。

ここでも、アラートのしきい値を除き、同じパラメーターを使用して 2 つのモデルを作成しました。

  • マルチンゲールの種類: PowerAvg

  • Strangeness 関数型: SlowPosTrend

  • マルチンゲールの長さ = 50

  • ストレンジネス値の長さ = 50

これらのグラフでは、青い線はデータ値を表し、赤い線は異常に対して発生したアラートを表します。

アラートしきい値 4.25

positive trend with alert of 4.25

アラートしきい値 6.0

positive trend with alert threshold of 6.0

さまざまなアラートしきい値を試して、異常検出シナリオに適したレベルの感度を見つけることをお勧めします。

想定される入力

名前 Type 説明
タイムスタンプと値を含む入力データ データ テーブル 日付/時刻スタンプと値を含む入力データ。

モジュールのパラメーター

名前 Type Range 省略可能 Default 説明
値の列 ColumnSelection 必須 追跡する時系列を含む列を選択する
ウィンドウ サイズ Integer 必須 分析ウィンドウのサイズを制御する値を指定する
しきい値 Float オプション 異常を識別するためのスコアのしきい値を決定する値を指定します

出力

名前 Type 説明
異常スコアで注釈が付けられた時系列 データ テーブル 異常間隔を持つデータセット。

関連項目

異常検出
1 クラス サポート ベクター マシン
PCA ベースの異常検出