Amazon SageMaker Random Cut Forestを動かしてみた

ノートブックインスタンスを作成します。ステータスが『InService』になったら、アクションの『オープン』をクリックします。

Jupyter notebookの画面が開きます。『SageMaker Examples』タブをクリックします。

『Introduction to Amazon algorithms』をクリックします。

『randomcutforest.ipynb』の『Use』ボタンをクリックします。

『Create copy』ボタンをクリックします。

RCFのノートブックが開きます。

先程の『Create copy』で作成されたフォルダとノートブックの所在は次の通りです(フォルダ名の末尾に、作成年月日がYYYY-MM-DD形式で付加されます)。

Random Cut Forestアルゴリズム実行

RCFを実行していきます。

まずは、使用するS3バケット名を入力します。必要に応じて、プレフィックスも入力します(今回はデフォルトのままとします)。

このノートブックで編集が必要なのはこのセルだけですが、今回は他のセルも編集して実行します。

ニューヨーク市のタクシー利用者数、6 か月間分で構成されるサンプルデータセット(CSV形式)をダウンロードします。

ダウンロードしたサンプルデータセットは、ノートブックと同じフォルダに格納されます。

サンプルデータセットの先頭5行を表示させます。

サンプルデータセットをプロットしてみます。

横軸6000付近にピークが見られます。

ピーク付近にズームして見るため、横軸5500から6500までの範囲をプロットしてみます。

通常時のデータの様子もより詳細に見て取れます。

RCFの学習は、他の多くのSageMakerアルゴリズムと同様、RecordIO Protobuf形式にエンコーディングされたデータで最もよく機能します。ここでは、CSV形式のサンプルデータセットをRecordIO Protobuf形式に変換し、S3バケットへ格納しています。

学習用Dockerコンテナイメージを設定します。このセルには、実行しているノートブックのリージョンから自動的に判定して設定されるようにプログラムが組まれています。

ハイパーパラメータの説明が記載されています。

今回は、学習用インスタンスのインスタンスタイプを、デフォルトの『ml.m4.xlarge』から『ml.t2.medium』に変更してみます。また、処理時間を計測して表示する処理を追加しました。

すると、下記のようなエラーメッセージが表示されます。

学習用インスタンスのインスタンスタイプに『ml.t2.medium』は指定出来ないようです。

指定出来るインスタンスタイプを下表にまとめました。

項番 インスタンスタイプ vCPU GPU メモリ (GiB) GPU メモリ (GiB) ネットワークパフォーマンス
スタンダード – 現行世代
1 ml.m5.large 2 – 8 – 高
2 ml.m5.xlarge 4 – 16 – 高
3 ml.m5.2xlarge 8 – 32 – 高
4 ml.m5.4xlarge 16 – 64 – 高
5 ml.m5.12xlarge 48 – 192 – 10 ギガビット
6 ml.m5.24xlarge 96 – 384 – 25 ギガビット
7 ml.m4.xlarge 4 – 16 – 高
8 ml.m4.4xlarge 16 – 64 – 高
9 ml.m4.10xlarge 40 – 160 – 10 ギガビット
10 ml.m4.16xlarge 64 – 256 – 25 ギガビット
コンピューティング最適化 – 現行世代
11 ml.c5.xlarge 4 – 8 – 最大 10 Gbps
12 ml.c5.2xlarge 8 – 16 – 最大 10 Gbps
13 ml.c5.4xlarge 16 – 32 – 最大 10 Gbps
14 ml.c5.9xlarge 36 – 72 – 10 ギガビット
15 ml.c5.18xlarge 72 – 144 – 25 ギガビット
16 ml.c4.xlarge 4 – 7.5 – 高
17 ml.c4.2xlarge 8 – 15 – 高
18 ml.c4.4xlarge 16 – 30 – 高
19 ml.c4.8xlarge 36 – 60 – 10 ギガビット
加速コンピューティング – 現行世代
20 ml.p3.2xlarge 8 1xV100 61 16 最大 10 Gbps
21 ml.p3.8xlarge 32 4xV100 244 64 10 ギガビット
22 ml.p3.16xlarge 64 8xV100 488 128 25 ギガビット
23 ml.p2.xlarge 4 1xK80 61 12 高
24 ml.p2.8xlarge 32 8xK80 488 96 10 ギガビット
25 ml.p2.16xlarge 64 16xK80 732 192 25 ギガビット

