

 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="r_create_model_use_cases"></a>

次のユースケースは、ニーズに合わせて CREATE MODEL を使用する方法を示しています。

## 単純な CREATE MODEL
<a name="r_simple_create_model"></a>

次に、CREATE MODEL 構文の基本的なオプションをまとめます。

### 単純な CREATE MODEL 構文
<a name="r_simple-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_query ) }
TARGET column_name
FUNCTION prediction_function_name
IAM_ROLE { default }
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  [ MAX_CELLS integer ]
)
```

### 単純な CREATE MODEL パラメータ
<a name="r_simple-create-model-parameters"></a>

 *model\_name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

FROM { *table\_name* \| ( *select\_query* ) }  
table\_name またはトレーニングデータを指定するクエリ。これらは、システム内の既存のテーブル、または丸括弧で囲まれた Amazon RedShift 互換の SELECT クエリ、つまり () のいずれかです。クエリ結果には少なくとも 2 つの列が必要です。

TARGET *column\_name*  
予測対象となる列の名前。列は、FROM 句内に存在する必要があります。

FUNCTION *prediction\_function\_name*   
CREATE MODEL によって生成され、このモデルを使用して予測を行うために使用される Amazon Redshift 機械学習関数の名前を指定する値。この関数は、モデルオブジェクトと同じスキーマで作成され、オーバーロードされる可能性があります。  
Amazon Redshift の機械学習では、回帰および分類用の Xtreme Gradient Boosted ツリー (XgBoost) モデルなどのモデルがサポートされています。

IAM\_ROLE { default \| 'arn:aws:iam::<account-id>:role/<role-name>' }  
 デフォルトキーワードを使用して、CREAT MODEL コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。または、IAM ロールの ARN を指定して、そのロールを使用することもできます。

 *S3\_BUCKET *'amzn-s3-demo-bucket'**  
前もって作成しておいた Amazon S3 バケットの名前。Amazon Redshift と SageMaker AI の間でトレーニングデータとアーティファクトを共有するために使用されます。Amazon Redshift は、トレーニングデータをアンロードする前に、このバケットにサブフォルダを作成します。トレーニングが完了すると、Amazon Redshift は作成したサブフォルダとその内容を削除します。

MAX\_CELLS 整数   
FROM 句からエクスポートするセルの最大数。デフォルトは 1,000,000 です。  
セル数は、トレーニングデータ (FROM 句のテーブルまたはクエリによって生成される) の行数と列数を掛けた積です。トレーニングデータのセル数が max\_cells パラメータで指定された数よりも多い場合、CREATE MODEL は FROM 句のトレーニングデータをダウンサンプリングして、トレーニングセットのサイズを MAX\_CELLS 未満に減らします。大規模なトレーニングデータセットを許可すると、精度が高くなる可能性がありますが、モデルのトレーニングに時間がかかり、コストも高くなる可能性があります。  
Amazon Redshift の使用コストについては、「[Amazon Redshift 機械学習を使用するためのコスト](cost.md)」を参照してください。  
さまざまなセル番号に関連するコストと無料トライアルの詳細については、[Amazon Redshift の料金](https://aws.amazon.com/redshift/pricing)を参照してください。

## ユーザーガイダンス付きの CREATE MODEL
<a name="r_user_guidance_create_model"></a>

以下に、[単純な CREATE MODEL](#r_simple_create_model) で説明されているオプションに加えて、CREATE MODEL オプションの説明を示します。

デフォルトでは、CREATE MODEL は特定のデータセットの前処理とモデルの最適な組み合わせを検索します。モデルに対して追加の制御が必要な場合や、追加のドメイン知識 (問題の種類や目的など) を導入する場合があります。顧客解約シナリオでは、「顧客がアクティブではない」という結果がまれである場合、精度目標よりも F1 目標が優先されることがよくあります。高精度モデルでは、常に「顧客がアクティブ」であると予測される可能性があるため、精度は高くなりますが、ビジネス価値はほとんどありません。F1 目標の詳細については、「*Amazon SageMaker AI API リファレンス*」の 「[AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)」を参照してください。

次に、CREATE MODELは、目標など、指定された側面に関する提案に従います。同時に、CREATE MODEL は最適なプリプロセッサと最適なハイパーパラメータを自動的に検出します。

### ユーザーガイダンス構文付きの CREATE MODEL
<a name="r_user_guidance-create-model-synposis"></a>

CREATE MODEL を使用すると、指定できる側面と Amazon Redshift が自動的に検出する側面について、より柔軟性が高まります。

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ]
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ]
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### ユーザーガイダンスパラメータ付きの CREATE MODEL
<a name="r_user_guidance-create-model-parameters"></a>

 *MODEL\_TYPE { XGBOOST \| MLP \| LINEAR\_LEARNER }*   
(オプション) モデルタイプを指定します。特定のモデルタイプのモデルをトレーニングする場合は、例えば、XGBoost、多層パーセプトロン (MLP)、線形学習などのタイプを指定できます。これらはすべて、Amazon SageMaker AI Autopilot でサポートされているアルゴリズムです。パラメータを指定しない場合、トレーニング中にサポートされているすべてのモデルタイプが最適なモデルを検索します。

 *PROBLEM\_TYPE ( REGRESSION \| BINARY\_CLASSIFICATION \| MULTICLASS\_CLASSIFICATION )*   
(オプション) 問題の種類を指定します。問題の種類がわかっている場合は、Amazon Redshift をその特定のモデルタイプの最適なモデルだけを検索するように制限できます。このパラメータを指定しない場合、トレーニング中にデータに基づく問題の種類が検出されます。

OBJECTIVE ( 'MSE' \| 'Accuracy' \| 'F1' \| 'F1Macro' \| 'AUC')  
(オプション) 機械学習システムの予測品質を測定するために使用する目標メトリクスの名前を指定します。このメトリクスは、トレーニング中に最適化され、データからモデルパラメータ値の最良の推定値を提供します。メトリクスを明示的に指定しない場合、デフォルトの動作では、MSE が回帰に、F1 がバイナリ分類に、精度がマルチクラス分類に自動的に使用されます。目標の詳細については、「*Amazon SageMaker AI API リファレンス*」の「[AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)」を参照してください。

MAX\_CELLS 整数   
(オプション) トレーニングデータのセル数を指定します。この値は、(トレーニングクエリまたはテーブル内の) レコード数と列数の積です。デフォルトは 1,000,000 です。

MAX\_RUNTIME 整数   
(オプション) トレーニングする最大時間を指定します。トレーニングジョブは、データセットのサイズに応じてより早く完了することがよくあります。これは、トレーニングにかかる最大時間を指定します。デフォルトは 5,400 (90 分) です。

S3\_GARBAGE\_COLLECT { ON \| OFF }  
(オプション) Amazon Redshift がモデルおよびモデルのトレーニングに使用される結果のデータセットに対してガベージコレクションを実行するかどうかを指定します。OFF に設定すると、モデルとモデルのトレーニングに使用される結果のデータセットは Amazon S3 に残り、他の目的に使用できます。ON に設定すると、Amazon Redshift はトレーニングの完了後に Amazon S3 内のアーティファクトを削除します。デフォルトはオンです。

KMS\_KEY\_ID 'kms\_key\_id'  
(オプション) AWS KMS キーを使用したサーバー側の暗号化を使用して、Amazon Redshift が保管中のデータを保護するかどうかを指定します。転送中のデータは Secure Sockets Layer (SSL) で保護されています。

 *PREPROCESSORS 'string' *   
(オプション) 特定の列セットに対するプリプロセッサの特定の組み合わせを指定します。形式は、columnSets のリストであり、各列のセットに適用される適切な変換です。Amazon Redshift は、特定のトランスフォーマのリスト内にあるすべてのトランスフォーマを対応する ColumnSet 内のすべての列に適用します。例えば、Imputer を使用した OneHotEncoder を列 t1 と t2 に適用するには、次のサンプルコマンドを使用します。  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
{"ColumnSet": [
    "t1",
    "t2"
  ],
  "Transformers": [
    "OneHotEncoder",
    "Imputer"
  ]
},
{"ColumnSet": [
    "t3"
  ],
  "Transformers": [
    "OneHotEncoder"
  ]
},
{"ColumnSet": [
    "temp"
  ],
  "Transformers": [
    "Imputer",
    "NumericPassthrough"
  ]
}
]'
SETTINGS (
S3_BUCKET 'amzn-s3-demo-bucket'
)
```

