OCIサンプルアーキテクチャ "Anomaly Detection 同期検出・非同期検出"

## 背景
OCI Anomaly Detectionを用いて、異常検出システムを構築する際にデータの連携、ストレージ、検知結果の表示に関して様々なアーキテクチャのパターンが考えられます。
この記事では、モデルの作成と同期検出・非同期検出のサンプルアーキテクチャをいくつか紹介し、その用途や違いをまとめました。


## OCI Anomaly Detectionとは
OCI Anomaly Detectionは、多変量または単変量の時系列データに対し、リアルタイムおよびバッチの異常処理をするAIサービスです。異常検出のモデル作成やトレーニングが簡単にできるフルマネージドサービスです。
OCI Anomaly Detectionの詳しい説明は[こちら](https://qiita.com/maato/items/f9f6ca56b8fd80c0dc6f)の記事をご参考ください。

https://qiita.com/maato/items/f9f6ca56b8fd80c0dc6f

## 異常検出の方法
OCI Anomaly Detectionの異常検出には、「同期検出」と「非同期検出」の２つの検出結果の取得方法があります。ワークロードとデータポイントの数に合わせて2つの方法を選択できます。データポイントとは、シグナル数×行数の値です。

### 同期検出とは
アプリケーションやデバイスから取得されたデータに対して、異常が検出され結果がすぐに取得される、同期的に実行される検出です。
OCI Anomaly Detectionでは30,000データポイントより小さい場合に同期検出が可能です。

### 非同期検出とは
検出用のデータに対して、異常が検出され、後で検出結果が取得される非同期で実行される検出です。非常に大きなデータセットに対してより正確な結果を出力します。OCI Anomaly Detectionでは30,000データポイント以上の場合は、ジョブを使った非同期検出のみ可能です。

## 異常検出のデザインパターン
次に異常検出のデザインパターンについて紹介します。異常検出のアーキテクチャにはワークロードに応じて様々なデザインパターンを選択することができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633103/c6630e49-1697-f8a4-f940-009a12aa700b.png)

今回は異常検出モデル作成と同期・非同期検出のサンプルアーキテクチャを紹介します。あくまでサンプルの構成例です。ワークロードの要件に合わせて、アーキテクチャを組み替えてください。では、さっそく紹介していきます。


## 異常検出モデル作成のアーキテクチャ
まず異常検出のモデルを学習するためのアーキテクチャの例を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633103/4d6fc319-166f-07b9-9604-1081a65edab6.png)


異常検出モデルの作成に関しては同期検出・非同期検出において、アーキテクチャに大きな違いはありません。
異常検出のモデルを作成するサンプルアーキテクチャのそれぞれの役割をフローごとに簡単に説明します。

「データソース」
デバイスやDatabaseのデータを用意します。モデル作成時のデータは正常時のデータを用います。

「データ収集」
データソースからData Integrationを使ってObject Storageにデータを保存します。直接Object Storageに吐き出したり、StreamingとService Connector Hubを用いて保存することも可能です。

 データ連携サービス：Data Integration, Streaming, Connector Hub, 
 ストレージ：Object Storage, Autonomous Transaction Processing, Influx DB

「データ加工」
Object Storageのデータを、Anomaly Detectionで使用できるようデータ形式を加工します。Anomaly Detectionの学習データの要件は最初の列にtimestamp、その後に他の数値属性、シグナルおよびセンサーを含む列である必要があります。
詳細は「[トレーニングおよび検出データの要件](https://docs.oracle.com/ja-jp/iaas/Content/anomaly/using/data-require.htm)」をご確認ください。

サービス：Virtual Machine, OKE, Data Science, Data Flow

「分析(Modeling)」
Anomaly Detectionを使ってObject Storageの学習用データを使いデータ・アセットを作成します。データ・アセットを使い異常検出モデルを作成します。

以上が異常検出モデルのサンプルアーキテクチャの説明です。



## 同期検出システムのサンプルアーキテクチャ
次に同期検出のサンプルアーキテクチャの例を紹介します。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633103/d2a93c0e-d38c-8fb7-b811-fae2a8ed07cf.png)


同期検出は検出データセットが30,000データポイントより小さく、時間依存のワークロードで使用します。
同期検出のサンプルアーキテクチャのそれぞれの役割を説明します。



「データソース」
デバイスやセンサーなどの検知対象のデータを取得します。

「データ収集」
ストリーミングサービスを使いリアルタイムに送信されたデータをFunctionsへ送信します。

データ連携：Streaming, Connector Hub
    
「データ加工」
Connector Hubを通じて送信されたデータをAnomaly Detectionで用いるためtimestampと数値データ型に加工します。

サービス：Functions

「分析(Detect)」
FunctionsからAnomaly Detectionを呼び出し、異常検出を実行します。

サービス：Functions, Anomaly Detection

「アクション」
異常が検出された場合、Oracle Analytics Cloud(OAC)のダッシュボードで表示をしたり、異常検出をトリガーにVM上のアプリケーションで次のアクションを行ったりできます。

サービス：Oracle Analytics Cloud(OAC), Virtual Machine, Notification, etc...

以上が同期検出のサンプルアーキテクチャの説明です。


## 非同期検出システムのアーキテクチャ
次に非同期検出のサンプルアーキテクチャの例を紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633103/45447e97-8f6d-6a74-20cb-c8fc82f35072.png)


非同期検出は検出データセットが30,000データポイントより多く、時間の制約がない場合に使用します。
非同期検出のサンプルアーキテクチャのそれぞれの役割を説明します



「データソース」
DatabaseやLogなどの検知対象のデータを取得します。

「データ収集」
Streamingサービスを使い送信されたデータをObject Storageへ保存します。

データ連携サービス：Streaming, Connector Hub
ストレージ：Object Storage, Autonomous Transaction Processing, Influx DB
    
「データ加工」
Object Storageに保存されているデータをAnomaly Detectionで用いるためtimestampと数値データ型に加工します。

サービス：Virtual Machine, Functions, Data Flow, Data Science

「分析(Detect)」
FunctionsからAnomaly Detectionを呼び出し、異常検出のジョブを作成します。ジョブが実行され非同期で検出結果を取得できます。

サービス：Functions, Anomaly Detection

「アクション」
異常が検出された場合、Oracle Analytics Cloud(OAC)のダッシュボードで表示をしたり、異常検出をトリガーにVM上のアプリケーションで次のアクションを行うことができます。

サービス：Oracle Analytics Cloud(OAC), Virtual Machine, Notification, etc...

以上が非同期検出のサンプルアーキテクチャの説明です。

## まとめ
今回はAnomaly Detectionのサンプルアーキテクチャを紹介しました。しかし、このアーキテクチャが正解ではなく、扱うデータ、ワークロードやプロジェクトの予算によって選択すべきサービスは変わってきます。様々なアーキテクチャパターンを知り、状況に応じたアーキテクチャを組めることがこの記事の目的になります。


## 参考
[Oracle Cloud Infrastructureドキュメント 異常検知](https://docs.oracle.com/ja-jp/iaas/Content/anomaly/using/home.htm)
[Oracle Cloud Infrastructure Anomaly Detectionを使って簡単に異常検出をしてみる](https://qiita.com/maato/items/f9f6ca56b8fd80c0dc6f)