こんにちは、エデュケーショナルサービス課の井澤です。
機械学習をビジネスに活用したいけれど、「モデルの構築やコードの記述がハードルになっている」と感じることはありませんか?
今回は、Amazon SageMaker Canvasを使い、データのインポートからモデルの構築まで、ノーコードでの機械学習を試してみます。
なお、サンプルとして、有名な機械学習ライブラリscikit-learnから入手できる「カリフォルニア住宅価格データセット」を用います。
Amazon SageMaker Canvas とは?
SageMaker Canvas は、コードを書かずに、視覚的なインターフェースだけで機械学習モデルを構築できるツールです。アルゴリズムの選択やハイパーパラメータの調整を自動で行ってくれます。
プログラミングに習熟したメンバーがいないプロジェクトを支援したり、本格的な機械学習モデルの開発に先立って、データやコンセプトを検証したりすることができます。
本ハンズオンの概要
住宅価格を含むデータを用いて、機械学習を行い、住宅価格を予測する回帰モデルを構築します。モデルが作成できたら、テストデータを与え、住宅価格の予測をします
なお、本記事では、SageMakerの機能を利用するためのリソース群(SageMakerドメイン)の作成作業と、作成したモデルを推論用のインフラにデプロイする作業は扱いません。
コストの目安
SageMakerを用いた学習や推論には以下のコストが発生します。下記を参考に試行する場合は、終了後に必ずリソースを削除してください。
特に、Canvasは”Logout”する必要があります。Canvasからのログアウトを忘れると、課金が続きます。ご注意ください!
| リソース | 概算コスト | 備考 |
|---|---|---|
| SageMaker Canvas セッション | 約$1.90/時間 | ログイン中のみ課金 |
| Quick Build モデルトレーニング | 数ドル程度 | データサイズに依存 |
事前準備
データセットの作成
今回は scikit-learn に同梱されている California Housing データセットを使用します。
データ量が多いと、トレーニングにかかる時間が長くなるため、以下のスクリプトを実行して、学習用のCSVファイル(500行のサンプル)を作成しました。 出力されるファイル名は"california_housing_500.csv"です。
# データセット作成スクリプト
from sklearn.datasets import fetch_california_housing
import pandas as pd
data = fetch_california_housing(as_frame=True)
df = data.frame
# 列名を分かりやすく変更
df.columns = [
"MedIncome", # 世帯収入の中央値(万ドル)
"HouseAge", # 築年数の中央値
"AveRooms", # 平均部屋数
"AveBedrms", # 平均寝室数
"Population", # 地区の人口
"AveOccup", # 平均世帯人数
"Latitude", # 緯度
"Longitude", # 経度
"MedianHouseValue" # 住宅価格の中央値(目的変数、10万ドル単位)
]
# 行数を500に絞る(Quick Buildの時間短縮のため)
df_sample = df.sample(n=500, random_state=42)
df_sample.to_csv("california_housing_500.csv", index=False)
print(f"データ件数: {len(df_sample)}")
print(df_sample.describe())
このデータは、およそ次のような内容です。
| 列名 | 説明 | 例 |
|---|---|---|
| MedIncome | 地区の世帯収入の中央値(万ドル) | 3.5 |
| HouseAge | 築年数の中央値 | 25 |
| AveRooms | 1世帯あたりの平均部屋数 | 5.2 |
| AveBedrms | 1世帯あたりの平均寝室数 | 1.1 |
| Population | 地区の人口 | 1200 |
| AveOccup | 1世帯あたりの平均居住人数 | 3.0 |
| Latitude | 緯度 | 37.5 |
| Longitude | 経度 | -122.2 |
| MedianHouseValue | 住宅価格の中央値(10万ドル単位) | 2.5 |
カリフォルニアの、住居の区画単位で集計されたデータなので、平均や中央値のような集計値が各行の列の値になっています。
以下では、このデータで使って、MedianHouseValueの値を予測できるモデルを作ります。
SageMaker ドメインの準備
SageMaker Canvas を利用するには、SageMaker ドメインが必要です。SageMakerドメインとは、SageMakerの各機能を利用するために準備する必要がある、AWSリソースの集まりです。VPCネットワーク、ストレージのほか、ドメインを利用して機械学習に取り組むユーザーの設定などを含みます。
試用であれば、コンソールの「クイックセットアップ」から、簡潔に作成することができます。
詳細は公式ドキュメントを確認してください。
Amazon SageMaker AI の高速セットアップを使用する
SageMaker Canvasによるトレーニング
Step 1: SageMaker Canvas の起動
AWSコンソールで Amazon SageMaker AIを開きます。
SageMakerのコンソールから、左のナビゲーションペインのメニュー「Canvas」を選び、ユーザープロファイルを選択して「Canvasを開く」クリックします。
ブラウザの別タブが開きます。Canvasの起動が完了するまで数分待ちます。

Canvasアプリケーションが起動を完了すると、次のようなCanvasのダッシュボードが表示されます。

なお、Canvasアプリケーションの動作状況は、元のブラウザのタブのSageMakerコンソールの左のナビゲーションペインのメニューから、「ドメイン」→ Canvasを起動したドメインのリンク → 「ドメインの詳細」の「リソース」タブとたどると、確認できます。

Step 2: データのインポート
Canvasタブで、 左メニューの 「Datasets」をクリックして、Datasets画面を開きます。 「Import data」 をボタンをクリックします。
メニューからTabularを選んで、データセットを作成します。

なお、今回のデータセット名は california-housing としました。
画面の指示に従い、california_housing_500.csv をアップロードします。プレビュー機能を利用すると、どんなデータなのか確認してから進めることができます。