Amazon Redshift では、次のトランスフォーマをサポートしています。
+ OneHotEncoder – 通常、離散値をゼロ以外の値を持つバイナリベクトルにエンコードするために使用されます。このトランスフォーマは、多くの機械学習モデルに適しています。
+ OrdinalEncoder – 離散値を 1 つの整数にエンコードします。このトランスフォーマは、MLP や線形学習など特定の機械学習モデルに適しています。
+ NumericPassthrough – 入力をそのままモデルに渡します。
+ Imputer – 数値 (NaN) の値ではなく、欠損値を記入します。
+ ImputerWithIndicator – 欠損値と NaN 値を埋めます。このトランスフォーマは、値が欠落して入力されているかどうかを示すインジケータも作成します。
+ Normalizer – 値を正規化します。これにより、多くの機械学習アルゴリズムのパフォーマンスが向上します。
+ DateTimeVectorizer – 機械学習モデルで使用できる日時データ型の列を表すベクトル埋め込みを作成します。
+ PCA – できるだけ多くの情報を保持しながら、特徴の数を減らすためにデータを低い次元空間に投影します。
+ StandardScaler – 平均を除去し、単位分散にスケーリングして、特徴を標準化します。
+ MinMax – それぞれの特徴を指定された範囲にスケーリングすることで、特徴を変換します。