『ml.m5.large』を指定して再実行します。

今回は、学習におよそ222秒(3分42秒)かかりました。

今回は、学習におよそ222秒(3分42秒)かかりました。

エンドポイントを作成します。説明に『ml.c5インスタンスタイプを推奨』とあるので、今回は『ml.c5.xlarge』を指定します。また、このセルでも処理時間を計測し、結果はおよそ330秒(5分30秒)でした。

学習済みモデルを使用して、異常スコア(異常の程度を表し、高ければ異常、低ければ通常と判断する)を算出します。

異常スコアをグラフにプロットしてみます。

ここでは、次の式を満たすデータを『異常』と判断する基準を採用します。

(異常スコア) > (異常スコアの平均値) + 3 × (異常スコアの標準偏差)

異常なデータポイントをプロットします。

既知の異常値をいくつか検出していることがわかります:

・ニューヨークシティマラソン( 2014-11-02; t = 5954 )

・大晦日( 2015-01-01; t = 8833 )

既知の異常値をいくつか検出していることがわかります:

・ニューヨークシティマラソン( 2014-11-02; t = 5954 )

・大晦日( 2015-01-01; t = 8833 )

・暴風雪( 2015-01-27; t = 10090 )

最後にエンドポイントを削除します。

おわりに

以上、SageMakerのビルトインアルゴリズムの1つ、『Random Cut Forest』を、一部「処理時間の計測」や「インスタンスタイプの変更」をしながら実行してみました。

今回はサンプルデータセットを使用しましたが、これを別のデータセットに変更するなど、このノートブックをベースにカスタマイズすれば、比較的容易に『Random Cut Forest』による異常検知を導入出来る筈です。

最後までご覧頂きありがとうございました。

参考リンク

[1] 機械学習モデルとアルゴリズム | AWS での Amazon SageMaker

https://aws.amazon.com/jp/sagemaker/

[2] Amazon SageMaker ML インスタンスタイプ

https://aws.amazon.com/jp/sagemaker/pricing/instance-types/

[3] Algorithms Provided by Amazon SageMaker: Common Parameters

https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html

[4] 20180308 AWS Black Belt Online Seminar Amazon SageMaker

https://www.slideshare.net/AmazonWebServicesJapan/20180308-aws-black-belt-online-seminar-amazon-sagemaker-90045719

[5] SageMaker | Amazon Web Services ブログ

https://aws.amazon.com/jp/blogs/news/category/artificial-intelligence/sagemaker/

[6] 異常検出にビルトイン Amazon SageMaker Random Cut Forest アルゴリズムを使用する | Amazon Web Services ブログ

https://aws.amazon.com/jp/blogs/news/use-the-built-in-amazon-sagemaker-random-cut-forest-algorithm-for-anomaly-detection/

[7] ランダムカットフォレスト

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/randomcutforest.html

[8] Robust Random Cut Forest Based Anomaly Detection on Streams

https://www.semanticscholar.org/paper/Robust-Random-Cut-Forest-Based-Anomaly-Detection-on-Guha-Mishra/8bba52e9797f2e2cc9a823dbd12514d02f29c8b9

[9] AWS SagemakerでJupyterを使ったり、独自機能を使う

http://catindog.hatenablog.com/entry/2018/05/05/194516

[10] Amazon SageMaker いじってみた1

/archives/10841

[11] Amazon SageMaker いじってみた2

/archives/10921

この記事を書いた人

aws-recipe-user