Amazon Lookout for Metricsのcontinuousモードでの構築

## はじめに
Amazon Lookout for Metricsのcontinuousモードを構築する機会がありましたので
学んだことを記載します。
## 前提
・AWSアカウントがあること
・Lookout for Metricsとのデータ連携にはS3を利用
・データ形式はCSV
・データ解析のインターバルは1時間
・分析モードはcontinuousモードを使用
## やること
・異常検知させるデータを作成する(historical dataとcontinuous data)
・S3のバケットを作成し、データをアップロードする
・Detectorをcontinuousモードで設定する

## データの作成
今回も自作したデータを使ってみます。
Continuousモードでは「historical data」と「continuous data」を使用します。
※Continuousモードではhistorical dataは任意ですが、検知できるようになるまでの時間を短縮できるため今回は設定しています。
>**検出器のステータス**
Lookout for Metrics では通常、検出器のステータスがActiveに変わるまでに、少なくとも 300 個の累積データ ポイントが必要です。たとえば、履歴データのデータ ポイントを 200 個提供した場合、検出器がアクティブになるには、連続データのデータ ポイントを 100 個取り込む必要があります。日次間隔の場合、検出器のステータスは 14 日間の学習後にActiveに変わります。
履歴データが利用できない場合は、学習段階に次の時間がかかります。
5分間隔：25時間
10分間隔：50時間
1時間間隔：12.5日
1日間隔：14日

https://docs.aws.amazon.com/lookoutmetrics/latest/dev/lookoutmetrics-welcome.html

作成したデータは以下になります。
historical dataとしてこのようなデータを600行ほどCSVで作成しています。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/fc47c96c-b3ed-31bc-903b-12c9a42c82f9.png">

continuous dataとしてこのような時間毎のデータをCSVで作成しています。
continuous dataは「今現在の日時」以降のtimestampで作成してください。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/c5bbdf22-a46c-d860-b843-94868f9adcda.png">

## S3にバケットの作成とファイルのアップロード
Continuousモードではcontinuous dataのディレクトリ構成を、データ解析のインターバルに合わせる必要があるため、今回のS3のディレクトリ構成はこのようになります。
※historical dataはフォルダの指定は無さそうなので任意の場所で大丈夫です。
```
├historical data
├ yyyy/
    ├ MM/
      ├ dd/
        ├ hh
```

S3のバケットは任意の名前で作成します。
作成したS3のバケットに上記の構成でディレクトリを作成します。
作成したディレクトリに先ほど作成したhistorical data用のファイルとcontinuous data用のファイルをアップロードします。

## Lookout for Metricsの設定
Detectorを設定していきます。
検索窓で「Amazon Lookout for Metrics」と検索します。
「Create Detector」を選択します。
detectorの設定画面に変わるので任意の「Detector name」を入力します。
Intervalを選択します。ここでは1時間間隔のデータで作成していますので「1 hour intervals」を選択し「Create」を押下します。
<img width="400" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/a86b35fa-fada-db67-f154-7fa322ea6068.png">
次にdatasetを設定します。
「Add a dataset」を押下します。
<img width="300" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/4e45df01-0352-4054-81ef-4cf78cac4e44.png">
ここでは以下の用に入力します
Name：任意の名前
Timezone ：Asia/Tokyoを選択
Datasource ：S3を選択
Detector mode：Continuousを選択
Path to an object in your continuous dataset：continuous dataのファイルパスをS3のURIからコピーして貼り付けてください。
<img width="500" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/e1e5dced-23b3-a5fd-3032-abd483bbc4b9.png">
Continuous data s3 path patternではcontinuous dataを置いている
ディレクトリパスのパターンを選択します。

Use historical dataにチェックを入れて
Historical data：S3のURIからコピーしたものを貼り付けてください
<img width="500" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/07a9e38c-7af5-060e-f15d-1bd7c3035c7c.png">

Service accessでは新規作成であればCreate and use a new service roleを選択してください。
<img width="500" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/3de1b662-81c0-9820-fae8-2f0e75cf137f.png">


「Detect format settings」を押下します
Formatの画面が出ますがデフォルトのままで大丈夫です。
「Next」を押下します。
「Map field」sの画面では以下を設定します。
Measures：Numberを選択します
Dimensions：Productを選択します
<img width="４00" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/5222279c-c2b5-462a-1cd4-146bb5dec2cf.png">

※Backtest作成の記事でも書きましたが重要な項目ですので再度記載します。
Measuresとは異常検出を行う際の分析対象となる数値データになります。
時間に基づくデータポイントであり、異常が発生した際に検出の対象となります。

Dimensionsとは異常検出を行う際にデータを細分化するための属性やカテゴリです。Dimensionsは、Measures（測定値）と組み合わせることで、特定のデータポイントに関する分析を可能にします。

※ Lookout for Metricsの費用はメトリクス数で計算されます。
メトリクス数は「Measures×Dimensions」で計算されます。
そのため、Measuresの数やDimensionsの数が増えると費用が膨大になる可能性がありますので注意してください。
なお最初の月は100メトリクス分の無料枠があるようです。
>AWS 無料利用枠
>Lookout for Metrics は無料で開始できます。サービスの使用を開始すると、最初の月には 100 のメトリクスを分析するまで料金はかかりません。

https://aws.amazon.com/jp/lookout-for-metrics/pricing/

設定を続けます。
Timestamp:Timestampを選択
Format では「Enter a timestamp format Timestamp format」を選択し
```
yyyy-MM-ddHH:mm:ss
```
と入力します
<img width="４00" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/c32211c7-c52f-c387-fd64-b0baba56d112.png">

今回はMeasuresはNumberの1つ、DimensionsはA,B,Cの3つとなります。
値を入力すると見積もりをしてくれます。
問題なければ「Next」を押下します。
確認画面になりますので内容を確認し問題なければ
「Save and Activate」を押下します。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/6a952df2-c998-779e-431f-66aea7c126f5.png">

内容を確認し問題なければ「confirm」と入力しActivateを押下します。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/f7a8012c-cee9-7a5f-976f-70aaf5d6241f.png">
検出器をアクティブ化するとコストが発生し始めます。

３０～４０分程度待って設定に問題なければDetectorのステータスがActiveとなります。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/7a7493ef-45f4-f6a3-d994-c17fcbb42b71.png">


## 確認
作成したDetectorを選択し「Anomalies」を押下すると検知結果が確認できます。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/b71e7d7f-bbaf-6188-0261-1c61008b3409.png">
どのディメンションでエラーを検知しているか、検知したエラーのメトリックのグラフが確認できます。
今回はCというディメンションで異常検知しているのがわかります。
<img width="700" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/806f8505-9d24-d136-2748-677b621370d6.png">

またグラフでは異常は青色で表示されます。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/f59c4265-7a19-f59b-4618-94947beb2f3a.png">
ここでは7/24の22:00 にCountが1003となっているのが異常として検知できているのがわかります。


## まとめ
Backtestモードに続いてcontinuousモードを記事にしましたが、continuousモードではS3のフォルダ構成をインターバルに合わせる必要があることを知らず、DetectorがなかなかActiveにならず苦労しました。
なお、データ解析を1日インターバルにした場合は、設定やデータに問題がなくてもDetectorがActiveになるまでに48時間ぐらいかかりました。