

 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/)を参照してください。

# チュートリアル: XGBoost モデルの構築
<a name="tutorial_xgboost"></a>

このチュートリアルでは、Amazon S3 のデータを使用してモデルを作成し、Amazon Redshift ML を使用してそのモデルで予測クエリを実行します。XGBoost アルゴリズムは、勾配ブーストツリーアルゴリズムの最適化された実装です。XGBoost は、他の勾配ブーストツリーアルゴリズムよりも多くのデータ型、リレーションシップ、および分布を処理します。XGBoost は、リグレッション、分類 (二項分類および多クラス分類)、ランキングの問題に使用できます。XGBoost アルゴリズムの詳細については、「Amazon SageMaker AI デベロッパーガイド」の「[XGBoost アルゴリズム](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html)」を参照してください。

`AUTO OFF` オプションの Amazon Redshift ML `CREATE MODEL` オペレーションは、現在 XGBoost を `MODEL_TYPE` としてサポートしています。目的やハイパーパラメータなどの関連情報をユースケースに基づいて、`CREATE MODEL` コマンドの一部として提供できます。

このチュートリアルでは、[紙幣認証データセット](https://archive.ics.uci.edu/ml/datasets/banknote+authentication) を使用します。これは、特定の紙幣が本物か偽造かを予測する二項分類問題です。

## ユースケースの例
<a name="tutorial_xgboost_tasks"></a>

Amazon Redshift ML を使用して、患者が健康か、または病気があるかを予測するなど、他の二項分類問題を解決できます。また、メールがスパムかスパムでないかを予測することもできます。

**タスク**
+ 前提条件
+ ステップ 1: Amazon S3 から Amazon Redshift にデータをロードする
+ ステップ 2: 機械学習モデルを作成する
+ ステップ 3: モデルを使用して予測を実行する

## 前提条件
<a name="tutorial_xgboost_prereqs"></a>

このチュートリアルを完了するには、Amazon Redshift ML の「[管理の設定](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html)」を完了している必要があります。

## ステップ 1: Amazon S3 から Amazon Redshift にデータをロードする
<a name="tutorial_xgboost_step_load"></a>

[Amazon Redshift クエリエディタv2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) を使用する次のクエリを実行します。

次のクエリは、2 つのテーブルを作成し、Amazon S3 からデータをロードし、データをトレーニングセットとテストセットに分割します。トレーニングセットを使用してモデルをトレーニングし、予測関数を作成します。次に、テストセットで予測関数をテストします。

```
--create training set table
CREATE TABLE banknoteauthentication_train(
    variance FLOAT,
    skewness FLOAT,
    curtosis FLOAT,
    entropy FLOAT,
    class INT
);

--Load into training table
COPY banknoteauthentication_train
FROM
    's3://redshiftbucket-ml-sagemaker/banknote_authentication/train_data/' IAM_ROLE default REGION 'us-west-2' IGNOREHEADER 1 CSV;

--create testing set table
CREATE TABLE banknoteauthentication_test(
    variance FLOAT,
    skewness FLOAT,
    curtosis FLOAT,
    entropy FLOAT,
    class INT
);

--Load data into testing table
COPY banknoteauthentication_test
FROM
    's3://redshiftbucket-ml-sagemaker/banknote_authentication/test_data/' 
    IAM_ROLE default 
    REGION 'us-west-2' 
    IGNOREHEADER 1 
    CSV;
```

## ステップ 2: 機械学習モデルを作成する
<a name="tutorial_xgboost_step_create_model"></a>

次のクエリは、前のステップで作成したトレーニングセットから Amazon Redshift ML で XGBoost モデルを作成します。`amzn-s3-demo-bucket` ユーザーの `S3_BUCKET` と置換します。これにより、入力データセットと他の Redshift ML アーティファクトが格納されます。

```
CREATE MODEL model_banknoteauthentication_xgboost_binary
FROM
    banknoteauthentication_train 
    TARGET class 
    FUNCTION func_model_banknoteauthentication_xgboost_binary 
    IAM_ROLE default 
    AUTO OFF 
    MODEL_TYPE xgboost 
    OBJECTIVE 'binary:logistic' 
    PREPROCESSORS 'none' 
    HYPERPARAMETERS DEFAULT
EXCEPT(NUM_ROUND '100') 
SETTINGS(S3_BUCKET 'amzn-s3-demo-bucket');
```

### モデルトレーニングのステータスを表示する (オプション)
<a name="tutorial_xgboost_show_status"></a>

SHOW MODEL コマンドを使用して、モデルの準備が完了したことを知ることができます。

次のクエリを使用して、モデルトレーニングの進行状況を監視します。

```
SHOW MODEL model_banknoteauthentication_xgboost_binary;
```

モデルが `READY` の場合、SHOW MODEL オペレーションは、次の出力例に示すように `train:error` メトリクスを提供します。`train:error` メトリクスは、小数点以下 6 桁までのモデルの精度の測定単位です。値 0 が最も正確で、値 1 が最も低い精度です。

```
+--------------------------+--------------------------------------------------+
|        Model Name        |   model_banknoteauthentication_xgboost_binary    |
+--------------------------+--------------------------------------------------+
| Schema Name              | public                                           |
| Owner                    | awsuser                                          |
| Creation Time            | Tue, 21.06.2022 19:07:35                         |
| Model State              | READY                                            |
| train:error              |                                         0.000000 |
| Estimated Cost           |                                         0.006197 |
|                          |                                                  |
| TRAINING DATA:           |                                                  |
| Query                    | SELECT *                                         |
|                          | FROM "BANKNOTEAUTHENTICATION_TRAIN"              |
| Target Column            | CLASS                                            |
|                          |                                                  |
| PARAMETERS:              |                                                  |
| Model Type               | xgboost                                          |
| Training Job Name        | redshiftml-20220621190735686935-xgboost          |
| Function Name            | func_model_banknoteauthentication_xgboost_binary |
| Function Parameters      | variance skewness curtosis entropy               |
| Function Parameter Types | float8 float8 float8 float8                      |
| IAM Role                 | default-aws-iam-role                             |
| S3 Bucket                | amzn-s3-demo-bucket                              |
| Max Runtime              |                                             5400 |
|                          |                                                  |
| HYPERPARAMETERS:         |                                                  |
| num_round                |                                              100 |
| objective                | binary:logistic                                  |
+--------------------------+--------------------------------------------------+
```

## ステップ 3: モデルを使用して予測を実行する
<a name="tutorial_xgboost_step_perform_predictions"></a>

### モデルの精度を確認する
<a name="tutorial_xgboost_check_accuracy"></a>

次の予測クエリでは、前のステップで作成した予測関数を使用してモデルの精度を確認します。このクエリをテストセットで実行して、モデルがトレーニングセットに対して過度な近さで対応しないことを確認します。この近い対応はオーバーフィットとも呼ばれ、オーバーフィットによりモデルが信頼できない予測を行う可能性があります。

```
WITH predict_data AS (
    SELECT
        class AS label,
        func_model_banknoteauthentication_xgboost_binary (variance, skewness, curtosis, entropy) AS predicted,
        CASE
            WHEN label IS NULL THEN 0
            ELSE label
        END AS actual,
        CASE
            WHEN actual = predicted THEN 1 :: INT
            ELSE 0 :: INT
        END AS correct
    FROM
        banknoteauthentication_test
),
aggr_data AS (
    SELECT
        SUM(correct) AS num_correct,
        COUNT(*) AS total
    FROM
        predict_data
)
SELECT
    (num_correct :: FLOAT / total :: FLOAT) AS accuracy
FROM
    aggr_data;
```

### 本物の紙幣と偽造紙幣の量を予測する
<a name="tutorial_xgboost_predict_amount"></a>

次の予測クエリは、テストセットに含まれる本物の紙幣と偽造紙幣の予測量を返します。

```
WITH predict_data AS (
    SELECT
        func_model_banknoteauthentication_xgboost_binary(variance, skewness, curtosis, entropy) AS predicted
    FROM
        banknoteauthentication_test
)
SELECT
    CASE
        WHEN predicted = '0' THEN 'Original banknote'
        WHEN predicted = '1' THEN 'Counterfeit banknote'
        ELSE 'NA'
    END AS banknote_authentication,
    COUNT(1) AS count
FROM
    predict_data
GROUP BY
    1;
```

### 本物の紙幣と偽造紙幣の平均観測値を求める
<a name="tutorial_xgboost_find_average_observation"></a>

次の予測クエリは、テストセットで本物および偽造であると予測される紙幣の各特長の平均値を返します。

```
WITH predict_data AS (
    SELECT
        func_model_banknoteauthentication_xgboost_binary(variance, skewness, curtosis, entropy) AS predicted,
          variance,
          skewness,
          curtosis,
          entropy
    FROM
        banknoteauthentication_test
)
SELECT
    CASE
        WHEN predicted = '0' THEN 'Original banknote'
        WHEN predicted = '1' THEN 'Counterfeit banknote'
        ELSE 'NA'
    END AS banknote_authentication,
    TRUNC(AVG(variance), 2) AS avg_variance,
    TRUNC(AVG(skewness), 2) AS avg_skewness,
    TRUNC(AVG(curtosis), 2) AS avg_curtosis,
    TRUNC(AVG(entropy), 2) AS avg_entropy
FROM
    predict_data
GROUP BY
    1
ORDER BY
    2;
```

## 関連トピック
<a name="tutorial_xgboost_related_topics"></a>

Amazon Redshift ML の詳細については、次のドキュメントを参照してください。
+ [ Amazon Redshift 機械学習を使用するためのコスト](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [CREATE MODEL オペレーション](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [ EXPLAIN\$1MODEL 関数](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

機械学習の詳細については、以下のドキュメントを参照してください。
+ [機械学習の概要](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [初心者やエキスパート向けの機械学習](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [機械学習予測の公平性とモデルの説明可能性とは](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)