AWS初心者がSageMaker Canvasでデータを予測することを実現するまでにやったこと

# はじめに
この記事はSagemaker Canvasをこれから使いたい方や環境構築で躓いてしまっている方に向けた記事となっています。私がSageMaker Canvasの環境を構築した時にしたことを記録したものです。ドメイン作成など環境を構築して、簡単に検証するところまで実施しています。
**超初心者向け**です。
わかりやすいように画像を多めに張り付けたつもりなので参考になれば幸いです。

# Amazon SageMaker Canvasとは
Amazon SageMaker CanvasはAWSが提供している、簡単に機械学習を用いて訓練データを学習し、予測などができるサービスです。
Machine Learning(ML)の経験やコーディングのスキルが不要で、誰でも簡単に使うことができます。
参考：[Amazon SageMaker Canvas](https://aws.amazon.com/jp/sagemaker/canvas/?sagemaker-data-wrangler-whats-new.sort-by=item.additionalFields.postDateTime&sagemaker-data-wrangler-whats-new.sort-order=desc)

# 筆者のAWSスキル
・ハンズオンの経験：EC2インスタンスの立ち上げやS3バケット、IAMロールの作成ができる程度
・SageMakerの経験：経験0
・筆者の気持ち：できるだけGUIで頑張りたい

# SageMaker Canvasを使ったときの備忘録

SageMaker Canvas上でデータファイルを直接置くこともできますが、ユースケースとしてはS3にデータを置き、それをSageMaker　Canvas上で読みこむことが多いと思いますので今回はその方法で実装しました。

### Sagemakerドメインの作成
SageMaker CanvasおよびSageMaker Studioを使用するには最初にドメインの作成が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/72a01631-cd88-007a-19fd-7c342953ae27.png)

作成モード：高速セットアップ（1分）
ドメイン名：自由に付けてOK
ユーザプロファイル：デフォルトで値が入っているのでそちらで問題ありません。変更も可能です。
実行ロール：下記で説明

SageMakerのドメインを作成する際の実行ロールは、私は下のユーザプロファイルの「新しいロールの作成」から作成してつけました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/7c9ff3c3-9799-6e34-cb81-0690932dfb7b.png)

「新しいロールの作成」をクリックすると、下図の画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/9dec98fc-19bc-3f1e-4a79-4e5417d4e41e.png)

セキュリティ上問題ないのであれば任意のS3バケットにする方が簡単にできると思います。
私はこのときSageMaker用のS3バケットを作成していなかったので任意のS3バケットにしました。

S3をこれから作成する人にとって、画像の下の方にある4つの任意の条件はとても重要です。私はここでハマりました。この任意のルールにのっとったS3バケットないしオブジェクトにしないとSageMaker Canvasでデータセットを作成するときに、対象ファイルを選択できませんので注意してください。

- 名前に「sagemaker」が含まれる任意の S3 バケット　←　筆者はこれにしました。
- 名前に「sagemaker」が含まれる任意の S3 オブジェクト
- タグ「sagemaker」と値「true」が含まれる任意の S3 オブジェクト
- SageMaker へのアクセスを許可するバケットポリシーを持つ S3 バケット

ロールを作成して、送信のボタンを押すと下の画面になります。これでドメインの作成は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/48c82a53-2d9a-de74-bb6b-b8df224abc67.png)

作成できたドメインの名前の部分をクリックすると詳細情報確認とドメインの起動画面に移ります。
右側で起動＞Canvasを選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/21576063-7c4d-ca6e-0a8c-c07b85ecb1cb.png)

起動すると下図のような画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/3e08834c-1132-4999-6ab9-b053e5f04c01.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/e140f751-7700-935c-c789-9ca2344c393b.png)

### S3バケットの作成

上述の通り、筆者は「sagemaker」が名前に含まれるS3バケットを作成しました。