Amazon Redshift ML は、トレーニング済みのトランスフォーマを保存し、予測クエリの一部として自動的に適用します。モデルから予測を生成するときにそれらを指定する必要はありません。

## AUTO OFF 付きの CREATE XGBoost モデル
<a name="r_auto_off_create_model"></a>

AUTO OFF CREATE MODEL の目的は、通常、デフォルトの CREATE MODEL の目的とは異なります。

使用するモデル型と、これらのモデルをトレーニングする際に使用するハイパーパラメータを既に把握している上級ユーザーであれば、CREATE MODEL で AUTO OFF を指定することで、プリプロセッサとハイパーパラメータに関する CREATE MODEL による自動検出をオフにすることができます。そのためには、明示的にモデルタイプを指定します。XGBoost は現在、AUTO が OFF に設定されている場合にサポートされる唯一のモデルタイプです。ハイパーパラメータを指定できます。Amazon Redshift では、指定したハイパーパラメータにデフォルト値が使用されます。

### AUTO OFF 構文を使用する CREATE XGBoost モデル
<a name="r_auto_off-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | (select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE { 'reg:squarederror' | 'reg:squaredlogerror' | 'reg:logistic' |
            'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge' |
            'multi:softmax' | 'rank:pairwise' | 'rank:ndcg' }
HYPERPARAMETERS DEFAULT EXCEPT (
    NUM_ROUND '10',
    ETA '0.2',
    NUM_CLASS '10',
    (, ...)
)
PREPROCESSORS 'none'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### AUTO OFF パラメータ付き CREATE XGBoost モデル
<a name="r_auto_off-create-model-parameters"></a>

 *AUTO OFF*   
プリプロセッサ、アルゴリズム、およびハイパーパラメータの選択での、CREATE MODEL による自動検出をオフにします。

MODEL\_TYPE XGBOOST  
XGBOOST を使用してモデルをトレーニングするよう指定します。

OBJECTIVE str  
アルゴリズムによって認識される目標を指定します。Amazon Redshift は reg:squarederror、reg:squaredlogerror、reg:logistic、reg:pseudohubererror、reg:tweedie、binary:logistic、binary:hinge、multi:softmax をサポートしています。これらの目的の詳細については、XGBoost のドキュメントから[ラーニングタスクのパラメータ](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters)を参照してください。

HYPERPARAMETERS { DEFAULT \| DEFAULT EXCEPT ( key ‘value’ (,..) ) }  
デフォルトの XGBoost パラメータを使用するか、それをユーザー指定の値で上書きするかを指定します。値は一重引用符で囲む必要があります。以下に、XGBoost のパラメータとそのデフォルトの例を示します。      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_create_model_use_cases.html)

