多少調べたので、Amazon OpenSearch Service(AOS)の異常検知について、調べた情報のメモをします。
理解としては、
- データの学習期間はアンドキュメントだが、過去のデータポイント含めてストリームにモデルは学習されていく。うので、過去からの傾向が Anomaly Grade には考慮されるはず。
- Detector intervalで指定した時間でデータが集計(avg, sum, min, max)され、そのポイントをストリームにモデルに送ることで学習する(値分布の密度を学習する。低密度なものが Anomaly Grade が高くなるように)
- リアルタイムに集計したデータポイントへ Anomaly Grade を返す
- このときにデータが不足していると Data confidence が低い
- より多くのデータを投入していくことで、 Confidence が高まっていく
まずドキュメントはこちら。
まとめ
- OpenSearchの異常は、時系列データの異常な動作の変化
- 異常検出は、ランダムカットフォレスト(RCF)アルゴリズムを使用して、OpenSearchデータの異常をほぼリアルタイムで自動的に検出
- RCFは、教師なし機械学習アルゴリズムであり、着信データストリームのスケッチをモデル化して、各着信データポイントの値を計算anomaly gradeしconfidence scoreます
- 検出器の定義
- Detector interval
- 検出器はこの間隔でデータを集約し、集約された結果を異常検出モデルに送ります。
- この間隔を短く設定するほど、検出器が集約するデータポイントは少なくなります。
- 異常検出モデルは、連続するデータポイントを使用してモデルのサンプルを作成する手法であるshinglingプロセスを使用します
- このプロセスには、連続した間隔から特定の数の集約データポイントが必要です。
- 実際のデータに基づいて検出器の間隔を設定することをお勧めします
- 長すぎると結果が遅れる可能性があり、短すぎると一部のデータが失われる可能性があります。
- Window delay
- データがリアルタイムではなく一定の遅延でOpenSearchに取り込まれることを検出器に通知
- この遅延を考慮して検出器間隔をシフト
- E.g. 検出器の間隔が10分で、データが一般に1分の遅延でクラスターに取り込まれるとします
- 検出器が2:00に実行されると仮定します。検出器は、1:50から2:00までの最後の10分間のデータを取得しようとしますが、1分の遅延のため、9分間のデータしか取得せず、1:59から2:00までのデータを見逃します
- ウィンドウ遅延を1分に設定すると、インターバルウィンドウが1:49〜1:59にシフトするため、検出器は検出器インターバル時間の10分すべてを占めます。
- E.g. 検出器の間隔が10分で、データが一般に1分の遅延でクラスターに取り込まれるとします
- Detector interval
- モデルを構成する
- 異常をチェックするインデックスのフィールド
- 各機能の集計方法を選択する必要がありaverage()、count()、sum()、min()、またはmax()
- 異常をチェックするインデックスのフィールド
- 結果を観察する
- Anomaly grade
- 0から1までの数値で、データポイントの異常度を示します
- 異常グレード0は「異常ではない」ことを表し、ゼロ以外の値は異常の相対的な重大度を表します
- Data confidence
- 報告された異常グレードが予想される異常グレードと一致する確率の推定値
- モデルがより多くのデータを観察し、データの動作と傾向を学習するにつれて、信頼度が高まります 信頼度はモデルの精度とは異なることに注意
- Anomaly grade
AWS Blog
まとめ
- 異常検出
- 一般的な定義の1つは、「低密度領域にあるデータポイント」です
- 値分布の高密度領域は、データポイントが存在する可能性が高いドメインの領域
- 低密度領域は、データが表示されない傾向がある場所
-
- これの右下とかにある点は、低密度な点で、これって異常値っすよね。という意味。(異常値じゃない数値は高密度に分布されるよね)
- 一般的な定義の1つは、「低密度領域にあるデータポイント」です
- ランダムカットフォレストと異常しきい値
- 出力の理解
- 異常検出器は、 2つの値を出力します
- Anomaly grade
- ゼロの場合は、対応するデータポイントが正常であることを示します
- ゼロ以外のグレードは、RCFによって出力された異常スコアが計算されたスコアしきい値を超えていることを意味し、したがって異常の存在を示します
- 冒頭で紹介した数学的定義を使用すると、勾配は異常の密度に反比例します。 つまり、イベントがまれであるほど、対応する異常グレードが高くなりま
- Data confidence
- Anomaly grade
- 異常検出器は、 2つの値を出力します
- サンプル
そもそもランダムフォレストって
まとめ
決定木
ランダムフォレスト
- 木が集まって、アンサンブル的な学習を行うので、フォレストと称されます
- 決定木の集合体なので、条件分岐をもった幾つかの決定木をランダムに構築して、それらの結果を組み合わせて、「分類」または「回帰」をする方法で、アンサンブル学習と呼ばれます
- 多数決的な方法
- バギング
- ランダムフォレストは、比較的シンプルなアルゴリズムなので、高速に動作
- 分岐に用いられている「性別は男か?」「年齢は10歳以上か?」のような条件分岐を、説明変数と呼ぶ
- 木が集まって、アンサンブル的な学習を行うので、フォレストと称されます
AOS で触ってみる
ステップ 1: ディテクターを作成する
- 個別の異常検出タスク
- 複数作成可能
- Data Source の設定等
ステップ 2: ディテクターに機能(feature)を追加する
- 異常をチェックするインデックス内のフィールドを指定
- average()、sum()、count()、min()、max() から集計方法を選択
- オプションで、Category field(分類機能)、Window size(集計間隔)を指定可能
ステップ 3: 結果の確認
- リアルタイムと履歴がある