×
採用サイトはこちら

【前編】機械学習って何をしてるの?SageMakerで流れをまるごと体験!

はじめに

「機械学習」というワードに興味は持っていたり目にする機会はあっても、具体的に中でどんなことをしているのかよく分からないという方も多いのではないでしょうか?

SageMakerは、AWSが提供するフルマネージドな機械学習サービスです。GPUサーバーの調達やライブラリのインストールといった環境構築の手間がなく、データとコードさえあればすぐに機械学習に取りかかれます。SageMakerを使用すれば、この「すぐ始められる」という特性のおかげで機械学習の一連のサイクルを最短距離で体験、理解できます。

本記事ではSageMakerを使って実際に手を動かし、「よく分からない」という疑問の解消に少しでも近づけるように機械学習の一連の流れを体験します。「環境を構築して、データを準備して、モデルを学習させて、予測を実行する」というサイクルを自分の手で完走することで、「機械学習ってこんなことをやっているんだ」という実感を掴んでいただくことを目指しています。

目次

概要

背景

筆者自身、冒頭で記載したような「機械学習」という言葉について興味は持っているものの、どのような処理を行っているのかやその精度についてほとんど知識がない状態です。 そのため、今回のハンズオンを通して初学者として「機械学習」の流れを実体験し、少しでも解像度を上げたいという思いで記事にしています。

目的

本記事では、最新の開発環境「SageMaker Unified Studio」および「SageMaker」の操作を体験し、機械学習の全体フローや使用感を掴むことを目的としています。

記事の概要

本記事では、全体像を分かりやすく前編 / 後編に分けてハンズオンを進めます。

【前編】

  • SageMakerについての概要とハンズオンの概要について解説
  • 環境のセットアップ(SageMaker Unified Studio)からデータの取得・確認までの手順を解説

【後編】

  • 実際のデータを用いてSageMakerによる学習・予測の実行から、課金を防ぐための確実な後片付けまでを解説

SageMakerとは

「Amazon SageMaker」は機械学習の全工程(データ準備・構築・学習・運用)をサポートする巨大なツール群です。現在は「Unified Studio」という統合ロビーから、目的に合わせて様々な機能を呼び出して使います。
SageMakerは非常に多機能なため、「作業をする場所(開発環境)」と、その中で呼び出して使う「具体的な機能(SageMakerシリーズ)」に分けて整理するとスッキリします。

今回はハンズオンに関連するサービスを中心に紹介するので、より詳しいサービスが知りたい方は別途調べてみてください!

SageMakerに関連する機能

【開発環境】どこで作業する?

私たちが実際に画面を開いて、コードを書いたり命令を出したりする「場所」です。

機能名役割
SageMaker Unified Studio「統合ロビー」としてAWS全体の機械学習・データ開発を統合管理するポータル
Notebooks「作業机」としてブラウザ上でコードを書いて即実行できるノートブック環境

【SageMakerシリーズ】何を使って何をする?

裏側で動く「SageMaker」というエンジンが提供する、具体的な機能群です。

機能名役割
Training Jobs学習用サーバーを起動して、大量のデータからモデルを作る
EndpointsモデルをAPIとして公開し、外部から予測できるようにする
Canvas自動MLのAutopilot機能を内包し、コードを書かずに機械学習ができる(ノーコード)

ハンズオンの概要

本ハンズオンは、以下の6つのステップで進めていきます。

【前編】

  1. 環境のセットアップ: SageMaker Unified Studioを立ち上げます。
  2. データの取得・確認: JupyterLabを起動し、銀行データを読み込みます。

【後編】

  1. データの前処理・S3アップロード: データを学習できる形に変換し、S3に保存します。
  2. モデルの学習: XGBoostアルゴリズムを使って学習ジョブを実行します。
  3. 予測とデプロイ: エンドポイントを作成し、実際に予測を試します。
  4. リソースの削除: 課金を止めるため、作成したものをすべて削除します。

また上記ステップを通して、実際のデータを用いた「定期預金の成約予測」を行い、環境構築から予測の実行、後片付けまでのサイクルを自力で完遂することをゴールとして考えています(今回はAWS公式ハンズオンの流れに沿って実施していきます)。

実装の全体像