次の例では、XGBoost 用のデータを準備します。

```
DROP TABLE IF EXISTS abalone_xgb;

CREATE TABLE abalone_xgb (
length_val float,
diameter float,
height float,
whole_weight float,
shucked_weight float,
viscera_weight float,
shell_weight float,
rings int,
record_number int);

COPY abalone_xgb
FROM 's3://redshift-downloads/redshift-ml/abalone_xg/'
REGION 'us-east-1'
IAM_ROLE default
IGNOREHEADER 1 CSV;
```

次の例では、MODEL\_TYPE、OBJECTIVE、PREPROCESSORS など、指定された詳細オプションを使用して XGBoost モデルを作成します。

```
DROP MODEL abalone_xgboost_multi_predict_age;

CREATE MODEL abalone_xgboost_multi_predict_age
FROM ( SELECT length_val,
              diameter,
              height,
              whole_weight,
              shucked_weight,
              viscera_weight,
              shell_weight,
              rings
   FROM abalone_xgb WHERE record_number < 2500 )
TARGET rings FUNCTION ml_fn_abalone_xgboost_multi_predict_age
IAM_ROLE default
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE 'multi:softmax'
PREPROCESSORS 'none'
HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30')
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

次の例では、推論クエリを使用して、レコード番号が 2500 より大きい魚の年齢を予測します。上記のコマンドで作成した関数 ml\_fn\_abalone\_xgboost\_multi\_predict\_age を使用します。

```
select ml_fn_abalone_xgboost_multi_predict_age(length_val,
                                                   diameter,
                                                   height,
                                                   whole_weight,
                                                   shucked_weight,
                                                   viscera_weight,
                                                   shell_weight)+1.5 as age
from abalone_xgb where record_number > 2500;
```

## 独自のモデルを持参 (BYOM) - ローカル推論
<a name="r_byom_create_model"></a>

Amazon Redshift 機械学習では、ローカルの推論において独自のモデルを持参 (BYOM) できるようサポートしています。

次に、BYOM の CREATE MODEL 構文のオプションをまとめます。Amazon SageMaker AI を使用してAmazon Redshift の外部でトレーニングされたモデルを利用し、Amazon Redshift でローカルにデータベース内推論を行うことができます。

### ローカル推論のための CREATE MODEL 構文
<a name="r_local-create-model"></a>

以下では、ローカル推論のための CREATE MODEL 構文について説明します。

```
CREATE MODEL model_name
FROM ('job_name' | 's3_path' )
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
IAM_ROLE { default }
[ SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', | --required
  KMS_KEY_ID 'kms_string') --optional
];
```

Amazon Redshift は現在、BYOM 用に事前トレーニングされた XGBoost MLP および線形学習モデルのみをサポートしています。このパスを使用して、SageMaker AI Autopilot と、Amazon SageMaker AI で直接トレーニングされたモデルをローカル推論用にインポートできます。

#### ローカル推論のための CREATE MODEL パラメータ
<a name="r_local-create-model-parameters"></a>

 *model\_name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

FROM (*'job\_name'* \| *'s3\_path'* )  
*job\_name* では、入力として Amazon SageMaker AI のジョブ名を指定します。ジョブ名は、Amazon SageMaker AI トレーニングジョブ名または Amazon SageMaker AI Autopilot ジョブ名のいずれかです。ジョブは、Amazon Redshift クラスターを所有するのと同じ AWS アカウントで作成する必要があります。ジョブ名を調べるには、Amazon SageMaker AI を起動します。[**トレーニング**] ドロップダウンメニューで、[**トレーニングジョブ**] を選択します。  
*'s3\_path'* では、モデルの作成時に使用される .tar.gz モデルアーティファクトファイルを格納する S3 の場所を指定します。

FUNCTION *function\_name* ( *data\_type* [, ...] )  
作成する関数の名前と、入力引数のデータ型。スキーマ名を指定できます。

RETURNS *data\_type*  
関数によって返される値のデータ型。

IAM\_ROLE { default \| 'arn:aws:iam::<account-id>:role/<role-name>'}  
 デフォルトキーワードを使用して、CREATE MODEL コマンドの実行時にデフォルトとして設定され、同時にクラスターに関連付けられた IAM ロールを、Amazon Redshift が使用するようにします。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。

SETTINGS ( S3\_BUCKET *'amzn-s3-demo-bucket'*, \| KMS\_KEY\_ID *'kms\_string'*)  
S3\_BUCKET 句は、中間結果の保存に使用される Amazon S3 の場所を指定します。  
(オプション) KMS\_KEY\_ID 句は、Amazon Redshift が AWS KMS キーを使用したサーバー側の暗号化を使用して、保管中のデータを保護するかどうかを指定します。転送中のデータは Secure Sockets Layer (SSL) で保護されています。  
詳細については、「[ユーザーガイダンス付きの CREATE MODEL](#r_user_guidance_create_model)」を参照してください。

#### ローカル推論のための CREATE MODEL 例
<a name="r_local-create-model-example"></a>

次の例では、Amazon SageMaker AI で以前にトレーニングされたモデルを、Amazon Redshift の外部に作成します。モデル型は Amazon Redshift ML によってローカル推論用にサポートされているため、以下の CREATE MODEL では、Amazon Redshift でローカルで使用できる関数を作成します。SageMaker AI のトレーニングジョブ名を指定できます。

```
CREATE MODEL customer_churn
FROM 'training-job-customer-churn-v4'
FUNCTION customer_churn_predict (varchar, int, float, float)
RETURNS int
IAM_ROLE default
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

