モデル
Query Serviceは、モデルの構築とデプロイのコアプロセスをサポートするようになりました。 SQLを使用して、データを使用してモデルを訓練し、その正確性を評価し、訓練されたモデルを使用して新しいデータを予測できます。 その後、このモデルを使用して過去のデータから一般化し、実際のシナリオについて情報に基づいた意思決定を行うことができます。
実用的なインサイトを生成するためのモデルライフサイクルには、次の3つのステップがあります。
- トレーニング: モデルは、指定されたデータセットからパターンを学習します。 (モデルの作成または置換)
- テスト/評価: モデルのパフォーマンスは、別のデータセットを使用して評価されます。 (
model_evaluate) - 予測:学習済みモデルを使用して、新しい見えないデータを予測します。
既存のSQL文法に追加されたモデル SQL拡張機能を使用して、ビジネスニーズに応じてモデルライフサイクルを管理します。 このドキュメントでは、モデルの作成や置換、トレーニング、評価、必要に応じたトレーニング、インサイトの予測などに必要なSQLについて説明します。
モデルの作成とトレーニング create-and-train
SQL コマンドを使用して、機械学習モデルを定義、設定、トレーニングする方法を説明します。 以下のSQLは、モデルを作成し、フィーチャーエンジニアリング変換を適用し、モデルが将来の使用のために正しく設定されていることを確認するためにトレーニングプロセスを開始する方法を示しています。 次のSQL コマンドでは、モデルの作成と管理に関する様々なオプションについて詳しく説明しています。
- CREATE MODEL:指定したデータセットで新しいモデルを作成してトレーニングします。 同じ名前のモデルが既に存在する場合、このコマンドはエラーを返します。
- CREATE MODEL IF NOT EXISTS:指定したデータセットに同じ名前のモデルがまだ存在しない場合にのみ、新しいモデルを作成してトレーニングします。
- CREATE OR REPLACE MODEL: モデルを作成およびトレーニングし、既存のモデルの最新バージョンを、指定されたデータセットの同じ名前に置き換えます。
CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_alias
[TRANSFORM (select_list)]
[OPTIONS(model_option_list)]
[AS {select_query}]
model_option_list:
MODEL_TYPE = { 'LINEAR_REG' |
'LOGISTIC_REG' |
'KMEANS' }
[, MAX_ITER = int64_value ]
[, LABEL = string_array ]
[, REG_PARAM = float64_value ]
例
CREATE MODEL churn_model
TRANSFORM (vector_assembler(array(current_customers, previous_customers)) features)
OPTIONS(MODEL_TYPE='linear_reg', LABEL='churn_rate')
AS
SELECT *
FROM churn_with_rate
ORDER BY period;
モデルの作成とトレーニングのプロセスにおける主要なコンポーネントと設定について理解するために、上記のSQLの例の各要素の目的と機能を次のメモで説明します。
-
<model_alias>: モデル エイリアスは、モデルに割り当てられた再利用可能な名前で、後で参照できます。 モデルに名前を付ける必要があります。 -
transform: transform句は、モデルをトレーニングする前に、データセットに機能エンジニアリングの変換(1 ホットエンコーディングや文字列インデックス作成など)を適用するために使用されます。TRANSFORMステートメントの最後の句は、モデル トレーニングの機能を構成する列のリストを含むvector_assemblerか、vector_assemblerの派生タイプ (max_abs_scaler(feature)、standard_scaler(feature)など)である必要があります。 最後の句で言及された列のみがトレーニングに使用されます。その他の列は、SELECTクエリに含まれていても、すべて除外されます。 -
label = <label-COLUMN>: モデルが予測するターゲットまたは結果を指定する、トレーニングデータセット内のラベル列。 -
training-dataset:この構文は、モデルのトレーニングに使用するデータを選択します。 -
type = 'LogisticRegression':この構文は、使用するマシンラーニングアルゴリズムのタイプを指定します。 オプションには、LinearRegression、LogisticRegressionおよびKMeansが含まれます。 -
options:このキーワードは、モデルを設定するための柔軟なキーと値のペアのセットを提供します。Key model_type:model_type = '<supported algorithm>':使用するマシンラーニングアルゴリズムのタイプを指定します。 サポートされているオプションには、LinearRegression、LogisticRegressionおよびKMeansが含まれます。Key label:label = <label_COLUMN>: トレーニングデータセットのラベル列を定義します。これは、モデルが予測しようとしているターゲットまたは結果を示します。
SQLを使用して、トレーニングに使用するデータセットを参照します。
CREATE MODELとCREATE TABLEの両方でサポートされている関数と使用状況を含むTRANSFORM句の完全なリファレンスについては、SQL構文ドキュメント 🔗のTRANSFORM句を参照してください。モデルの更新 update
新しいフィーチャ エンジニアリング変換を適用し、アルゴリズム タイプやラベル列などのオプションを設定することで、既存の機械学習モデルを更新する方法について説明します。 更新ごとに、モデルの新しいバージョンが作成され、最後のバージョンから増分されます。 これにより、変更が追跡され、モデルを今後の評価または予測ステップで再利用できます。
次の例は、新しい変換とオプションを使用してモデルを更新する方法を示しています。
UPDATE MODEL <model_alias> TRANSFORM (vector_assembler(array(current_customers, previous_customers)) features) OPTIONS(MODEL_TYPE='logistic_reg', LABEL='churn_rate') AS SELECT * FROM churn_with_rate ORDER BY period;
例
バージョン管理プロセスについて理解するには、次のコマンドを検討します。
UPDATE MODEL model_vdqbrja OPTIONS(MODEL_TYPE='logistic_reg', LABEL='Survived') AS SELECT * FROM titanic_e2e_dnd;
このコマンドを実行すると、次の表に示すように、モデルに新しいバージョンが追加されます。
以下のメモでは、モデル更新ワークフローの主要なコンポーネントとオプションについて説明します。
UPDATE model <model_alias>: update コマンドはバージョン管理を処理し、最後のバージョンから増分された新しいモデル バージョンを作成します。version:新しいバージョンを作成する必要があることを明示的に指定するために、更新時にのみ使用されるオプションのキーワード。 省略すると、システムはバージョンを自動的に増分します。
変換されたフィーチャのプレビューと保持 preview-transform-output
CREATE TABLEおよびCREATE TEMP TABLE ステートメント内のTRANSFORM句を使用して、モデルのトレーニングの前に機能変換の出力をプレビューし、保持します。 この機能強化により、変形関数(エンコーディング、トークン化、ベクトルアセンブラなど)がデータセットにどのように適用されるかを可視化できます。
変換されたデータをスタンドアロン テーブルにマテリアライズすることで、モデルを作成する前に、中間のフィーチャを検査し、処理ロジックを検証し、フィーチャ品質を確保することができます。 これにより、マシンラーニングのパイプライン全体の透明性が向上し、モデル開発中により多くの情報にもとづいた意思決定を促進できます。
構文 syntax
次に示すように、CREATE TABLEまたはCREATE TEMP TABLE ステートメント内のTRANSFORM句を使用します。
CREATE TABLE [IF NOT EXISTS] table_name
[WITH (tableProperties)]
TRANSFORM (transformFunctionExpression1, transformFunctionExpression2, ...)
AS SELECT * FROM source_table;
または
CREATE TEMP TABLE [IF NOT EXISTS] table_name
[WITH (tableProperties)]
TRANSFORM (transformFunctionExpression1, transformFunctionExpression2, ...)
AS SELECT * FROM source_table;
例
基本的な変換を使用してテーブルを作成します。
CREATE TABLE ctas_transform_table
TRANSFORM(
String_Indexer(additional_comments) si_add_comments,
one_hot_encoder(si_add_comments) as ohe_add_comments,
tokenizer(comments) as token_comments
)
AS SELECT * FROM movie_review;
追加の機能エンジニアリング手順を使用して一時テーブルを作成します。
CREATE TEMP TABLE ctas_transform_table
TRANSFORM(
String_Indexer(additional_comments) si_add_comments,
one_hot_encoder(si_add_comments) as ohe_add_comments,
tokenizer(comments) as token_comments,
stop_words_remover(token_comments, array('and','very','much')) stp_token,
ngram(stp_token, 3) ngram_token,
tf_idf(ngram_token, 20) ngram_idf,
count_vectorizer(stp_token, 13) cnt_vec_comments,
tf_idf(token_comments, 10, 1) as cmts_idf
)
AS SELECT * FROM movie_review;
次に、出力をクエリします。
SELECT * FROM ctas_transform_table LIMIT 1;
重要な検討事項 considerations
この機能は透明性を高め、機能の検証をサポートしますが、モデル作成以外でTRANSFORM句を使用する場合は、考慮すべき重要な制限があります。
- ベクトル出力:変換によってベクタータイプの出力が生成された場合、それらは自動的に配列に変換されます。
- バッチ再利用の制限:
TRANSFORMで作成されたテーブルは、テーブル作成時にのみ変換を適用できます。INSERT INTOで挿入された新しいデータのバッチは自動的に変換されません。 同じ変換ロジックを新しいデータに適用するには、新しいCREATE TABLE AS SELECT(CTAS)ステートメントを使用してテーブルを再作成する必要があります。 - モデルの再利用の制限:
TRANSFORMを使用して作成されたテーブルは、CREATE MODEL件のステートメントで直接使用できません。 モデルの作成中にTRANSFORMロジックを再定義する必要があります。 ベクタータイプの出力を生成する変換は、モデルのトレーニング中はサポートされません。 詳細については、機能変換出力データ型を参照してください。
モデルの評価 evaluate-model
信頼性の高い結果を得るには、model_evaluate キーワードを使用して予測にデプロイする前に、モデルの正確性と有効性を評価します。 以下のSQL ステートメントは、テストデータセット、特定の列、およびモデルのバージョンを指定し、パフォーマンスを評価してモデルをテストします。
SELECT *
FROM model_evaluate(model-alias, version-number,SELECT col1,
col2,
label-COLUMN
FROM test_dataset)
model_evaluate関数は、model-aliasを最初の引数として、柔軟なSELECT ステートメントを2番目の引数として受け取ります。 クエリサービスはまずSELECT ステートメントを実行し、その結果をmodel_evaluate Adobe定義関数(ADF)にマッピングします。 システムは、SELECT ステートメントの結果の列名とデータタイプが、トレーニングステップで使用されるものと一致することを期待します。 これらの列名とデータタイプは、評価のテストデータおよびラベルデータとして扱われます。
model_evaluate)および予測(model_predict)の場合、トレーニング時に実行された変換が使用されます。予測 predict
model_predictの強化された列選択とエイリアスは、機能フラグによって制御されます。 デフォルトでは、probabilityやrawPredictionなどの中間フィールドは予測出力に含まれません。これらの中間フィールドへのアクセスを有効にするには、
model_predictを実行する前に次のコマンドを実行します。set advanced_statistics_show_hidden_fields=true;model_predict キーワードを使用して、指定したモデルとバージョンをデータセットに適用し、予測を生成します。 すべての出力列を選択したり、特定の列を選択したり、エイリアスを割り当てたりして、出力を明確にすることができます。
デフォルトでは、機能フラグが有効になっていない限り、基本列と最終予測のみが返されます。
SELECT * FROM model_predict(model-alias, version-number, SELECT col1, col2 FROM dataset);
特定の出力フィールドを選択 select-specific-output-fields
機能フラグが有効になっている場合、model_predict出力からフィールドのサブセットを取得できます。 これを使用して、入力クエリから予測確率、未加工の予測スコア、基本列などの中間結果を取得します。
ケース 1:使用可能なすべての出力フィールドを返す
SELECT * FROM model_predict(modelName, 1, SELECT a, b, c FROM dataset);
ケース 2:選択した列を返す
SELECT a, b, c, probability, predictionCol FROM model_predict(modelName, 1, SELECT a, b, c FROM dataset);
ケース 3:選択した列をエイリアスで返す
SELECT a, b, c, probability AS p1, predictionCol AS pdc FROM model_predict(modelName, 1, SELECT a, b, c FROM dataset);
いずれの場合も、外部SELECTは、返される結果フィールドを制御します。 これには、入力クエリの基本フィールドや、probability、rawPrediction、predictionColなどの予測出力が含まれます。
CREATE TABLEまたはINSERT INTOを使用して予測を保持する
必要に応じて予測出力を含め、「CREATE TABLE AS SELECT」または「INSERT INTO SELECT」を使用して予測を保持できます。
例:すべての予測出力フィールドを含むテーブルを作成
CREATE TABLE scored_data AS SELECT * FROM model_predict(modelName, 1, SELECT a, b, c FROM dataset);
例:選択した出力フィールドをエイリアスで挿入
INSERT INTO scored_data SELECT a, b, c, probability AS p1, predictionCol AS pdc FROM model_predict(modelName, 1, SELECT a, b, c FROM dataset);
これにより、下流の分析やレポート用に、関連する予測出力フィールドとベース列のみを選択して保持する柔軟性が提供されます。
モデルの評価と管理
SHOW MODELS コマンドを使用して、作成したすべての使用可能なモデルを一覧表示します。 このツールを使用すると、トレーニングされたモデルを表示し、評価や予測に利用できます。 クエリを実行すると、モデル作成時に更新されるモデルリポジトリから情報が取得されます。 返される詳細は、モデル ID、モデル名、バージョン、ソースデータセット、アルゴリズムの詳細、オプション/パラメーター、作成/更新された時間、モデルを作成したユーザーです。
SHOW MODELS;
結果は、次のような表に表示されます。
model-84362-mdunjSalesModelsales_data_2023LogisticRegression{"label": "label-field"}one_hot_encoder(name)、ohe_name、string_indexer(gender)、genderSIJohnSnow@adobe.comモデルのクリーンアップとメンテナンス
モデル レジストリから作成したモデルを削除するには、DROP MODELS コマンドを使用します。 これにより、古いモデルや未使用のモデル、望ましくないモデルを削除できます。 これにより、リソースが解放され、関連するモデルのみが維持されます。 また、オプションのモデル名を含めることで、特異性を向上させることもできます。 これは、提供されたモデルバージョンを持つモデルのみをドロップします。
DROP MODEL IF EXISTS modelName
DROP MODEL IF EXISTS modelName modelVersion ;
次の手順
このドキュメントでは、Data Distillerを使用して信頼できるモデルを作成、トレーニング、管理するために必要な基本SQL構文について説明します。 次に、高度な統計モデルの実装ドキュメント を参照して、利用可能な様々な信頼できるモデルと、SQL ワークフロー内で効果的に実装する方法について説明します。 まだ使用していない場合は、機能エンジニアリング ドキュメントを確認して、モデルのトレーニング用にデータが最適に準備されていることを確認してください。