今回はAWSが公開している「銀行の定期預金成約予測データ」を使用します。 顧客の属性(年齢、職業など)から、学習モデルを作成し、定期預金を申し込んでくれるかどうかを予測させます。

  • MLタスクの種類: 定期預金を「申し込んでくれる(yes)/ 申し込んでくれない(no)」の2択を当てる2値分類問題です。
  • 学習の種類: 正解ラベル(成約:yes/no)付きのデータを使って予測モデルを作る教師あり学習です。「過去の成約実績を教材にして、新しい顧客が成約するかを予測する」イメージです。
  • 使用アルゴリズム: 表形式データに強い XGBoost を使用します。
  • データの規模: 約4万1,000件の顧客データで、年齢・職業・ローン有無など20項目の特徴量があります。

本記事におけるハンズオンでは、以下のMLライフサイクルの01〜05を一通り体験します。

図1. 機械学習のライフサイクル全体像

構成図

ハンズオンの構成図は以下になります。

図2. SageMakerハンズオン構成図

各サービスの役割

ハンズオンに関連するサービスとその役割は以下です。

リソース(サービス)本ハンズオンにおける役割
NotebooksJupyterLabを動かす「作業机」。データの読み込み・前処理・学習ジョブの実行など、一連の作業コードを記述・実行する場所
Training Jobs(学習ジョブ)学習専用サーバーを自動起動し、XGBoostモデルを訓練する。完了後、学習済みモデルのファイルをS3へ自動保存する
Endpoint(推論サーバー)学習済みモデルをAPIとして公開し、新規データへの予測リクエストを受け付けるサーバー。テスト後すぐに削除する
S3 標準前処理済みの学習データ・検証データと、Training Jobsが出力するモデルファイルを格納するストレージ
CloudWatch LogsTraining JobsおよびEndpointの実行ログを自動収集する。エラー発生時の原因調査に使用する

ハンズオンの想定コスト

ハンズオンに関連するサービスで発生する費用の目安は 合計 $0.15〜$0.30 程度(約20〜45円) です。