モデルが作成されたら、指定された引数タイプで関数 *customer\_churn\_predict* を使用して予測を行うことができます。

## 独自のモデルを持参 (BYOM) - リモート推論
<a name="r_byom_create_model_remote"></a>

また、Amazon Redshift 機械学習では、リモート推論においても独自のモデルを持参 (BYOM) できるようサポートしています。

次に、BYOM の CREATE MODEL 構文のオプションをまとめます。

### リモート推論のための CREATE MODEL 構文
<a name="r_remote-create-model"></a>

次に、リモート推論用の CREATE MODEL 構文について説明します。

```
CREATE MODEL model_name 
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
SAGEMAKER 'endpoint_name'[:'model_name']
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[SETTINGS (MAX_BATCH_ROWS integer)];
```

#### リモート推論の CREATE MODEL パラメータ
<a name="r_remote-create-model-parameters"></a>

 *model\_name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

FUNCTION *fn\_name* ( [*data\_type*] [, ...] )  
関数の名前と入力引数のデータ型。サポートされているすべてのデータ型については、「[データ型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)」を参照してください。`Geography`、`geometry`、`hllsketch` はサポートされていません。  
また、`myschema.myfunction` などの 2 つの部分からなる表記を使用して、スキーマ内に関数名を指定することもできます。

RETURNS *data\_type*  
関数によって返される値のデータ型。サポートされているすべてのデータ型については、「[データ型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)」を参照してください。`Geography`、`geometry`、`hllsketch` はサポートされていません。

SAGEMAKER *'endpoint\_name'*[:*'model\_name'*]   
Amazon SageMaker AI エンドポイントの名前。エンドポイント名がマルチモデルのエンドポイントを指している場合は、使用するモデルの名前を追加します。エンドポイントは、Amazon Redshift クラスターと同じ AWS リージョンおよび AWS アカウントでホストされている必要があります。エンドポイントを調べるには、Amazon SageMaker AI を起動します。[**推論**] ドロップダウンメニューで、[**エンドポイント**] を選択します。

IAM\_ROLE { default \| 'arn:aws:iam::<account-id>:role/<role-name>'}  
 デフォルトキーワードを使用して、CREATE MODEL コマンドの実行時にデフォルトとして設定され、同時にクラスターに関連付けられた IAM ロールを、Amazon Redshift が使用するようにします。または、IAM ロールの ARN を指定して、そのロールを使用することもできます。

