【初心者】Amazon SageMaker Canvas を使ってみる

# 1. はじめに
- 2024年開始の新資格「AWS Certified Machine Learning Engineer - Associate」の受験準備をしている。
- 普段SageMakerを使う機会がなく、このままだとまた全て机上学習になってしまうため、可能な範囲で実機学習する。
- 初心者なので、内容を突き詰めるわけではなく、処理の流れや雰囲気が理解できることを目標とする。

# 2. やったこと
- 事前学習として、Kaggleの「タイタニックチュートリアル」を実施して、従来の方法（JupiterNotebook/Python/Pandasなど）を用いて、生存者を予測するモデルを作成して、テストデータに対して推論を行い、結果をKaggleに登録するプロセスを確認する。
- 本題として、同様のプロセスをSageMaker Canvasを用いて実施し、どれくらい簡単にできるのかを確認する。

# 3. 事前学習

## 3.1 タイタニックチュートリアルの実施
- 「[タイタニックチュートリアル](https://www.kaggle.com/code/shinuk/titanic-official)」を実施し、生存者予測作業の流れを確認する。
- このチュートリアルで学習できる内容は以下の通り。自分で分析環境を用意することも不要であり、なぞるだけであれば1時間程度で実施可能。
    -  作業に必要なファイルを確認する。
        -  train.csv: トレーニング用データ(891人分、生存/死亡の値あり)
        -  test.csv: 予測用データ(418人分、生存/死亡の値がなく、どちらなのかを予測するのが課題)
        -  gender_submission.csv(418人分の生存/死亡の予測結果を提出する用)
    - Kaggleのサイト上でNotebookを作成し、データロード、モデル作成、418人分の予測を行い、結果を登録する。
- このチュートリアルで作成したモデル(ランダムフォレスト)を用いた予測では、スコア(正解率)は 0.77511 となる。なお、結果提出用ファイル(gender_submission.csv)の初期値は、単純に男性が死亡、女性が生存という値になっているが、その場合のスコア(正解率)は 0.76555 となる。

## 3.2 データ分析やモデル作成に関する追加確認
- タイタニックはいろいろな人がやっているので、分かりやすい内容のものを自分でもやってみて少し理解を深める。
    - [【最新決定版】タイタニックデータで学ぶ　Pandasによるデータ加工からグラフ化まで](https://qiita.com/kaita_kakihara/items/bf66e9e4927a3e3589e4)
        - データの読み込み、グラフ化、欠損値補完などの簡単な操作など
    - [Kaggle Titanic Score-80.8%までの道のり](https://qiita.com/kkk777/items/a77c28fcd27fe0c67085)
        - どういう観点でスコアを上げればよいかの試行錯誤など

- 自分で練習する時の環境としては「[SageMaker Studio Lab](https://studiolab.sagemaker.aws/)」を利用した。一日ごとの利用時間制限(CPU環境8時間/GPU環境4時間まで)はあるが、無料で上記の検証作業(タイタニックデータの読み込み・修正、モデル作成、予測など)が可能。

# 4. SageMaker Canvas の利用

### 4.1 事前準備
- SageMaker Canvas を利用する前に、まず SageMaker ドメイン(環境設定みたいなもの)を作成する必要がある。今回は「シングルユーザー向け」を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/0ce54d3e-b05f-c570-9ea2-0f09d2b3412e.png)

- 既定の設定でドメインが作成される(ドメイン名は分かりづらいが変更不可)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/9a8565d3-bb07-38c4-b08b-e2747d4233af.png)

- ドメインが作成されるのと同時にドメイン内にデフォルトユーザも作成される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/6176f477-791d-4097-2f62-268086b5a57c.png)

- デフォルトユーザを指定してSageMaker Canvasを起動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/f4b0def7-31ed-79fb-9a6c-b44e4fef6a54.png)

- SageMaker Canvasの管理画面がマネコンとは別に表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/eb1e4a6c-4ae0-42a4-94f3-e7935751b859.png)

### 4.2 SageMaker Canvas でのタイタニック分析
#### データセットのアップロード
- Datasets -> Import Data -> Tabular を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/031b841f-37a1-3382-6225-494f3f420778.png)

- Dataset名を「train-titanic」、Data Sourceを「Local Upload」として学習用データ「train-titanic.csv」(生死の情報がある891人分のデータ)をアップロードする。同様に予測したいデータ「test-titanic.csv」(生死の情報がない418人分のデータ)もアップロードする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/a72bfa3e-52b8-ef03-8023-123304e0ea8f.png)

- 2つのファイルが正しくアップロードされたことを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/77334cf4-8849-72d4-fa8f-0a54aa600c78.png)

#### モデルの作成

- My models -> + New Model を選択する。「Problem Type」として「Predictive analysis」(データから予測を行う)を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/603b23f1-6190-d321-a064-5afde4341f18.png)

- モデル作成用のデータセットとして先ほどアップロードした「train-titanic」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/96f028f2-7338-8e24-ac02-7b9d34432fee.png)

- 「Target column」(予測したい列)としてSurvived(生死)を選択し、Quick Build(簡易的なモデル作成)を実行する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/f2252123-2f2a-8238-5756-8856aaa434ca.png)

- 訓練用データであれば82.682%の精度で予測できるモデルが作成される。Predict(予測)のステップへ進む。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/ad0d4bd8-f8f5-46bb-5bb7-19c4ba867fc6.png)

#### 予測の実行

- Batch prediction(1個1個の行に対する予測ではなく複数行まとめて予測)、Manual(1回限りのファイル指定でのDataset指定)を選択して、テストデータ(生死の値がない418人分)のファイルを指定し、Generate Predictionsを実行する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/01d8c236-5c29-0715-376f-899d05f53baa.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/5e63f33e-72b4-4116-e556-6e369a1a1a5e.png)

- 実行後、テストデータの各行に対し、Survived(生死の値)とprobability(確度みたいなもの)が追加されたファイルがダウンロードできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/27be577f-191f-7eb4-dce0-5118f500b2e1.png)

- このファイルをKaggleへの提出形式(PassengerIdとSurvivedの2列だけ)に編集して提出する。残念ながら結果としてはスコア(正解率) 0.73684 と微妙な値になってしまった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/e0c2def2-52ee-9987-6787-8e0232c384d5.png)

### 4.3 環境の停止
- SageMaker Canvas は使用中は常時課金され続けてしまうので、作業が終わったらログアウトする必要がある。（左下のログアウトボタン）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/9a0193e0-1e9a-d0a9-c6be-6a5469f75f80.png)

- Canvasが起動中かどうかはマネコンのSageMakerの画面(ドメインの詳細->リソース)でも確認できる。上がCanvasを実行中、下が停止中（ログアウトした状態）の画面。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/98c3f63c-496a-ee25-1f5a-532b2026750f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/00f966c5-a4bd-bff9-e7bf-259b1d8bd4cc.png)

# 5. 所感
- SageMaker Canvas、使いこなせばいろいろ便利で、業務として使う場合はよいかもだが、使用中は常に時間課金が発生（きちんとログアウトしないと課金が継続してしまう）、またデータ読み込みや予測などの処理に対してそれぞれ課金されるため、学習用としては精神的に気軽には使いにくいかな、、と感じた。（多少不便でもSageMaker Studio Labのような無料環境で落ち着いてやったほうが、、と思ってしまった。）
- 今回やったことの他にも、Wrangler(データの前処理)とか、簡単に試せそうな機能はあるので、もう少し触って理解できるようにしたい。