Amazon SageMaker IP Insights アルゴリズムを試してみる

[Amazon AI by ナレコム Advent Calendar 2018](https://qiita.com/advent-calendar/2018/knowcom-amazonai)の16日目の記事です。
今日は、Amazon SageMaker IP Insights アルゴリズムを試してみました。
IP Insights アルゴリズムは、IPアドレスの異常な動作や使用パターンを検出するものです。
[チュートリアル](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/introduction_to_amazon_algorithms/ipinsights_login/ipinsights-tutorial.ipynb)があるので、実行してみましょう。

## ノートブックインスタンスの作成
1．AWS Consoleを開き、SageMakerを開きます。
2．左のメニューの`ノートブック`->`ノートブックインスタンス`を選択し、`ノートブックインスタンスの作成`をクリックして新規作成します。
![ipinsights01.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/6151b290-6a4f-3b3d-303f-af78553b3ede.png)
3．ステータスが`InService`になったら、アクションにある`開く Jupyter`をクリックして、Jupyterを開きます。

## Jupyterの作成
1．`SageMaker Examples`タブをクリックし、`Introduction to Amazon Algorithms`を展開します。
2．`ipinsights-tutorial.ipynb`の右側にある`Use`をクリックし、`Create Copy`をクリックしてチュートリアルのコピーを作成します。
3．S3を作成します。バケット名は、`sagemaker-ipinsights-test`としました。
![ipinsights05.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/60196c25-e55c-322d-e575-21c89f73b88a.png)
4．作成したS3を指定します。
![ipinsights06.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/1f30e372-1382-acb6-b248-3a7e7c7b6177.png)

## データセットの準備
1．データセットをインストールします。
![ipinsights07.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/dcc38678-50b1-75b8-27e9-de0ba463cfd8.png)

2．ファイルを読み込みます。
![ipinsights08.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/738eb59f-34eb-e957-dbce-fc3c1edd1b76.png)

3．タイムスタンプをDateTimeオブジェクトに変換します。
![ipinsights09.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/7dcb673a-2566-6cda-41ac-a9c32b0032de.png)

4．タイムゾーンの一致を確認します。
![ipinsights10.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/12e47683-efd4-00b3-7893-ac430f9fd8d8.png)

5．タイムゾーンの処理をします。
![ipinsights11.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/04468592-cfe8-8806-88c6-fd8c3d156c78.png)

6．リソースを選択します。
![ipinsights12.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/23123582-1826-4906-b987-6017c68f6738.png)

7．ユーザーとIPアドレスを抽出します。
![ipinsights13.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/8c9e9c86-b87a-ed86-97f6-33aa1454036c.png)

8．学習とテストのデータセットを作成します。
![ipinsights14.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/aa9a19b3-1cb5-e9ae-2ef7-8f43b4412efd.png)

9．10日間のログイベントを使用し、7日間を学習、3日間をテストとします。
![ipinsights15.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/08446fcb-de12-1c65-6aed-5ec10c5d96e5.png)

10．学習データをシャッフルします。
![ipinsights16.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/e4a7084a-dad8-cc71-c444-bb9c8b33c466.png)

## 学習
1．S3に格納します。
![ipinsights17.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/8a71a2ee-a778-fc1b-a51e-7aab5628ce2e.png)

2．イメージを取得します。
![ipinsights18.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/1f3072d3-94e8-3797-fba7-2f12152cdce3.png)

3．学習します。
![ipinsights19.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/dbe2c106-0fe7-ae9d-2a97-1c122f2ec2de.png)
![ipinsights20.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/808546c0-dead-4733-471b-6cb919982643.png)

## 推論
1．エンドポイントを作成します。
![ipinsights21.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/5470b0d6-ac66-127d-3723-4ca04a0d379e.png)
![ipinsights22.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/763d7dc2-cc77-9b79-b05a-32476109c8e7.png)

2．データのシリアライズ/デシリアライズ
![ipinsights23.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/08ef084b-be7b-51a1-a845-d31acb93f999.png)

3．dot_productを表示します。
![ipinsights24.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/b59a1852-9095-6421-9b38-5aa63e037d40.png)

## 異常検出スコアの計算
1．通常のトラフィックデータセットを使用します。
![ipinsights25.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/3fa7e753-ee95-cd06-2830-5e6725693e1d.png)

2．異常のトラフィックデータセットを挿入します。
![ipinsights26.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/5a64fd7d-2abd-6def-a689-305c3ffb6ab3.png)

![ipinsights27.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/89f034dc-f65f-e91d-5cf0-b254df3edf36.png)

## 分布の表示
![ipinsights28.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/a9c0919c-81da-ddff-4e96-63b42b4e05b5.png)
![ipinsights29.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/855d08fd-51be-16c4-446d-47e2aed70d81.png)
![ipinsights30.PNG](https://qiita-image-store.s3.amazonaws.com/0/63863/b0c4bfa0-68ce-8f56-07d7-6b012e19809f.png)

閾値が0.0の場合、103390件の中、98394件が異常と予測してます。
精度は95%となりました。

## まとめ
Amazon SageMaker IP Insights アルゴリズムを試してみました。
独自のデータセットでやってみたいですね。

## 参考文献
[1] [Amazon SageMaker IP Insights アルゴリズムを使用して、不審な IP アドレスを検出する](https://aws.amazon.com/jp/blogs/news/detect-suspicious-ip-addresses-with-the-amazon-sagemaker-ip-insights-algorithm/)