MAX\_BATCH\_ROWS *整数*  
Amazon Redshift が 1 回の SageMaker AI 呼び出しに対して 1 回のバッチリクエストで送信する最大行数。リモート推論を使用する BYOM でのみサポートされます。バッチ内の実際の行数は入力サイズにも依存しますが、この値以下です。このパラメータの最小値は 1 です。最大値は `INT_MAX` または 2,147,483,647 です。このパラメータは、入力データ型と返されたデータ型の両方が `SUPER` である場合にのみ必要です。デフォルト値は `INT_MAX` または 2,147,483,647 です。

モデルが SageMaker AI エンドポイントにデプロイされると、SageMaker AI が Amazon Redshift でモデルの情報を作成します。その後、外部関数を介して推論を実行します。SHOW MODEL コマンドを使用して、Amazon Redshift クラスターのモデル情報を表示できます。

#### リモート推論の使用上の注意のための CREATE MODEL
<a name="r_remote-create-model-usage-notes"></a>

リモート推論に CREATE MODEL を使用する前に、次の点を考慮してください。
+ エンドポイントは、Amazon Redshift クラスターを所有するのと同じ AWS アカウントでホストされている必要があります。
+ Amazon SageMaker AI エンドポイントに Amazon Redshift からの推論呼び出しに対応するのに十分なリソースがあること、または Amazon SageMaker AI エンドポイントを自動的にスケーリングできることを確認してください。
+ `SUPER` データ型を入力として使用していない場合、モデルは SageMaker AI の `text/CSV` のコンテンツタイプに対応するカンマ区切り値 (CSV) 形式の入力のみを受け入れます。
+ `SUPER` データ型を入力として使用していない場合、モデルの出力は、関数の作成時に指定された型の単一の値です。この出力は、SageMaker AI の `text/CSV` のコンテンツタイプを通じてカンマ区切り値 (CSV) の形式で提供されます。`VARCHAR` データ型は引用符で囲むことができず、改行を含めることもできません。また、各出力は新しい行に配置する必要があります。
+ モデルは空の文字列として null を受け入れます。
+ 入力データ型が `SUPER` の場合、サポートされる入力引数は 1 つだけです。
+ 入力データ型が `SUPER` の場合、返されるデータ型も `SUPER` である必要があります。
+ MAX\_BATCH\_ROWS は、入力データ型と返されたデータ型の両方が SUPER の場合に必要です。
+ 入力データ型が `SUPER` のとき、エンドポイント呼び出しのコンテンツ型は、MAX\_BATCH\_ROWS が `1` の場合は `application/json`、それ以外の場合は `application/jsonlines` です。
+ 返されるデータ型が `SUPER` のとき、エンドポイント呼び出しの受け入れ型は、MAX\_BATCH\_ROWS が `1` の場合は `application/json`、それ以外の場合は `application/jsonlines` です。

##### リモート推論のための CREATE MODEL 例
<a name="r_remote-create-model-example"></a>

次の例では、SageMaker AI エンドポイントを使用して予測を行うモデルを作成します。エンドポイントが実行されていることを確認して予測を行い、CREATE MODEL コマンドでその名前を指定します。

```
CREATE MODEL remote_customer_churn
FUNCTION remote_fn_customer_churn_predict (varchar, int, float, float)
RETURNS int
SAGEMAKER 'customer-churn-endpoint'
IAM_ROLE default;
```

 次の例では、大規模言語モデル (LLM) を使用してリモート推論で BYOM を作成します。Amazon SageMaker AI Jumpstart でホストされている LLM は、`application/json` コンテンツタイプを受け入れて返し、呼び出しごとに単一の JSON をサポートします。入力データ型と返されるデータ型は `SUPER` で、MAX\_BATCH\_ROWS は 1 に設定する必要があります。

```
CREATE MODEL sample_super_data_model
FUNCTION sample_super_data_model_predict(super)
RETURNS super
SAGEMAKER 'sample_super_data_model_endpoint'
IAM_ROLE default
SETTINGS (MAX_BATCH_ROWS 1);
```

## K-MEANS を使用した CREATE MODEL
<a name="r_k-means_create_model"></a>