「Create dataset」ボタンを押すと、表形式のデータセットが作成されます。

Step 3: モデルの作成と学習(Quick Build)
続いて、Canvas左メニューの「My models」 を選び、My models画面を開きます。

「+New model」 をクリックして、新しいモデルの作成を開始します。
Create new model画面が表示されたら、名前を housing-price-model とし、問題タイプをPredictive analysisにします。

「Create」をクリックします。
以降、画面はウィザード形式になり、順を追ってモデルのトレーニングなどの手順を実行できます。
まず、データセットとして、前の手順で作成したcalifornia-housingを選択します。

画面下の「Select dataset」をクリックします。
次に表示される「Build」画面で、予測する列(Target column)としてMedianHouseValueを選びます。「Model type」がNumeric prediction(数値の予測)になることを確認します。

また、画面下にはデータセットの列(※機械学習の文脈では特徴量 feature と呼ばれる場合も多いです)が表示されており、予測に使う列と、予測のターゲットにする列が、視覚的に分かりやすく示されています。

画面右上の「Quick build」 をクリックして、学習を開始します。

データ量を減らしているので、所要時間は数分程度です(※画面には、クイックビルドの場合は2~15分かかるというメッセージが表示されます)。

今回は、5分ほど経過したところで、学習が完了し、レポートが表示されました。
Step 4: モデルの精度評価
学習が終わると、モデルの分析結果が表示されます。

RMSE(二乗平均平方根誤差)は、予測のズレの平均を意味します(※下のMSEの値の平方根です)。
MSE(平均二乗誤差)は、実際の値と予測値の差を二乗したものの総和を、データ数で割って求めた値です。2乗しているため、予測したい値および実際の値とは違う次元(二乗した次元)の値になっています。平方根を求めてRMSEにすると、元の次元になります。
Column impactの欄では、どの項目がどの程度、価格に影響を与えているか、可視化されます。

通常は MedIncome が支配的です。MedIncomeと予測へのインパクトの散布図も示されています。

大雑把ではありますが、「住民は、収入に応じた価格の住宅を選ぶ」という解釈ができそうです。
Step 5: シングル予測の試行
My models画面の上部にある「Predict」タブを選び、表示された画面で「Single prediction」を選択します。

表示された入力欄について、値を手で入力し、モデルに予測をさせてみます。
例) 高所得の場合: MedIncome を 8.0 に設定します。他の値は以下の通りにします。
| 項目 | 値 |
|---|---|
| MedIncome | 8.0 |
| HouseAge | 5 |
| AveRooms | 7.0 |
| AveBedrms | 1.2 |
| Population | 800 |
| AveOccup | 2.5 |
| Latitude | 37.5 |
| Longitude | -122.2 |

画面右の「update prediction」ボタンをクリックします。

予測値は次のようになりました。

また、入力値を変更して、予測価格がどう変化するか試してみるのも興味深いです。
低所得の場合: MedIncome を 2.0 に設定します。他の値は以下の通りにします。
| 項目 | 値 |
|---|---|
| MedIncome | 2.0 |
| HouseAge | 45 |
| AveRooms | 4.0 |
| AveBedrms | 1.5 |
| Population | 2500 |
| AveOccup | 4.0 |
| Latitude | 34.0 |
| Longitude | -118.2 |
画面右の「update prediction」ボタンをクリックして、予測値を得ます。 モデルがロードされて、予測値が示されます。今回は次のようになりました。

なお、同じデータでトレーニングをしても、毎回同じモデルが出来るわけではありません。
特に、今回のようにデータをランダムに抽出したり、トレーニングのタスクを自動化した場合は、確率的なふるまいが含まれるため、結果に変動があります。上記は、一つの例としてご覧ください。
実際のところ、これだけでは妥当な予測が行えるモデルになったかどうかは、分かりません。さらなる検証、テストが必要です。
今回は、SageMaker Canvasを使うことで、コードを書かずに機械学習(トレーニング)を行い、モデルを得られることを確認しました。
クリーンアップ(重要)
以上で試用を終わります。実際にCanvasを試した方は、余計な課金を防ぐため、Canvas のログアウトを必ず行ってください。

画面左下の「Log out」ボタンをクリックします。ブラウザを閉じるだけではセッションが残るので、注意してください。

正しくログアウトできると、Cangasのリソースが停止し、解放されます。
正しく停止されたか確かめるには、SageMakerコンソールから「ドメイン」を選び、「リソース」タブの「アプリケーション」欄を確認します。

上のように、何も表示されていなければ、Canvasは停止し、リソースが解放されたことになります。
まとめ
Amazon SageMaker Canvasを用いて、以下の一連のタスクをノーコードで実現できました。
- データ取り込み
- モデル構築(Quick Build)
- 精度確認、特徴量の影響度の分析
- 試用
SageMaker Canvas を使えば、データサイエンティストでなくても「まずはデータを放り込んで予測してみる」というクイックな検証が可能です。
今回は紹介しませんでしたが、Data Wrangler機能を使うと、データのクリーニングや特徴量エンジニアリングもノーコードで実現できます。
さらにモデルの精度を上げたい場合は、SageMaker Studio にモデルをエクスポートして、専門的なチューニングを行うといった連携もスムーズに行えます。
ぜひ、SageMaker Canvasを試してみてください!
公式トレーニングのご案内
サーバーワークスでは、機械学習を利用するアプリケーション開発の概要を学ぶ公式トレーニング『Practical Data Science with Amazon SageMaker』を提供しています。機械学習の様々なタスクを、SageMakerの各種機能を用いて、実践的に学べます。
ご興味のある方は、ぜひお問い合わせください.
AWS公式トレーニング・研修サービス - AWS伴走支援ならサーバーワークス