

 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/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 機器學習函數
<a name="ml-function"></a>

透過使用 Amazon Redshift 機器學習 (ML)，您可以使用 SQL 陳述式訓練 ML 模型，並在 SQL 查詢中調用它們以進行預測。Amazon Redshift 模型可解釋性包含特徵重要性值，可協助您了解訓練資料中的每個屬性如何影響預測結果。

接下來，您可以找到 Amazon Redshift 支援的 SQL 機器學習函數的說明。

**Topics**
+ [EXPLAIN\$1MODEL 函數](r_explain_model_function.md)

# EXPLAIN\$1MODEL 函數
<a name="r_explain_model_function"></a>

EXPLAIN\$1MODEL 函數傳回 SUPER 資料類型，其中包含 JSON 格式的模型可解釋性報表。可解釋性報告包含有關所有模型特徵的 Shapley 值的資訊。

EXPLAIN\$1MODEL 函數目前僅支援 AUTO ON 或 AUTO OFF XGBoost 模型。

當可解釋性報告不可用時，函數會傳回顯示模型進度的狀態。其中包括 `Waiting for training job to complete`、`Waiting for processing job to complete` 和 `Processing job failed`。

當您執行 CREATE MODEL 陳述式時，解釋狀態會變成 `Waiting for training job to complete`。當模型經過訓練並傳送解釋請求時，解釋狀態會變成 `Waiting for processing job to complete`。當模型解釋成功完成後，即可獲得完整的可解釋性報告。否則狀態變成 `Processing job failed`。

當您執行 CREATE MODEL 陳述式時，您可以使用選用的 `MAX_RUNTIME` 參數來指定訓練應採取的時間上限。一旦模型建立達到這段時間，Amazon Redshift 就會停止建立模型。如果您在建立自動駕駛模型時達到該時間限制，Amazon Redshift 將傳回目前為止最佳模型。模型訓練完成後，模型可解釋性就可用，因此如果 `MAX_RUNTIME` 設定的時間較短，則可解釋性報告可能無法使用。訓練時間會因模型複雜度、資料大小及其他因素而有所不同。

## 語法
<a name="r_explain_model_function-synopsis"></a>

```
EXPLAIN_MODEL ('schema_name.model_name')
```

## 引數
<a name="r_explain_model_function-argument"></a>

 *schema\$1name*   
結構描述的名稱。如果未指定 schema\$1name，則會選取目前的結構描述。

 *model\$1name*   
模型的名稱。結構描述中的模型名稱必須是唯一的。

## 傳回類型
<a name="r_explain_model_function-return-type"></a>

EXPLAIN\$1MODEL 函數傳回 SUPER 資料類型，如下所示。

```
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05,"x1":0.10,"x2":0.30,"x3":0.15},"expected_value":0.50}}}}
```

## 範例
<a name="r_explain_model_function-examples"></a>

下列範例會傳回解釋狀態 `waiting for training job to complete`。

```
select explain_model('customer_churn_auto_model');
                 explain_model
--------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```

當模型解釋成功完成時，完整的可解釋性報告如下。

```
select explain_model('customer_churn_auto_model');
                                       explain_model
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05386043365892927,"x1":0.10801289723274592,"x2":0.23227865827017378,"x3":0.0676685133940455,"x4":0.0897097667672375,"x5":0.08502141653270926,"x6":0.07581993936077065,"x7":0.16462880604578135},"expected_value":0.8492974042892456}}}}
(1 row)
```

因為 EXPLAIIN\$1MODEL 函數會傳回 SUPER 資料類型，所以您可以查詢可解釋性報告。透過這樣做，您可以擷取 `global_shap_values`、`expected_value` 或特定於特徵的 Shapley 值。

以下範例會擷取模型的 `global_shap_values`。

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values from (select explain_model('customer_churn_auto_model') as report) as json_table;
                                                       global_shap_values
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"state":0.10983770427197151,"account_length":0.1772441398408543,"area_code":0.08626823968639591,"phone":0.0736669595282712,"intl_plan":3.344907436910987,"vmail_plan":0.09646600597854467,"vmail_message":0.2064922655089351,"day_mins":2.015038015251777,"day_calls":0.13179511076780168,"day_charge":0.4941091720480879,"eve_mins":0.46081379198626105,"eve_calls":0.16913440417758477,"eve_charge":0.09651014369401761,"night_mins":0.44218153640050845,"night_calls":0.15311640089218997,"night_charge":0.13850366104495426,"intl_mins":0.7583662464883899,"intl_calls":0.47144468610485685,"intl_charge":0.10945894673611875,"cust_serv_calls":0.31822051038387733}
(1 row)
```

以下範例會擷取特徵 x0 的 `global_shap_values`。

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values.x0 from (select explain_model('customer_churn_auto_model') as report) as json_table;
          x0
------------------------
  0.05386043365892927
(1 row)
```

如果模型是在一個特定的結構描述中建立的，且您有權存取建立的模型，那麼您可以查詢模型解釋，如下所示。

```
-- Check the current schema
SHOW search_path;
   search_path
------------------
  $user, public
(1 row)         
-- If you have the privilege to access the model explanation
-- in `test_schema`
SELECT explain_model('test_schema.test_model_name');
                       explain_model
---------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```