Amazon Redshift は、ラベル付けされていないデータをグループ化する K-Means アルゴリズムをサポートしています。このアルゴリズムは、データ内でグループを検出する際にクラスタリングで発生する問題を解決します。未分類のデータについては、その類似点と相違点に基づいたグループ分けと分割が行われます。

### K-MEANS 構文による CREATE MODEL
<a name="r_k-means-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
FUNCTION function_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS 'string'
HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional
  MAX_CELLS integer, |
    -- optional
  MAX_RUNTIME integer
    -- optional);
```

### K-MEANS パラメータによる CREATE MODEL
<a name="r_k-means-create-model-parameters"></a>

 *AUTO OFF*   
プリプロセッサ、アルゴリズム、およびハイパーパラメータの選択での、CREATE MODEL による自動検出をオフにします。

MODEL\_TYPE KMEANS  
KMEANS を使用してモデルをトレーニングするよう指定します。

PREPROCESSORS 'string'  
特定の列セットに対するプリプロセッサの特定の組み合わせを指定します。形式は、columnSets のリストであり、各列のセットに適用される適切な変換です。Amazon Redshift は、StandardScaler、MinMax、NumericPassthrough という、3 つの K-Means プリプロセッサをサポートしています。K-Means の前処理を適用しない場合は、トランスフォーマーとして明示的に NumericPassthrough を選択します。サポートされる変換の詳細については、「[ユーザーガイダンスパラメータ付きの CREATE MODEL](#r_user_guidance-create-model-parameters)」を参照してください。  
K-Means アルゴリズムは、ユークリッド距離を使用して類似度を計算します。データの前処理により、モデルの特徴が同じスケールに維持され、信頼性の高い結果が保証されます。

HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )  
K-Means パラメータを使用するかどうかを指定します。K-Means アルゴリズムを使用する際には、`K`パラメータを指定する必要があります。詳細については、「*Amazon SageMaker AI デベロッパーガイド*」の「[K-Means Hyperparameters](https://docs.aws.amazon.com/sagemaker/latest/dg/k-means-api-config.html)」を参照してください。

次に、K-Means 用のデータを準備する際の例を示します。

```
CREATE MODEL customers_clusters
FROM customers
FUNCTION customers_cluster
IAM_ROLE default
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS '[
{
  "ColumnSet": [ "*" ],
  "Transformers": [ "NumericPassthrough" ]
}
]'
HYPERPARAMETERS DEFAULT EXCEPT ( K '5' )
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');

select customer_id, customers_cluster(...) from customers;
customer_id | customers_cluster
--------------------
12345            1
12346            2
12347            4
12348
```

## 予測による CREATE MODEL
<a name="r_forecast_model"></a>

Redshift ML の予測モデルは Amazon Forecast を使用して正確な時系列予測を作成します。そうすることで、ある期間の履歴データを使用して将来のイベントを予測することができます。Amazon Forecast の一般的な使用例としては、小売製品データを使用して在庫の価格を決定する、製造数量データを使用して注文する商品の量を予測する、ウェブトラフィックデータを使用してウェブサーバーが受け取る可能性のあるトラフィック量を予測する、などが含まれます。

 Amazon Redshift 予測モデルには、[Amazon Forecast のクォータ制限](https://docs.aws.amazon.com/forecast/latest/dg/limits.html)が適用されます。例えば、予測の最大数は 100 ですが、調整可能です。予測モデルを削除しても、Amazon Forecast 内の関連リソースは自動的に削除されません。Redshift クラスターを削除すると、関連するモデルもすべて削除されます。

予測モデルは現在、以下のリージョンでのみ利用可能であることに注意してください。
+ 米国東部 (オハイオ) (us-east-2)
+ 米国東部 (バージニア北部) (us-east-1)
+ 米国西部 (オレゴン) (us-west-2)
+ アジアパシフィック (ムンバイ) (ap-south-1)
+ アジアパシフィック (ソウル) (ap-northeast-2)
+ アジアパシフィック (シンガポール) (ap-southeast-1)
+ アジアパシフィック (シドニー) (ap-southeast-2)
+ アジアパシフィック (東京) (ap-northeast-1)
+ ヨーロッパ (フランクフルト) (eu-central-1)
+ 欧州 (アイルランド) (eu-west-1)

### 予測構文による CREATE MODEL
<a name="r_forecast_model-synopsis"></a>

```
CREATE [ OR REPLACE ] MODEL forecast_model_name 
FROM { table_name | ( select_query ) } 
TARGET column_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'} 
AUTO ON
MODEL_TYPE FORECAST
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  HORIZON integer,
  FREQUENCY forecast_frequency
  [PERCENTILES '0.1', '0.5', '0.9']
  )
