流行りにのってAmazon SageMaker Studioを使ってみた！！

本記事は[うるる Advent Calendar 2019](https://adventar.org/calendars/4548) 15日目の記事です。

## はじめに

みんな大好き機械学習。在庫予測からF1のタイヤ消耗度まで様々な分野で活用されています。
Amazonでもそんな機械学習を簡単に行えるサービスを展開してます。
その中のAmazon Personalizeを使う場面があったので、あえてその源流のAmazon SageMakerを使ってみようと思います。そしてついでに最近公開されたばかりのAmazon SageMaker Studioも使ってみようというノリの記事です。今回は学習モデルの作成、デプロイまで行おうと思います！！

## Amazon SageMakerってなんぞや

アマゾンさんのサイトから引用

> Amazon SageMaker は、すべての開発者やデータサイエンティストが機械学習 (ML) モデルを迅速に構築、トレーニング、デプロイできるようにする完全マネージド型サービスです。SageMaker は高品質モデルの開発を容易にするため、機械学習の各プロセスから負荷の大きな部分を取り除きます。

> 従来の ML 開発は複雑、高価で、繰り返しプロセスを一層困難なものにしていました。その理由は機械学習ワークフロー全体の総合ツールが存在しないためです。ツールとワークフローを一緒に結び付けて行く必要がありますが、これは時間のかかる、誤りの多いプロセスと言えます。SageMaker はこの課題を解決するために 1 つのツールセットで機械学習用に使用できる全コンポーネントを提供し、モデルを本番環境へ送り出すまでの時間を短縮して、手間と費用を大幅に抑えられるようにしました。
https://aws.amazon.com/jp/sagemaker/

要するに、機械学習を始める上での障壁である、コスト（サーバー、学習など）を最小限に抑えたマネージドサービス作ったので使っちょ！というものです。
Amazon Personalizeなどのサービスはレコメンデーションに特化していたりして、何かと制約が多いのですがそういう制約を気にせずにゴニョゴニョできるのがAmazon SageMakerです。（ただし学習コストはかかります。）

## Amazon SageMaker Studioってなんぞや

従来のAmazon SageMakerでは、Jupitorノートブックを開いてpythonのコードを流し込むのが一般的で、各工程ごとにポチポチする作業が存在しました。その基本的な工程を一箇所で行えるようにしたのがAmazon SageMaker Studioらしいです。

> Amazon SageMaker Studio は単独のウェブベースビジュアルインターフェイスを装備し、そこではすべての ML 開発手順を実行できます。SageMaker Studio はモデルの構築、トレーニング、デプロイに必要な各ステップに対し、完全なアクセス、管理、可視性をもたらします。データのアップロード、新規ノートブックの作成、モデルのトレーニングと調整、ステップ間での移動などを迅速にこなし、さまざまな試みを調整したり、結果を比較したり、本番環境にモデルをデプロイするといった処理をすべて 1 箇所から実行でき、生産性を飛躍的に向上できます。ノートブック、試作管理、自動のモデル作成、デバッグ、プロファイリング、モデルの変動検出など、すべての ML 開発手順は SageMaker Studio のビジュアルインターフェイスで実行できます。


<img width="1197" alt="スクリーンショット 2019-12-15 1.29.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/ecdef06f-bc4b-d990-c8a1-65818af58562.png">

Amazon SageMaker Studioは構築からデプロイ管理まで広くカバーしています。

機能がもりもり過ぎて説明しきれない＆そんなに理解してないので詳しくはこちらをどうぞ！
[https://aws.amazon.com/jp/sagemaker/](https://aws.amazon.com/jp/sagemaker/)


## 実際に使ってみる！！

今回はAmazonさんがAmazon SageMaker Autopilotの練習用に用意してくれた手順を適度にパクリながらやっていきます。

[https://github.com/awslabs/amazon-sagemaker-examples/blob/master/autopilot/sagemaker_autopilot_direct_marketing.ipynb](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/autopilot/sagemaker_autopilot_direct_marketing.ipynb)

データセットはこちらを使用します。

[https://archive.ics.uci.edu/ml/datasets/bank+marketing](https://archive.ics.uci.edu/ml/datasets/bank+marketing)

銀行のダイレクトマーケキャンペーンの結果データっぽいですね！

> The data is related with direct marketing campaigns of a Portuguese banking institution. The marketing campaigns were based on phone calls. Often, more than one contact to the same client was required, in order to access if the product (bank term deposit) would be ('yes') or not ('no') subscribed.

<img width="950" alt="スクリーンショット 2019-12-14 16.48.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/3037556e-37d0-4a91-ea26-6327496d3c3a.png">

Y列が結果になっていて、このy列を教師あり学習の目的変数にセットしていきます。
（Y列の結果と、その他のカラムの結果の相関をもとにモデルを作るイメージ）

<img width="923" alt="スクリーンショット 2019-12-14 16.48.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/46626f04-e18b-ead3-8ed7-4e6c1bd7eda5.png">


それでは早速、Amazon Sage Maker Studioを開いていきましょう。

<img width="1440" alt="スクリーンショット 2019-12-14 14.51.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/10d7e173-916c-e56d-e678-2036cd332e45.png">


おしゃんなローディング画面がでてきました。なんかもうこれだけで機械学習できる人感でてますよね。



### 学習用のデータの準備

学習用のデータをS3に準備します。コンソールから行ってもよいのですがあえてIDEでやってみようと思います。

下記リポジトリの手順どおり準備していきます。

[https://github.com/awslabs/amazon-sagemaker-examples/blob/master/autopilot/sagemaker_autopilot_direct_marketing.ipynb](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/autopilot/sagemaker_autopilot_direct_marketing.ipynb)

<img width="1440" alt="スクリーンショット 2019-12-14 16.52.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/146a62a0-c871-a833-9c2b-309a8b96f584.png">

* サイドバーにあるファイルマークをクリック
* `+`をクリックしファイル作成タブを展開
* Notebook > Python ３を選択し、Notebookを作成

すると、Notebookが展開されるので、そこにコードを書いていきます

<img width="1440" alt="スクリーンショット 2019-12-14 16.59.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/310d0e84-d902-7767-c8b9-63e58b5143a4.png">


```python

    import sagemaker
    import boto3
    from sagemaker import get_execution_role
    
    region = boto3.Session().region_name
    
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = 'sagemaker/autopilot-dm'
    
    role = get_execution_role()
    
    sm = boto3.Session().client(service_name='sagemaker',region_name=region)
```

SageMakerと同じリージョンにbucketを用意。

```python
    !wget -N https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank-additional.zip
    !unzip -o bank-additional.zip
    
    local_data_path = './bank-additional/bank-additional-full.csv'
```

学習用データをダウンロードします。

```python

    import pandas as pd
    
    data = pd.read_csv(local_data_path, sep=';')
    pd.set_option('display.max_columns', 500)     # Make sure we can see all of the columns
    pd.set_option('display.max_rows', 10)         # Keep the output on one page
    data
```

読み込めるかためしてみます。正常に読み込めると画面上にデータが表示されます。

<img width="1016" alt="スクリーンショット 2019-12-14 16.59.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/8a1fe1b2-9925-220a-e5f0-a1ee2bcf69a4.png">


```python

    train_data = data.sample(frac=0.8,random_state=200)
    
    test_data = data.drop(train_data.index)
    
    test_data_no_target = test_data.drop(columns=['y'])
```

データを学習用とテスト用に分割します。

```python

    train_data.to_csv(train_file, index=False, header=True)
    train_data_s3_path = session.upload_data(path=train_file, key_prefix=prefix + "/train")
    print('Train data uploaded to: ' + train_data_s3_path)
    
    test_file = 'test_data.csv';
    test_data_no_target.to_csv(test_file, index=False, header=False)
    test_data_s3_path = session.upload_data(path=test_file, key_prefix=prefix + "/test")
    print('Test data uploaded to: ' + test_data_s3_path)
```

そしてそれぞれS3に保存します。
これで学習用のデータの準備が完了しました。
SageMaker Studioでポチポチしていきましょう。


### Amazon SageMaker Autopilotで簡単モデル作成

ここからは、ドキュメントとはお別れして実際にSageMaker Studioをポチポチしていきます。

<img width="1440" alt="スクリーンショット 2019-12-14 17.06.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/4dc4b8fd-89b2-3bfb-5ace-b8f39f22e186.png">

* サイドバーのフラスコマークをクリック
* Create Experimentをクリック

すると、Amazon SageMaker Autopilot Experimentの設定タブが展開されます。
それぞれ設定していきます。

* Experiment Name
* インプットデータのパス(S3)
* 目的変数となるカラム名
* 結果の出力先（S3）
* 機械学習問題タイプ
* experimentでどこまでやるか


設定して、`Create Experiment`をクリックすると設定完了です。

<img width="1440" alt="スクリーンショット 2019-12-14 14.00.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/1b0e4a52-83ed-1abb-ebfc-fbde4f12fb16.png">


早速、Autopilotが動き、データ解析が開始されます。
全部終了するまでまぁまぁ時間かかるので待ちます。


<img width="1440" alt="スクリーンショット 2019-12-14 15.56.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/1f7646aa-f861-741a-f273-3f1b509280bc.png">

すべて終了すると、作成されたモデル一覧が表示されます。
こうしてみると、相当な量な学習が行われていることがわかりますね。
左にスクロールしていくと、精度などの情報も見れます。

<img width="1440" alt="スクリーンショット 2019-12-14 16.03.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/5a9c9b88-2044-8647-98ba-68bd3ae32bd1.png">

この情報をもとに、学習モデルを選択しデプロイを行います。

<img width="1440" alt="スクリーンショット 2019-12-14 15.56.57のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/eb09285e-5cd5-dde2-57d9-546a37e6378a.png">
デプロイはここから行えます！！

デプロイされると、Amazon SageMakerのコンソールにて`In Service`になっていることを確認できます

<img width="1440" alt="スクリーンショット 2019-12-14 17.25.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253092/be53b7fc-2cd7-016b-17f8-cbe5f320a004.png">




## まとめ
結果としてAmazon SageMakerでAmazon SageMaker Autopilotを使う記事になってしまいましたが、Amazon SageMaker Studioを使うことにより[Notebookで行う方法](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/autopilot/sagemaker_autopilot_direct_marketing.ipynb)よりも簡単に、そして可視化された状態で機械学習が行えるようになりました！ 
詳しい使い方はまだ追えていませんが、これからガシガシ使い込んで行こうと思います！！



## 参照
[Amazon SageMaker](https://aws.amazon.com/jp/sagemaker/)
[Amazon SageMaker Autopilotを使ってみた](https://dev.classmethod.jp/cloud/aws/try-amazon-sagemaker-autopilot/)
[Direct Marketing with Amazon SageMaker Autopilot](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/autopilot/sagemaker_autopilot_direct_marketing.ipynb)