

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

# チュートリアル: 線形学習によるリグレッションモデルの構築
<a name="tutorial_linear_learner_regression"></a>

このチュートリアルでは、Amazon S3 のデータを使用して線形学習モデルを作成し、Amazon Redshift ML を使用してそのモデルで予測クエリを実行します。SageMaker AI 線形学習アルゴリズムは、回帰問題または多クラス分類問題を解決します。回帰問題と多クラス分類問題の詳細については、「Amazon SageMaker AI デベロッパーガイド」の「[機械学習パラダイムの問題タイプ](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html#basic-machine-learning-paradigms)」を参照してください。このチュートリアルでは、リグレッション問題を解決します。線形学習アルゴリズムは、多数のモデルを並列でトレーニングし、最も最適化されたモデルを自動的に決定します。Amazon Redshift で CREATE MODEL オペレーションを使用すると、SageMaker AI で線形学習モデルが作成され、予測関数が Amazon Redshift に送信されます。線形学習アルゴリズムの詳細については、「Amazon SageMaker AI デベロッパーガイド」の「[線形学習アルゴリズム](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html)」を参照してください。

CREATE MODEL コマンドを使用して、トレーニングデータのエクスポート、モデルのトレーニング、モデルのインポート、Amazon Redshift 予測関数の準備を行うことができます。トレーニングデータをテーブルまたは SELECT ステートメントとして指定するには、CREATE MODEL オペレーションを使用します。

線形学習モデルは、連続的な目標または離散的な目標のいずれかを最適化します。連続的な目標はリグレッションに使用され、離散変数は分類に使用されます。リグレッション法など、一部の方法は、連続的な目標のみに対する解を提供します。線形学習アルゴリズムは、Naive Bayes 手法などの単純なハイパーパラメータ最適化手法より高速です。単純な最適化手法では、各入力変数は独立していると仮定します。線形学習アルゴリズムを使用するには、入力の次元を表す列を指定し、観測値を表す行を指定する必要があります。線形学習アルゴリズムの詳細については、「Amazon SageMaker AI デベロッパーガイド」の「[線形学習アルゴリズム](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html)」を参照してください。

このチュートリアルでは、アワビの年齢を予測する線形学習モデルを作成します。[アワビのデータセット](http://archive.ics.uci.edu/ml/datasets/Abalone)に対してCREATE MODEL コマンドを使用し、アワビの物理的測定値の関係を決定します。次に、モデルを使用してアワビの年齢を判断します。

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

家の価格を予測するなど、線形学習と Amazon Redshift ML を使用して他のリグレッション問題を解決することもできます。また、Redshift ML を使用して、都市の自転車レンタルサービスを利用する人数を予測することもできます。

**タスク**
+ 前提条件
+ ステップ 1: Amazon S3 から Amazon Redshift にデータをロードする
+ ステップ 2: 機械学習モデルを作成する
+ ステップ 3: モデルを検証する

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

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

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

[Amazon Redshift クエリエディタv2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) を使用する次のクエリを実行します。これらのクエリは、Redshift にサンプルデータをロードし、データをトレーニングセットと検証セットに分割します。

1. 次のクエリは、`abalone_dataset` テーブルを作成します。

   ```
   CREATE TABLE abalone_dataset (
       id INT IDENTITY(1, 1),
       Sex CHAR(1),
       Length float,
       Diameter float,
       Height float,
       Whole float,
       Shucked float,
       Viscera float,
       Shell float,
       Rings integer
   );
   ```

1. 次のクエリは、サンプルデータを Amazon S3 の [アワビのデータセット](http://archive.ics.uci.edu/ml/datasets/Abalone)から Amazon Redshift で以前に作成した `abalone_dataset` テーブルにコピーします。

   ```
   COPY abalone_dataset
   FROM
       's3://redshift-ml-multiclass/abalone.csv' REGION 'us-east-1' IAM_ROLE default CSV IGNOREHEADER 1 NULL AS 'NULL';
   ```

1. データを手動で分割することにより、追加の予測セットを割り当てることでモデルの精度を検証できます。次のクエリは、データを 2 つのセットに分割します。`abalone_training` テーブルはトレーニング用で、`abalone_validation` テーブルは検証用です。

   ```
   CREATE TABLE abalone_training as 
   SELECT 
       *
   FROM
       abalone_dataset
   WHERE
       mod(id, 10) < 8;
   
   CREATE TABLE abalone_validation as 
   SELECT 
       *
   FROM
       abalone_dataset
   WHERE
       mod(id, 10) >= 8;
   ```

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

このステップでは、CREATE MODEL ステートメントを使用して、線形学習アルゴリズムでの機械学習モデルを作成します。

次のクエリは、S3 バケットを使用して CREATE MODEL オペレーションで線形学習モデルを作成します。amzn-s3-demo-bucket をユーザーの S3 バケットに置き換えます。

```
CREATE MODEL model_abalone_ring_prediction
FROM
    (
        SELECT
            Sex,
            Length,
            Diameter,
            Height,
            Whole,
            Shucked,
            Viscera,
            Shell,
            Rings AS target_label
        FROM
            abalone_training
    ) TARGET target_label FUNCTION f_abalone_ring_prediction IAM_ROLE default MODEL_TYPE LINEAR_LEARNER PROBLEM_TYPE REGRESSION OBJECTIVE 'MSE' SETTINGS (
        S3_BUCKET 'amzn-s3-demo-bucket',
        MAX_RUNTIME 15000
    );
```

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

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

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

```
SHOW MODEL model_abalone_ring_prediction;
```

モデルの準備が整うと、先ほどのオペレーションの出力は、次の例のようになります。出力には、平均二乗誤差である `validation:mse` メトリクスを使用します。平均二乗誤差を使用して、次のステップでモデルの精度を検証します。

```
+--------------------------+----------------------------------------------------------------------------------------------------+
|        Model Name        |                                   model_abalone_ring_prediction                                    |
+--------------------------+----------------------------------------------------------------------------------------------------+
| Schema Name              | public                                                                                             |
| Owner                    | awsuser                                                                                            |
| Creation Time            | Thu, 30.06.2022 18:00:10                                                                           |
| Model State              | READY                                                                                              |
| validation:mse           |                                                                                           4.168633 |
| Estimated Cost           |                                                                                           4.291608 |
|                          |                                                                                                    |
| TRAINING DATA:           |                                                                                                    |
| Query                    | SELECT SEX , LENGTH , DIAMETER , HEIGHT , WHOLE , SHUCKED , VISCERA , SHELL, RINGS AS TARGET_LABEL |
|                          | FROM ABALONE_TRAINING                                                                              |
| Target Column            | TARGET_LABEL                                                                                       |
|                          |                                                                                                    |
| PARAMETERS:              |                                                                                                    |
| Model Type               | linear_learner                                                                                     |
| Problem Type             | Regression                                                                                         |
| Objective                | MSE                                                                                                |
| AutoML Job Name          | redshiftml-20220630180010947843                                                                    |
| Function Name            | f_abalone_ring_prediction                                                                          |
| Function Parameters      | sex length diameter height whole shucked viscera shell                                             |
| Function Parameter Types | bpchar float8 float8 float8 float8 float8 float8 float8                                            |
| IAM Role                 | default-aws-iam-role                                                                               |
| S3 Bucket                | amzn-s3-demo-bucket                                                                                |
| Max Runtime              |                                                                                              15000 |
+--------------------------+----------------------------------------------------------------------------------------------------+
```

## ステップ 3: モデルを検証する
<a name="tutorial_linear_learner_regression_step_validate"></a>

1. 次の予測クエリは、平均二乗誤差と二乗平均平方根誤差を計算して `abalone_validation` データセットでモデルの精度を検証します。

   ```
   SELECT
       ROUND(AVG(POWER((tgt_label - predicted), 2)), 2) mse,
       ROUND(SQRT(AVG(POWER((tgt_label - predicted), 2))), 2) rmse
   FROM
       (
           SELECT
               Sex,
               Length,
               Diameter,
               Height,
               Whole,
               Shucked,
               Viscera,
               Shell,
               Rings AS tgt_label,
               f_abalone_ring_prediction(
                   Sex,
                   Length,
                   Diameter,
                   Height,
                   Whole,
                   Shucked,
                   Viscera,
                   Shell
               ) AS predicted,
               CASE
                   WHEN tgt_label = predicted then 1
                   ELSE 0
               END AS match,
               CASE
                   WHEN tgt_label <> predicted then 1
                   ELSE 0
               END AS nonmatch
           FROM
               abalone_validation
       ) t1;
   ```

   前のクエリの出力は次の例のようになります。平均二乗誤差メトリクスの値は、SHOW MODEL オペレーションの出力によって示される `validation:mse` メトリクスに似ています。

   ```
   +-----+--------------------+
   | mse |        rmse        |
   +-----+--------------------+
   | 5.1 | 2.2600000000000002 |
   +-----+--------------------+
   ```

1. 次のクエリを使用して、予測関数で EXPLAIN\$1MODEL オペレーションを実行します。このオペレーションにより、モデルの説明可能性レポートが返されます。EXPLAIN\$1MODEL オペレーションの詳細については「Amazon Redshift データベースデベロッパーガイド」の「[EXPLAIN\$1MODEL関数](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)」を参照してください。

   ```
   SELECT
       EXPLAIN_MODEL ('model_abalone_ring_prediction');
   ```

   次の情報は、前の EXPLAIN\$1MODEL オペレーションによって生成されたモデルの説明可能性レポートの例です。各入力の値は Shapley 値です。Shapley 値は、各入力がモデルの予測に与える影響を表し、値の高い入力ほど予測に大きな影響を与えます。この例では、値の高い入力は、アワビの年齢の予測により大きな影響を与えます。

   ```
   { 
       "explanations": { 
           "kernel_shap": { 
               "label0": { 
                   "expected_value" :10.290688514709473,
                   "global_shap_values": { 
                       "diameter" :0.6856910187882492,
                       "height" :0.4415323937124035,
                       "length" :0.21507476107609084,
                       "sex" :0.448611774505744,
                       "shell" :1.70426496893776,
                       "shucked" :2.1181392924386994,
                       "viscera" :0.342220754059912,
                       "whole" :0.6711906974084011 
                   } 
               } 
           } 
       },
       "version" :"1.0" 
   };
   ```

1. 次のクエリを使用して、まだ成熟していないアワビについて、モデルが行う正しい予測のパーセンテージを計算します。未熟なアワビは輪が 10 個以下で、正確な予測では、実際の輪の数が 1 輪以内で高精度となります。

   ```
   SELECT
       TRUNC(
           SUM(
               CASE
                   WHEN ROUND(
                       f_abalone_ring_prediction(
                           Sex,
                           Length,
                           Diameter,
                           Height,
                           Whole,
                           Shucked,
                           Viscera,
                           Shell
                       ),
                       0
                   ) BETWEEN Rings - 1
                   AND Rings + 1 THEN 1
                   ELSE 0
               END
           ) / CAST(COUNT(SHELL) AS FLOAT),
           4
       ) AS prediction_pct
   FROM
       abalone_validation
   WHERE
       Rings <= 10;
   ```

## 関連トピック
<a name="tutorial_linear_learner_regression_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)