```

### 予測パラメータによる CREATE MODEL
<a name="r_forecast_model-parameters"></a>

 *forecast\_model\_name*   
モデルの名前です。モデル名は一意である必要があります。

FROM { table\_name \| ( select\_query ) }  
table\_name またはトレーニングデータを指定するクエリ。これは、システム内の既存のテーブル、または丸かっこで囲まれた Amazon RedShift 互換の SELECT クエリのいずれかです。テーブルまたはクエリ結果には、少なくとも次の 3 つの列が必要です。(1) 時系列の名前を指定する varchar 列。各データセットには、複数の時系列を含めることができます。(2) datetime 列、(3) 予測する対象列。このターゲット列は int または float である必要があります。3 つ以上の列を含むデータセットを指定した場合、Amazon Redshift では、追加の列はすべて関連する時系列の一部であると見なします。関連する時系列は int 型または float 型である必要があることに注意してください。関連する時系列の詳細については、「[関連する時系列データセットの使用](https://docs.aws.amazon.com/forecast/latest/dg/related-time-series-datasets.html)」を参照してください。

TARGET column\_name  
予測対象となる列の名前。列は、FROM 句内に存在する必要があります。

IAM\_ROLE { default \| 'arn:aws:iam::<account-id>:role/<role-name>' }  
デフォルトキーワードを使用して、CREAT MODEL コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。または、IAM ロールの ARN を指定して、そのロールを使用することもできます。

AUTO ON  
アルゴリズムおよびハイパーパラメータの選択での、CREATE MODEL による自動検出をオンにします。予測モデルを作成するときに on を指定すると、Forecast AutoPredictor を使用することを示します。ここで、Amazon Forecast は、データセット内の各時系列に最適なアルゴリズムの組み合わせを適用します。

MODEL\_TYPE FORECAST  
FORECAST を使用してモデルをトレーニングするよう指定します。

S3\_BUCKET 'amzn-s3-demo-bucket'  
以前に作成した Amazon Simple Storage Service バケットの名前で、これは Amazon Redshift と Amazon Forecast の間でトレーニングデータとアーティファクトを共有するために使用されます。Amazon Redshift は、トレーニングデータをアンロードする前に、このバケットにサブフォルダを作成します。トレーニングが完了すると、Amazon Redshift は作成したサブフォルダとその内容を削除します。

HORIZON 整数  
予測モデルが返すことができる予測の最大数。モデルのトレーニングが完了すると、この整数は変更できません。

FREQUENCY forecast\_frequency  
予測の詳細度を指定します。使用できるオプションは、`Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min` です。予測モデルをトレーニングする場合は必須です。

PERCENTILES 文字列  
予測子のトレーニングに使用される予測タイプを指定するカンマ区切り文字列。予測タイプは、0.01 以上の増分で 0.01 から 0.99 までの分位数にすることができます。mean で平均予測を指定することもできます。最大 5 つの予測タイプを指定できます。

次の例は、簡単な予測モデルを作成する方法を示しています。

```
CREATE MODEL forecast_example
FROM forecast_electricity_
TARGET target 
IAM_ROLE 'arn:aws:iam::<account-id>:role/<role-name>'
AUTO ON 
MODEL_TYPE FORECAST
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket',
          HORIZON 24,
          FREQUENCY 'H',
          PERCENTILES '0.25,0.50,0.75,mean',
          S3_GARBAGE_COLLECT OFF);
```

予測モデルを作成したら、予測データを含む新しいテーブルを作成できます。

```
CREATE TABLE forecast_model_results as SELECT Forecast(forecast_example)
```

その後、新しいテーブルをクエリして予測を取得できます。

```
SELECT * FROM forecast_model_results
```