リソース(サービス)単価想定時間概算
Notebooks$0.067/h1〜2時間$0.07〜$0.13
Training Jobs(学習ジョブ$0.302/h5〜15分$0.03〜$0.08
Endpoint(推論サーバー)$0.067/hテスト後すぐ削除$0.01〜$0.03
S3 標準保存: $0.025/GB/月
PUT: $0.005/1,000件
GET: $0.0004/1,000件
$0.01以下
CloudWatch Logs取り込み: $0.76/GB
保存: $0.033/GB/月
$0.01以下

S3とCloudWatch Logsは使用したデータ量に応じた従量課金です。本ハンズオンで扱うデータ(学習用CSV:数MB、モデルファイル:数百KB、実行ログ:数百KB程度)は非常に少量のため、GB単位で課金されるこれらのサービスの費用は実質無視できる水準になります。

後片付けを忘れなければ数十円以内に収まります。特に Endpointの削除忘れ(1日放置で+約$1.6)と、ブラウザを閉じただけで、JupyterLabを停止したつもりになることに注意してください。後編で確実な後片付け手順を解説します。

ハンズオンの手順

環境のセットアップ

では早速、開発環境を構築します。現在のAWSコンソールは最新の「Unified Studio」が標準となっています。

  1. AWSコンソールで「Amazon SageMaker」を検索して開く
  2. トップ画面の 「Amazon SageMaker Unified Studio の使用を開始」セクションから「今すぐ始める」をクリック
図3. SageMaker Unified Studioセットアップ画面
  1. 「プロジェクトデータと管理制御」セクションの「実行IAMロール」を設定する
    • Auto-create a new role with admin permissionsが選択されているのでそのまま選択(必要な権限を持つIAMロールが自動で作成されます)
図4. SageMaker Unified Studioセットアップ画面_IAMロール
  1. 「データ暗号化」はデフォルト(「AWS 所有キーを使用する」)のまま「設定」をクリック
図5. SageMaker Unified Studioセットアップ画面_KMSキー
  1. セットアップが完了するまでしばらく待つ
図6. SageMaker Unified Studioセットアップ画面_待機時のポップアップ
  1. 「開く」をクリックしてUnified Studioを開く
図7. SageMaker Unified Studioセットアップ画面_完了
図8. SageMaker Unified Studioセットアップ画面_SageMaker Unified Studioの初期表示

【筆者のメモ】

SageMakerの課金は、Studioの設定を行ったタイミングでは発生しません。JupyterLabなどのアプリを起動した瞬間から始まります。費用の目安は冒頭の「想定コスト」を参照してください。まずは気楽に触ってみましょう。

データの取得・確認

データの取得

環境が立ち上がったら、SageMaker Unified Studio内でノートブックを開き、実際にデータを取得します。以下のコードを実行して、AWS公式S3からデータをコピーし、pandasで読み込みます。

import pandas as pd

# AWS公式S3からデータをコピー
!aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_bank_marketing/bank-additional-full.csv .

# データの読み込み(カンマ区切り)
df = pd.read_csv('bank-additional-full.csv')
df.head()

df.head() を実行すると、先頭5行が表形式で表示されます。「age(年齢)」「job(職業)」「marital(婚姻状況)」などの列があり、最後の列「y」が今回の予測ターゲット(定期預金の成約:yes/no)です。

取得したデータの確認

df.head() で先頭5行は見えましたが、機械学習に進む前には「正しい行数・列数で読み込まれているか」「欠損値はないか」といったデータ品質の確認が必要です。

新規セルをヘッダーのケバブメニュー内「Add cell above / below」または B キーで追加して、以下のコマンドを実行してみましょう。

今回のハンズオンは機械学習に触れることが目的なので、「こんなデータを使うんだな」くらいの確認で次のステップに進んでいただいて問題ありません。

① データの行数・列数を確認

print(df.shape)
(41188, 21)

約4万1,000件・21列が正しく読み込まれていることを確認します。列数が1になっている場合は区切り文字の設定が誤っています。

② 全列名を確認

print(df.columns.tolist())
['age', 'job', 'marital', ..., 'nr.employed', 'y']

末尾に 'y' があれば正常です。

③ 各列のデータ型と欠損値の有無を確認

df.info()
 #   Column          Non-Null Count  Dtype
 0   age             41188 non-null  int64
 1   job             41188 non-null  object
...
20   y               41188 non-null  object

全列の Non-Null Count が行数(41188)と一致していれば欠損値ゼロで、前処理なしで進められます。Dtypeobject は文字列(カテゴリデータ)で、後編の前処理で数値に変換します。

前編のまとめ

ここまでで機械学習を始めるための準備が整いました。環境構築は一見難しそうですが、一度作ってしまえばあとは分析に集中できます。次回の後編では、この環境とデータを使って実際にモデルを学習させ、予測を行っていきます!

後編はこちら:【後編】機械学習って何をしてるの?SageMakerで流れをまるごと体験

We Are Hiring!

記事の内容について「途中でわからないことが出てきた」「ここをもっと深ぼりたい!」と感じている方もいるかもしれません。そんなとき、有識者にすぐ相談できる環境があるかどうかで、成長のスピードは大きく変わります。

FindConsultingでは、充実したメンター制度を設けており、経験豊富なエンジニアが日々の業務や技術的な疑問をしっかりサポートします。「わからないことをすぐに相談できる」「1人で抱え込まなくていい」環境で、着実にスキルを積み上げることができます。 「未経験・経験が浅くても挑戦したい」「サポートを受けながら成長したい」と感じた方は、ぜひ私たちと話してみませんか?

現在、FindConsultingでは一緒に成長してくれる仲間を募集しています。 まずはカジュアル面談からでも、ぜひお気軽にお声がけください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

弊社FindConsulting在籍のエンジニアです。
これまでITエンジニアとして、受託および自社システムの開発・テストに従事、その後活躍の場をプロジェクト管理へ広げ、システムリプレイス案件にてPMOおよびPMとしてプロジェクトを牽引してきました。
現場での開発経験と、管理側でのプロジェクト全体を俯瞰する経験の両輪を活かし、品質管理の徹底や業務の効率化を推進することに強みを持ちます。
本ブログではこれまでの実務で培った知見をもとに、AWSなどの技術活用やプロジェクト運営に役立つ情報を発信します。

目次