

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 ML
<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 和 OFF) 和多層感知器 (AUTO ON)、K 平均值 (AUTO OFF) 和線性學習程式。

**Topics**
+ [針對 Amazon Redshift ML 管理進行叢集和組態設定](#admin-setup)
+ [使用模型可解釋性與 Amazon Redshift ML](#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 佈建叢集。若要了解如何使用 Amazon Redshift ML 搭配 Amazon Redshift Serverless，請參閱 [Amazon Redshift Serverless 入門](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html)。

若要為 Amazon Redshift ML 執行一次性叢集設定 

1. 使用 AWS 管理主控台 或 AWS Command Line Interface () 建立 Redshift 叢集AWS CLI。請務必在建立叢集時連接 AWS Identity and Access Management (IAM) 政策。如需使用 Amazon Redshift ML 搭配 Amazon SageMaker AI 時所需許可的詳細資訊，請參閱[使用 Amazon Redshift 機器學習 (ML) 時所需的許可](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#iam-permission-ml?)。

1. 使用下列其中一個方法，建立使用 Amazon Redshift ML 所需的 IAM 角色：
   + 若要使用 SageMaker AI 搭配 Amazon Redshift ML，請建立具有 `AmazonS3FullAccess` 和 `AmazonSageMakerFullAccess` 政策的 IAM 角色。如果您打算同時建立預測模型，也可以將 `AmazonForecastFullAccess` 政策附加至您的角色。
   + 若要使用 Amazon Bedrock 搭配 Amazon Redshift ML，請建立具有 `AmazonS3FullAccess` 和 `AmazonBedrockFullAccess` 政策的 IAM 角色。
   + 我們建議您透過 Amazon Redshift 主控台建立 IAM 角色，其具有有權執行 SQL 命令 (例如 CREATE MODEL) 的 `AmazonRedshiftAllCommandsFullAccess` 政策。Amazon Redshift 使用無縫 API 型機制，以程式設計方式 AWS 帳戶 代表您在 中建立 IAM 角色。Amazon Redshift 會自動將現有的 AWS 受管政策連接到 IAM 角色。此方法意味著您可以保留在 Amazon Redshift 主控台內，而不必切換到 IAM 主控台來建立角色。如需詳細資訊，請參閱[建立 IAM 角色做為 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 Redshift 用來儲存傳送至 Amazon SageMaker AI 的訓練資料，並從 Amazon SageMaker AI 接收訓練過的模型。

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 所需許可的相關資訊，請參閱[搭配 Amazon SageMaker AI 使用 Amazon Redshift ML 所需的許可](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)。
**注意**  
對遠端 SageMaker AI 模型進行的推論呼叫不會通過您的 VPC。

如需有關如何使用 CREATE MODEL 陳述式開始針對不同使用案例建立模型的資訊，請參閱 [CREATE MODEL](r_CREATE_MODEL.md)。

### 管理許可和擁有權
<a name="permissions-ownership"></a>

就像其他資料庫物件 (例如資料表或函數) 一樣，Amazon Redshift 會繫結建立和使用機器學習模型來存取控制機制。建立執行預測函數的模型有不同的許可。

下列範例使用兩個使用者群組 `retention_analyst_grp` (模型建立者) 和 `marketing_analyst_grp` (模型使用者) 來說明 Amazon Redshift 如何管理存取控制。保留分析師會建立機器學習模型，讓其他一組使用者可透過取得的許可使用這些模型。

超級使用者可以使用下列陳述式 GRANT (授予) USER 或 GROUP 許可，以建立機器學習模型。

```
GRANT CREATE MODEL TO GROUP retention_analyst_grp;
```

如果使用者擁有 SCHEMA 的一般 CREATE 許可，則具有此許可的使用者或群組可以在叢集中的任何結構描述中建立模型。機器學習模型是結構描述階層的一部分，與資料表、檢視表、程序和使用者定義函數類似。

假設結構描述 `demo_ml` 已存在，請依照下列方式授予兩個使用者群組結構描述上的許可。

```
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\$1analyst\$1grp GROUP。

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

搭配 CREATE MODEL 和 EXECUTE 使用 REVERSE 陳述式，可撤銷使用者或群組的這些許可。如需許可控制命令的相關資訊，請參閱 [GRANT](r_GRANT.md) 和 [REVOKE](r_REVOKE.md)。

## 使用模型可解釋性與 Amazon Redshift ML
<a name="clarify"></a>

透過 Amazon Redshift ML 中的模型可解釋性，您可以使用特徵重要性值，協助您了解訓練資料中的每個屬性如何影響預測結果。

模型可解釋性可以解釋模型進行的預測，以協助改善您的機器學習 (ML) 模型。模型可解釋性可幫助解釋這些模型如何使用特徵歸因方法進行預測。

Amazon Redshift ML 整合了模型可解釋性，為 Amazon Redshift ML 使用者提供模型解釋功能。如需模型可解釋性的相關資訊，請參閱《Amazon SageMaker AI 開發人員指南》**中的[什麼是機器學習預測的公平性和模型可解釋性？](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)。

模型解釋性還可監控模型在生產環境中為特徵屬性漂移所做的推論。它還提供了一些工具來幫助您生成模型治理報告，您可以使用這些報告告知風險和合規團隊以及外部監管機構。

當您在使用 CREATE MODEL 陳述式時指定 AUTO ON 或 AUTO OFF 選項時，模型訓練任務完成後，SageMaker AI 會建立解釋輸出。您可以使用 EXPLAIIN\$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 會自動建立第二個推論函數，您可以使用該函數輸出相對於每個標籤的機率。第二個推論函數的名稱是您指定的推論函數名稱接著字串 `_probabilities`。例如，如果您將推論函數命名為 `customer_churn_predict`，則第二個推論函數的名稱為 `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
```

 下列範例會傳回所有具有 `True`. 標籤且概率大於 0.7 的資料列，這表示客戶可能流失。

```
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
```