チュートリアル: リモート推論モデルの構築
次のチュートリアルでは、Amazon Redshift を使用することなく、Amazon SageMaker で以前にトレーニングおよびデプロイしたランダムカットフォレストモデルを作成する方法の手順を示します。ランダムカットフォレストアルゴリズムは、データセット内の異常なデータポイントを検出します。リモート推論を使用してモデルを作成すると、ランダムカットフォレスト SageMaker モデルを Amazon Redshift に取り込むことができます。次に、Amazon Redshift で、SQL を使用してリモート SageMaker エンドポイントで予測を実行します。
CREATE MODEL コマンドを使用して、Amazon SageMaker エンドポイントから機械学習モデルをインポートし、Amazon Redshift 予測関数を準備できます。CREATE MODEL オペレーションを使用するときは、SageMaker 機械学習モデルのエンドポイント名を指定します。
このチュートリアルでは、SageMaker モデルエンドポイントを使用して Amazon Redshift の機械学習モデルを作成します。機械学習モデルの準備が整ったら、それを使用して Amazon Redshift で予測を実行できます。まず、Amazon SageMaker でエンドポイントをトレーニングして作成し、次にエンドポイント名を取得します。次に、CREATE MODEL コマンドを使用して、Amazon Redshift ML でモデルを作成します。最後に、CREATE MODEL コマンドによって生成される予測関数を使用して、モデルに予測を実行します。
ユースケースの例
ランダムカットフォレストモデルとリモート推論を使用して、電子商取引の急激な増減を予測するなど、他のデータセットの異常を検出できます。また、天候や地震活動の著しい変化を予測することもできます。
タスク
-
前提条件
-
ステップ 1: Amazon SageMaker モデルにデプロイする
-
ステップ 2: SageMaker モデルエンドポイントを取得する
-
ステップ 3: Amazon S3 から Amazon Redshift にデータをロードする
-
ステップ 4: Amazon Redshift ML を使用してモデルを作成する
-
ステップ 5: モデルを使用して予測を実行する
前提条件
このチュートリアルを完了するためには、以下のものが必要です。
-
Amazon Redshift 機械学習の管理の設定を完了しました。
-
NYC タクシーデータセット
をダウンロードし、Amazon S3 バケットを作成し、Amazon S3 バケットにデータをアップロードしました。 -
SageMaker モデルとエンドポイントをトレーニングしてデプロイし、SageMaker エンドポイントの名前を取得する必要があります。この AWS CloudFormation テンプレート
を使用して、すべての SageMaker リソースを AWS アカウントに自動的にプロビジョニングします。
ステップ 1: Amazon SageMaker モデルにデプロイする
-
モデルをデプロイするには、Amazon SageMaker コンソールに移動し、ナビゲーションペインで [Notebook] (ノートブック)から [Notebook instances] (ノートブックインスタンス) を選択します。
-
CloudFormation テンプレートによって作成された Jupyter Notebook に対して [Open Jupyter] (Jupyter を開く) を選択します。
-
[
bring-your-own-model-remote-inference.ipynb
] を選択します。 -
次の行を Amazon S3 バケットとプレフィックスに置き換えて、トレーニングの入力と出力を Amazon S3 に保存するパラメータを設定します。
data_location=f"s3://
{bucket}/{prefix}/
", output_path=f"s3://{bucket}/{prefix}/
output", -
[fast-forward] (早送り) ボタンを押すと、すべてのセルで実行されます。
ステップ 2: SageMaker モデルエンドポイントを取得する
Amazon SageMaker コンソールで、ナビゲーションペインの [Inference] (推論) で、[Endpoints] (エンドポイント) を選択し、モデル名を見つけます。Amazon Redshift でリモート推論モデルを作成するときは、モデルのエンドポイント名をコピーする必要があります。
ステップ 3: Amazon S3 から Amazon Redshift にデータをロードする
Amazon Redshift クエリエディタ v2 を使用して Amazon Redshift で以下の SQL コマンドを実行します。これらのコマンドは rcf_taxi_data
テーブルが存在する場合はそれをドロップし、同じ名前のテーブルを作成して、サンプルデータセットをテーブルにロードします。
DROP TABLE IF EXISTS public.rcf_taxi_data CASCADE; CREATE TABLE public.rcf_taxi_data (ride_timestamp timestamp, nbr_passengers int); COPY public.rcf_taxi_data FROM 's3://sagemaker-sample-files/datasets/tabular/anomaly_benchmark_taxi/NAB_nyc_taxi.csv' IAM_ROLE default IGNOREHEADER 1 FORMAT AS CSV;
ステップ 4: Amazon Redshift ML を使用してモデルを作成する
次のクエリを実行し、前のステップで取得した SageMaker モデルエンドポイントを使用して Amazon Redshift ML でモデルを作成します。
を独自の SageMaker エンドポイントの名前と置き換えます。randomcutforest-xxxxxxxxx
CREATE MODEL public.remote_random_cut_forest FUNCTION remote_fn_rcf(int) RETURNS decimal(10, 6) SAGEMAKER '
<randomcutforest-xxxxxxxxx>
' IAM_ROLE default;
モデルのステータスを確認する (オプション)
SHOW MODEL コマンドを使用して、モデルの準備が完了したことを知ることができます。
モデルのステータスを確認するには、次の SHOW MODEL オペレーションを使用します。
SHOW MODEL public.remote_random_cut_forest
出力には、SageMaker エンドポイントと関数名が表示されます。
+--------------------------+-----------------------------------------+ | Model Name | remote_random_cut_forest | +--------------------------+-----------------------------------------+ | Schema Name | public | | Owner | awsuser | | Creation Time | Wed, 15.06.2022 17:58:21 | | Model State | READY | | | | | PARAMETERS: | | | Endpoint |
<randomcutforest-xxxxxxxxx>
| | Function Name | remote_fn_rcf | | Inference Type | Remote | | Function Parameter Types | int4 | | IAM Role | default-aws-iam-role | +--------------------------+-----------------------------------------+
ステップ 5: モデルを使用して予測を実行する
Amazon SageMaker ランダムカットフォレストアルゴリズムは、データセット内の異常なデータポイントを検出するように設計されています。この例では、モデルは、重要なイベントによるタクシー乗車の急増を検出するように設計されています。このモデルを使用して、各データポイントの異常スコアを生成することにより、異常なイベントを予測できます。
タクシーデータセット全体の異常スコアを計算するには、次のクエリを使用します。ここでは、前のステップの CREATE MODEL ステートメントで使用した関数を参照しています。
SELECT ride_timestamp, nbr_passengers, public.remote_fn_rcf(nbr_passengers) AS score FROM public.rcf_taxi_data;
異常値の上限と下限を確認する (オプション)
次のクエリを実行して、平均スコアから 3 標準偏差を超えるスコアのデータポイントを見つけます。
WITH score_cutoff AS ( SELECT STDDEV(public.remote_fn_rcf(nbr_passengers)) AS std, AVG(public.remote_fn_rcf(nbr_passengers)) AS mean, (mean + 3 * std) AS score_cutoff_value FROM public.rcf_taxi_data ) SELECT ride_timestamp, nbr_passengers, public.remote_fn_rcf(nbr_passengers) AS score FROM public.rcf_taxi_data WHERE score > ( SELECT score_cutoff_value FROM score_cutoff ) ORDER BY 2 DESC;
次のクエリを実行して、平均スコアから 3 標準偏差を超えるスコアのデータポイントを見つけます。
WITH score_cutoff AS ( SELECT STDDEV(public.remote_fn_rcf(nbr_passengers)) AS std, AVG(public.remote_fn_rcf(nbr_passengers)) AS mean, (mean - 3 * std) AS score_cutoff_value FROM public.rcf_taxi_data ) SELECT ride_timestamp, nbr_passengers, public.remote_fn_rcf(nbr_passengers) AS score FROM public.rcf_taxi_data WHERE score < ( SELECT score_cutoff_value FROM score_cutoff ) ORDER BY 2 DESC;
関連トピック
Amazon Redshift ML の詳細については、次のドキュメントを参照してください。
機械学習の詳細については、以下のドキュメントを参照してください。