S3にローカルから直接ファイルを置きたいとき、CORS（Cross-Origin Resource Sharing）の設定をする必要があります。（筆者はここでも詰まりました）
設定方法は簡単で、S3バケットのアクセス許可の画面の下の方にあるCORSの設定画面から下記の設定を記入するだけです。（コピペでokです！）

~~~
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "POST"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]
~~~

ここまでできたら、アップロード画面から訓練データとテストデータをアップロードします。

### 訓練データおよびテストデータの作り方、ポイント

データセットはいろいろなところに落ちているので、「データセット　無料」などで調べてみてください。私はKaggleのデータをよく使用しています。

データセットを作るといわれると少し難しそうですよね。でも意外と簡単です。

①データセットを1つとりあえずダウンロードする。
②データを8:2(train:test)に分ける。
③予測したい項目を決め、testの方のその項目を全部消す（ヘッダーは残す）
④csvファイルで保存する。（**※文字コードがUTF-8でないと読み込んでくれません**）
⑤ファイルが約1MBであることを確認します。（筆者が最初実施した3MBのファイルはデータが重すぎたため読み込んでくれませんでした。）

### SageMaker Canvasでデータの訓練、検証

起動したSageMaker Canvasから、My modelsに行き、モデルを作成します。
筆者はデータの予測がしたかったのでPredict analysisを選択しました。

・Model name：自由につけてOK
・Problem type：Predict analysis

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/3f97ad7a-4ba0-9b5c-58fb-32e768c2c7c4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/5fae34f2-e9c6-80f1-bda6-2bf0b40264d8.png)

次にデータセットをSageMaker Canvasで作っていきます。

DatasetsタブのCreate>tabularから、任意のデータセットの名前を入力してCreateします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/1497b545-aef6-7cc0-e4c1-7c7023ea6ee3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/07ee9498-8c18-25e2-8b5e-2b4055bd9fd0.png)

その次の画面でS3からデータセットのtrainデータのファイルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/7fccb28d-007a-26ca-9fab-be266a46df56.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/d2656681-a5b8-be2c-03ae-b1550598872d.png)


データセットの作成ができたので、モデルにもどり、作成したモデルを選択したあと、Selectの画面で作成したデータセットを選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/b5bc9550-b9de-39a1-98ec-84b47fcdc76e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/ecc719e9-2808-72c8-0937-bf1c4db239d3.png)

次にBuild画面で、Target columnで予測したい項目を選択します。そうするとお勧めのModel Typeを自動で決めてくれます。もちろんこのModel Typeはカスタマイズ可能です。
私は今回長距離ドライバーのデータセットでお酒飲みかどうかを2値分類したかったので画像のように設定しました。
予測する項目とModel Typeが決まったらbuildします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/c72970ea-2036-519c-ae48-170451eb496c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/88e88fcb-7930-8b1a-0a52-8ee0d9c70cff.png)

buildが終わると分析結果が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/0eaaff36-782c-efcd-13f9-31e8448644eb.png)

最後にテストデータを使ってpredictします。

testデータを選択すると左下に黒いポップアップが出てくるので、そこをクリックするとanalyzeの精度が確認できます。
probabilityでその精度の確からしさを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/82d4c3fc-fe12-c5c6-241b-efacd128ae31.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482379/6a46b7ee-49f6-5f9e-99b2-9e310d53e018.png)

# 追記（202/07/06）
作成したドメインは削除しないと請求が飛んできます！
もしドメインが不要の場合は削除することを忘れないでください。

# 参考
- [AWS SageMaker Canvas](shttps://docs.aws.amazon.com/ja_jp/ja_jp/sagemaker/latest/dg/onboard-quick-start.html)
- [Cross−Origin Resource Sharing (CORS) の設定](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/enabling-cors-examples.html)

# 最後に

ここまで読んでくださってありがとうございます！
新しい技術に触れるとき、挫折が多かったので簡単といわれるSageMaker Canvasにチャレンジしてみました。
SageMaker Canvasもはまる部分ははまったので、同じようにチャレンジしている人の参考になったら嬉しいです。