Amazon Redshift 機械学習の開始方法
Amazon Redshift ML を使用すると、SQL ユーザーは、使い慣れた SQL コマンドを使用して、機械学習モデルを簡単に作成、トレーニング、デプロイできます。Amazon Redshift ML により Redshift クラスター内のデータを使用することで、Amazon SageMaker のモデルをトレーニングできます。その後、モデルはローカライズされ、Amazon Redshift データベース内で予測が行われます。Amazon Redshift ML は現在、機械学習アルゴリズム XGBoost (AUTO ON および AUTO OFF) と多層パーセプトロン (AUTO ON)、K-Means (AUTO OFF)、線形学習をサポートしています。
トピック
Amazon Redshift ML 管理者によるクラスターと設定のセットアップ
Amazon Redshift ML で作業する前に、クラスターの設定を完了し、Amazon Redshift ML を使用するためのアクセス許可を設定します。
Amazon Redshift ML を使用するためのクラスターの設定
Amazon Redshift ML を使用する前に、以下の前提条件を満たしてください。
Amazon Redshift でプロビジョニングされたクラスターを使用するには、Amazon Redshift の管理者は、次の 1 回限りのセットアップを行う必要があります。Amazon Redshift Serverless で Amazon Redshift ML を使用するには、「Amazon Redshift Serverless データウェアハウスの使用を開始」を参照してください。
Amazon Redshift ML のワンタイムクラスターセットアップを実行するには
-
AWS Management Console または AWS Command Line Interface (AWS CLI) を使用して、Redshift クラスターを作成します。クラスターの作成時には、必ずAWS Identity and Access Management (IAM) ポリシーをアタッチするようにしてください。Amazon SageMaker で Amazon Redshift ML を使用するために必要なアクセス許可の詳細については、「Amazon Redshift でのアイデンティティベースのポリシー (IAM ポリシー) の使用」を参照してください。
-
以下のいずれかの方法で Amazon Redshift ML を使用するために必要な IAM ロールを作成します。
-
Amazon Redshift ML で SageMaker を使用するには、
AmazonS3FullAccess
ポリシーとAmazonSageMakerFullAccess
ポリシーを持つ IAM ロールを作成します。Forecast モデルも作成する予定がある場合は、ロールにもAmazonForecastFullAccess
ポリシーを添付してください。 -
Amazon Redshift ML で Amazon Bedrock を使用するには、
AmazonS3FullAccess
ポリシーとAmazonBedrockFullAccess
ポリシーを持つ IAM ロールを作成します。 -
IAM ロールを作成する際は、CREATE MODEL など SQL コマンドの実行が許可された
AmazonRedshiftAllCommandsFullAccess
ポリシーを持つ、Amazon Redshift コンソールを使用することをお勧めします。Amazon Redshift は、シームレスな API ベースのメカニズムを使用して、AWS アカウント 内でユーザーに代わりプログラム的に IAM ロールを作成します。Amazon Redshift は、既存の AWS 管理ポリシーを IAM ロールに自動的にアタッチします。このアプローチにより、ロール作成のために IAM コンソールに切り替える必要はなくなり、作業を Amazon Redshift コンソール内で完了できます。詳細については、「Creating an IAM role as default for Amazon Redshift」を参照してください。IAM ロールをクラスターのデフォルトとして作成する場合は、
redshift
をリソース名の一部として含めるか、RedShift 固有のタグを使用してそれらのリソースをタグ付けします。クラスターで拡張 Amazon VPC ルーティングが有効になっている場合は、Amazon Redshift コンソールで作成された IAM ロールを使用できます。この IAM ロールには
AmazonRedshiftAllCommandsFullAccess
ポリシーがアタッチされており、このポリシーに以下の許可を追加します。これらの追加のアクセス許可により、Amazon Redshift は、お客様のアカウントで Elastic Network Interface (ENI) を作成および削除できます。さらにこの ENI を、Amazon EC2 または Amazon ECS で実行されているコンパイルタスクにアタッチします。これにより、Amazon S3 バケット内のオブジェクトに対しては、インターネットアクセスがブロックされた仮想プライベートクラウド (VPC) 内からのアクセスのみが許可されます。{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcEndpoints", "ec2:DescribeDhcpOptions", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:CreateNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "*" }
Amazon Bedrock 基盤モデルを使用するには、次のセクションを追加します。
// Required section if you use Bedrock models. { "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": [ "arn:aws:bedrock:
<region>
::foundation-model/*" ] } -
より制限の厳しいポリシーを持つ IAM ロールを作成する場合、以下のポリシーを使用できます。必要に応じてこのポリシーを変更することもできます。
Amazon S3 バケット
redshift-downloads/redshift-ml/
は、他のステップや例で使用されるサンプルデータが保存される場所です。Amazon S3 からデータをロードする必要がない場合は、削除できます。または、Amazon Redshift にデータをロードするために使用する他の Amazon S3 バケットに置き換えます。
、your-account-id
、およびyour-role
amzn-s3-demo-bucket
値は、CREATE MODEL コマンドの一部として指定する値です。(オプション) Amazon Redshift ML の使用中に AWS KMS キーを指定する場合は、サンプルポリシーの AWS KMS キーセクションを使用します。
値は、CREATE MODEL コマンドの一部として使用するキーです。your-kms-key
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents", "sagemaker:*Job*", "sagemaker:AddTags", "sagemaker:CreateModel", "sagemaker:CreateEndpoint", "sagemaker:CreateEndpointConfig", "sagemaker:DeleteEndpoint", "sagemaker:DeleteEndpointConfig, "sagemaker:DeleteModel" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole", "s3:AbortMultipartUpload", "s3:GetObject", "s3:DeleteObject", "s3:PutObject" ], "Resource": [ "arn:aws:iam::
<your-account-id>
:role/<your-role>
", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:s3:::redshift-downloads/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket, "arn:aws:s3:::redshift-downloads" ] } // Optional section needed if you use AWS KMS keys. ,{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:<your-region>
:<your-account-id>
:key/<your-kms-key>
" ] } ] }
-
-
Amazon Redshift と SageMaker が、他のサービスとやり取りするロールを引き受けることを許可するには、IAM ロールに以下の信頼ポリシーを追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "sagemaker.amazonaws.com", "forecast.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
(オプション) Amazon S3 バケットと AWS KMS キーを作成します。これらは、Amazon SageMaker に送信されたトレーニングデータを保存し、また、トレーニング済みモデルを Amazon SageMaker から受信するために、Amazon Redshift が使用するものです。
-
(オプション) さまざまなユーザーグループへのアクセスを制御するために、IAM ロールと Amazon S3 バケットのさまざまな組み合わせを作成します。
-
(オプション) Redshift クラスターで VPC ルーティングを有効にした場合は、この Redshift クラスターが置かれている VPC 用に、Amazon S3 VPC エンドポイントならびに SageMaker エンドポイントを作成します。これにより、CREATE MODEL の実行中、トラフィックがサービス間にある VPC を通過できるようになります。VPC ルーティングの詳細については、「Amazon Redshift の拡張 VPC ルーティング」を参照してください。
ハイパーパラメータ調整ジョブにプライベート VPC を指定するために必要なアクセス許可の詳細については、Amazon SageMakerでのAmazon Redshift 機械学習を使用するために必要なアクセス許可を参照してください。
CREATE MODEL ステートメントを使用して、さまざまなユースケースモデルの作成を開始する方法については、「モデルを作成する」を参照してください。
許可と所有権の管理
Amazon Redshift はテーブルや関数などの他のデータベースオブジェクトと同様に、機械学習モデルの作成と使用をバインドし、制御メカニズムにアクセスします。予測関数を実行するモデルの作成に関しては、個別の許可があります。
次の例では、retention_analyst_grp
(モデルクリエーター) とmarketing_analyst_grp
(モデルユーザー)の 2 つのユーザーグループを使用して、Amazon Redshift がアクセス制御を管理する方法を示します。この retention analyst は、他のユーザーセットが取得した許可を通じて使用できる機械学習モデルを作成します。
スーパーユーザーは、次のステートメントを使用して、USER または GROUP に機械学習モデルを作成するための許可を GRANT (付与) できます。
GRANT CREATE MODEL TO GROUP retention_analyst_grp;
この許可を持つユーザーまたはグループは、クラスター内で任意のスキーマのモデルを作成できます (ユーザーが SCHEMA に対する通常の CREATE 許可を持っている場合)。機械学習モデルは、テーブル、ビュー、プロシージャ、およびユーザー定義関数と同様にスキーマ階層の一部です。
スキーマ demo_ml
がすでに存在すると仮定して、次のように 2 つのユーザーグループにスキーマに対する許可を付与します。
GRANT CREATE, USAGE ON SCHEMA demo_ml TO GROUP retention_analyst_grp;
GRANT USAGE ON SCHEMA demo_ml TO GROUP marketing_analyst_grp;
他のユーザーが機械学習の推論機能を使用できるようにするには、EXECUTE 許可を付与します。次の例では、EXECUTE 許可を使用して、モデルを使用する許可を marketing_analst_grp GROUP に付与します。
GRANT EXECUTE ON MODEL demo_ml.customer_churn_auto_model TO GROUP marketing_analyst_grp;
ユーザーまたはグループからこれらの許可を取り消すには、CREATE MODEL および EXECUTE とともに REVOKE ステートメントを使用します。アクセス許可のコントロールコマンドの詳細については、「GRANT」および「REVOKE」を参照してください。
Amazon Redshift 機械学習でのモデルの説明可能性の使用
Amazon Redshift 機械学習 のモデルの説明可能性では、特徴量の重要度の値を使用して、トレーニングデータの各属性が予測結果にどのように寄与するかを理解することができます。
モデルの説明可能性は、モデルの予測を説明することで、機械学習 (ML) モデルの改善に役立ちます。モデルの説明可能性は、これらのモデルが特徴属性アプローチを使用してどのように予測するかを説明するのに役立ちます。
Amazon Redshift機械学習 には、モデルの説明機能が組み込まれており、モデルの説明機能が Amazon Redshift 機械学習 ユーザーに提供されます。モデルの説明可能性の詳細については、Machine Learning 予測における公平性とモデル説明可能性とはのAmazon SageMaker デベロッパーガイド。
また、モデルの説明可能性は、モデルが稼働時に行う特徴属性のドリフトに対する推論を監視します。また、リスクとコンプライアンスのチーム、および外部の規制当局への通知に使用できるモデルガバナンスレポートの作成に役立つツールも提供します。
CREATE MODEL ステートメントの使用時に AUTO ON または AUTO OFF オプションを指定すると、モデルトレーニングジョブが終了した後、SageMaker によって説明の出力が作成されます。EXPLAIN_MODEL 関数を使用すると、JSON形式で説明可能性に関するレポートのクエリを行えます。詳細については、「機械学習機能」を参照してください。
Amazon Redshift ML 確率メトリクス
教師あり学習問題では、クラスラベルは入力データを使用した予測の結果です。たとえば、モデルを使用して顧客がストリーミングサービスに再登録するかどうかを予測する場合、考えられるラベルは可能性が高いラベルと可能性の低いラベルです。Redshift ML には、各ラベルに確率を割り当ててその可能性を示す確率メトリクスの機能があります。これにより、予測された結果に基づいて、より多くの情報に基づいた意思決定を行うことができます。Amazon Redshift ML では、問題タイプが二項分類または多クラス分類の AUTO ON モデルを作成するときに、確率メトリクスを使用できます。AUTO ON パラメータを省略すると、Redshift ML はモデルが AUTO ON になっているはずだと仮定します。
モデルを作成する
モデルを作成すると、Amazon Redshift はモデルタイプと問題タイプを自動的に検出します。分類の問題の場合、Redshift は自動的に 2 つ目の推論関数を作成します。これを使用して、各ラベルに対する確率を出力できます。この 2 番目の推論関数の名前は、指定した推論関数名の後に文字列 _probabilities
が続くものです。たとえば、推論関数に customer_churn_predict
という名前を付けると、2 番目の推論関数の名前は customer_churn_predict_probabilities
になります。次に、この関数にクエリを実行して、各ラベルの確率を取得できます。
CREATE MODEL customer_churn_model FROM customer_activity PROBLEM_TYPE BINARY_CLASSIFICATION TARGET churn FUNCTION customer_churn_predict IAM_ROLE {default} AUTO ON SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket'
確率を取得する
確率関数が準備できたら、コマンドを実行すると、返された確率の配列とそれに関連するラベルを含む SUPER 型が返されます。たとえば、結果 "probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]
は False ラベルの確率が 0.7、True ラベルの確率が 0.3 であることを意味します。
SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) FROM customer_activity; customer_churn_predict_probabilities -------------------- {"probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]} {"probabilities" : [0.8, 0.2], "labels" : ["False.", "True."]} {"probabilities" : [0.75, 0.25], "labels" : ["True.", "False"]}
確率とラベルの配列は、常に確率の降順でソートされます。確率関数の SUPER で返された結果をネスト解除することで、最も高い確率で予測されたラベルのみを返すクエリを作成できます。
SELECT prediction.labels[0], prediction.probabilities[0] FROM (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity); labels | probabilities -----------+-------------- "False." | 0.7 "False." | 0.8 "True." | 0.75
クエリを簡単にするために、予測関数の結果をテーブルに保存できます。
CREATE TABLE churn_auto_predict_probabilities AS (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity);
結果を含むテーブルをクエリすると、0.7 を超える確率を持つ予測のみを返すことができます。
SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7; labels | probabilities -----------+-------------- "False." | 0.8 "True." | 0.75
インデックス表記を使うと、特定のラベルの確率を求めることができます。次の例では、すべての True.
ラベルの確率を返します。
SELECT label, index, p.prediction.probabilities[index] FROM churn_auto_predict_probabilities p, p.prediction.labels AS label AT index WHERE label='True.'; label | index | probabilities ---------+-------+--------------- "True." | 0 | 0.3 "True." | 0 | 0.2 "True." | 0 | 0.75
次の例では、顧客が解約する可能性が高いことを示す 0.7 を超える確率の True
ラベルが付いたすべての行が返されます。
SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7 AND prediction.labels[0] = "True."; labels | probabilities -----------+-------------- "True." | 0.75