

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Amazon Redshift 機械学習の開始方法
<a name="getting-started-machine-learning"></a>

Amazon Redshift ML を使用すると、SQL ユーザーは、使い慣れた SQL コマンドを使用して、機械学習モデルを簡単に作成、トレーニング、デプロイできます。Amazon Redshift ML では、Redshift クラスター内のデータを使用して、Amazon SageMaker AI でモデルをトレーニングできます。その後、モデルはローカライズされ、Amazon Redshift データベース内で予測が行われます。Amazon Redshift ML は現在、機械学習アルゴリズム XGBoost (AUTO ON および AUTO OFF) と多層パーセプトロン (AUTO ON)、K-Means (AUTO OFF)、線形学習をサポートしています。

**Topics**
+ [Amazon Redshift ML 管理者によるクラスターと設定のセットアップ](#admin-setup)
+ [Amazon Redshift 機械学習でのモデルの説明可能性の使用](#clarify)
+ [Amazon Redshift ML 確率メトリクス](#probability_metrics)

## Amazon Redshift ML 管理者によるクラスターと設定のセットアップ
<a name="admin-setup"></a>

Amazon Redshift ML で作業する前に、クラスターの設定を完了し、Amazon Redshift ML を使用するためのアクセス許可を設定します。

### Amazon Redshift ML を使用するためのクラスターの設定
<a name="cluster-setup"></a>

Amazon Redshift ML を使用する前に、以下の前提条件を満たしてください。

Amazon Redshift でプロビジョニングされたクラスターを使用するには、Amazon Redshift の管理者は、次の 1 回限りのセットアップを行う必要があります。Amazon Redshift Serverless で Amazon Redshift ML を使用するには、「[Amazon Redshift Serverless データウェアハウスの使用を開始](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html)」を参照してください。

Amazon Redshift ML のワンタイムクラスターセットアップを実行するには 

1. AWS マネジメントコンソール または AWS Command Line Interface (AWS CLI) を使用して、Redshift クラスターを作成します。クラスターの作成時には、必ずAWS Identity and Access Management (IAM) ポリシーをアタッチするようにしてください。Amazon Redshift ML で Amazon SageMaker AI を利用するために必要なアクセス許可の詳細については、「[Amazon Redshift でのアイデンティティベースのポリシー (IAM ポリシー) の使用](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#iam-permission-ml?)」を参照してください。

1. 以下のいずれかの方法で Amazon Redshift ML を使用するために必要な IAM ロールを作成します。
   + Amazon Redshift ML で SageMaker AI を使用するには、`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](https://docs.aws.amazon.com/redshift/latest/mgmt/default-iam-role.html)」を参照してください。

     IAM ロールをクラスターのデフォルトとして作成する場合は、`redshift` をリソース名の一部として含めるか、RedShift 固有のタグを使用してそれらのリソースをタグ付けします。

     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 キーセクションを使用します。*`your-kms-key`* 値は、CREATE MODEL コマンドの一部として使用するキーです。

------
#### [ JSON ]

****  

     ```
     {
         "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::111122223333: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"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "kms:CreateGrant",
                     "kms:Decrypt",
                     "kms:DescribeKey",
                     "kms:Encrypt",
                     "kms:GenerateDataKey*"
                  ],
                  "Resource": [
                     "arn:aws:kms:us-east-1:111122223333:key/<your-kms-key>"
                  ]
             }
         ]
     }
     ```

------

1. Amazon Redshift と SageMaker AI が、このロールを引き受けて他のサービスとやり取りできるようにするには、以下の信頼ポリシーを IAM ロールに追加します。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "redshift.amazonaws.com",
             "sagemaker.amazonaws.com",
             "forecast.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. (オプション) Amazon S3 バケットと AWS KMS キーを作成します。これらは、Amazon SageMaker AI に送信されたトレーニングデータを保存し、トレーニング済みのモデルを Amazon SageMaker AI から受信するために、Amazon Redshift が使用します。

1. (オプション) さまざまなユーザーグループへのアクセスを制御するために、IAM ロールと Amazon S3 バケットのさまざまな組み合わせを作成します。

1. 拡張 VPC ルーティングを有効にすると、Redshift ML と S3 バケット間のトラフィックはプライベート VPC を経由するようになります。VPC ルーティングの詳細については、「[Amazon Redshift の拡張 VPC ルーティング](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)」を参照してください。

   ハイパーパラメータチューニングジョブ用のプライベート VPC を指定するために必要なアクセス許可の詳細については、「[Permissions required to use Amazon Redshift ML with Amazon SageMaker AI](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)」を参照してください。
**注記**  
リモート SageMaker AI モデルに対する推論呼び出しは、VPC を経由しません。

CREATE MODEL ステートメントを使用して、さまざまなユースケースモデルの作成を開始する方法については、「[モデルを作成する](r_CREATE_MODEL.md)」を参照してください。

### 許可と所有権の管理
<a name="permissions-ownership"></a>

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\$1analst\$1grp GROUP に付与します。

```
GRANT EXECUTE ON MODEL demo_ml.customer_churn_auto_model TO GROUP marketing_analyst_grp;
```

ユーザーまたはグループからこれらの許可を取り消すには、CREATE MODEL および EXECUTE とともに REVOKE ステートメントを使用します。アクセス許可のコントロールコマンドの詳細については、「[GRANT](r_GRANT.md)」および「[REVOKE](r_REVOKE.md)」を参照してください。

## Amazon Redshift 機械学習でのモデルの説明可能性の使用
<a name="clarify"></a>

Amazon Redshift 機械学習 のモデルの説明可能性では、特徴量の重要度の値を使用して、トレーニングデータの各属性が予測結果にどのように寄与するかを理解することができます。

モデルの説明可能性は、モデルの予測を説明することで、機械学習 (ML) モデルの改善に役立ちます。モデルの説明可能性は、これらのモデルが特徴属性アプローチを使用してどのように予測するかを説明するのに役立ちます。

Amazon Redshift機械学習 には、モデルの説明機能が組み込まれており、モデルの説明機能が Amazon Redshift 機械学習 ユーザーに提供されます。モデルの説明可能性の詳細については、「*Amazon SageMaker AI デベロッパーガイド*」の「[What Is Fairness and Model Explainability for Machine Learning Predictions?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)」を参照してください。

また、モデルの説明可能性は、モデルが稼働時に行う特徴属性のドリフトに対する推論を監視します。また、リスクとコンプライアンスのチーム、および外部の規制当局への通知に使用できるモデルガバナンスレポートの作成に役立つツールも提供します。

CREATE MODEL ステートメントの使用時に AUTO ON または AUTO OFF オプションを指定した場合は、モデルトレーニングジョブの終了後に、SageMaker AI が説明の出力を作成します。EXPLAIN\$1MODEL 関数を使用すると、JSON形式で説明可能性に関するレポートのクエリを行えます。詳細については、「[機械学習機能](ml-function.md)」を参照してください。

## Amazon Redshift ML 確率メトリクス
<a name="probability_metrics"></a>

 教師あり学習問題では、クラスラベルは入力データを使用した予測の結果です。たとえば、モデルを使用して顧客がストリーミングサービスに再登録するかどうかを予測する場合、考えられるラベルは可能性が高いラベルと可能性の低いラベルです。Redshift ML には、各ラベルに確率を割り当ててその可能性を示す確率メトリクスの機能があります。これにより、予測された結果に基づいて、より多くの情報に基づいた意思決定を行うことができます。Amazon Redshift ML では、問題タイプが二項分類または多クラス分類の AUTO ON モデルを作成するときに、確率メトリクスを使用できます。AUTO ON パラメータを省略すると、Redshift ML はモデルが AUTO ON になっているはずだと仮定します。

### モデルを作成する
<a name="probability_metrics_create_model"></a>

 モデルを作成すると、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'
```

### 確率を取得する
<a name="probability_metrics_create_model_get_probability"></a>

 確率関数が準備できたら、コマンドを実行すると、返された確率の配列とそれに関連するラベルを含む [SUPER 型](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html)が返されます。たとえば、結果 `"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
```