CREATE MODEL MONITOR¶
現在のスキーマまたは指定したスキーマの モデルモニター を作成または置換します。
構文¶
CREATE [ OR REPLACE ] MODEL MONITOR [ IF NOT EXISTS ] <monitor_name> WITH
MODEL = <model_name>
VERSION = '<version_name>'
FUNCTION = '<function_name>'
SOURCE = <source_name>
WAREHOUSE = <warehouse_name>
REFRESH_INTERVAL = '<refresh_interval>'
AGGREGATION_WINDOW = '<aggregation_window>'
TIMESTAMP_COLUMN = <timestamp_name>
[ BASELINE = <baseline_name> ]
[ ID_COLUMNS = <id_column_name_array> ]
[ PREDICTION_CLASS_COLUMNS = <prediction_class_column_name_array> ]
[ PREDICTION_SCORE_COLUMNS = <prediction_column-name_array> ]
[ ACTUAL_CLASS_COLUMNS = <actual_class_column_name_array> ]
[ ACTUAL_SCORE_COLUMNS = <actual_column_name_array> ]
[ SEGMENT_COLUMNS = <segment_column_name_array> ]
[ CUSTOM_METRIC_COLUMNS = <custom_metric_column_name_array> ]
必須パラメーター¶
monitor_nameモデルモニターの識別子を指定します。モニターが作成されるスキーマで一意であり、モニターされるモデルと同じスキーマにする必要があります。
モニター識別子が完全修飾されていない場合(
db_name.schema_name.nameまたはschema_name.nameの形式)、コマンドはセッションの現在のスキーマにモデルを作成します。また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
MODEL = model_nameモニターするモデルの名前。モニターが作成されたのと同じスキーマにする必要があります。
VERSION = 'version_name'モニターするモデルのバージョン名前。
FUNCTION = function_nameモニターするモデルバージョンにある特定の関数の名前。
SOURCE = source_name特徴量、推論、およびグランドトゥルースのラベルを含むソーステーブルまたはビューの名前。
WAREHOUSE = warehouse_nameモニター内部の演算処理に使用するSnowflakeウェアハウスの名前。
REFRESH_INTERVAL = 'refresh_interval'モニターが内部状態をリフレッシュする間隔。値は
'1 day'などの、期間を表す文字列でなければなりません。サポートされる単位は、seconds、minutes、hours、days、weeks、months、quarters、およびyearsです。単数形("hour")でも複数形("hours")でもかまいませんが、省略形は使用できません。AGGREGATION_WINDOW = 'aggregation_window'モニターがデータを集計するウィンドウ。値は
'1 day'などの、期間を表す文字列でなければなりません。日間のみがサポートされています。間隔名は単数形(「day」)でも複数形(「days」)でもかまいませんが、省略することはできません。TIMESTAMP_COLUMN = timestamp_nameタイムスタンプを含むソースデータにある列の名前。タイプは TIMESTAMP_NTZ でなければなりません。
オプションのパラメーター¶
BASELINE = baseline_nameSOURCE と同様のデータのスナップショットを含むベースラインテーブルの名前で、ドリフトの計算に使用されます。このデータのスナップショットは、モニターオブジェクト内に埋め込まれます。このパラメーターはオプションですが、設定されていない場合、モニターはドリフトを検出できません。
ID_COLUMNS = id_column_name_array合わせてソースデータの各行を一意に識別する文字列名の配列。 ARRAY 定数 をご参照ください。
注釈
少なくとも1つの予測列(予測スコアまたは予測クラスのいずれか)が必須です。
バイナリ分類モデルの場合: 予測はスコアでもクラスでもかまいませんが、実績はクラスでなければなりません。
マルチクラス分類モデルの場合: 予測と実績はクラスでなければなりません。
回帰モデルの場合: 予測値と実績値の両方が数値でなければなりません。
PREDICTION_CLASS_COLUMNS = prediction_class_column_name_arrayデータソース内にあるすべての予測クラス列の名前を指定する文字列の配列。ARRAY 定数 をご参照ください。モデルタスクが
TABULAR_BINARY_CLASSIFICATIONまたはTABULAR_REGRESSIONの場合、列は NUMBER タイプでなければなりません。モデルタスクがTABULAR_MULTI_CLASSIFICATIONの場合、列のタイプは STRING でなければなりません。PREDICTION_SCORE_COLUMNS = prediction_column_name_arrayデータソース内にあるすべての予測スコア列の名前を指定する文字列の配列。ARRAY 定数 をご参照ください。列は、型 NUMBER にする必要があります。
ACTUAL_CLASS_COLUMNS = actual_class_column_name_arrayデータソース内にあるすべての実際クラス列の名前を指定する文字列の配列。 ARRAY 定数 をご参照ください。モデルタスクが
TABULAR_BINARY_CLASSIFICATIONまたはTABULAR_REGRESSIONの場合、列は NUMBER タイプでなければなりません。モデルタスクがTABULAR_MULTI_CLASSIFICATIONの場合、列のタイプは STRING でなければなりません。ACTUAL_SCORE_COLUMNS = actual_column_name_arrayデータソース内にあるすべての実際スコア列の名前を指定する文字列の配列。 ARRAY 定数 をご参照ください。列は、型 NUMBER にする必要があります。
SEGMENT_COLUMNS = segment_column_name_arrayデータソース内にあるすべてのセグメント列の名前を指定する文字列の配列。ARRAY 定数 をご参照ください。セグメント列は、ソースデータの型 STRING である必要があります。1つのモニターにつき最大5つのセグメント列を指定できます。パフォーマンスを最適化するには、各セグメント列が25個未満の一意の値を持つ必要があります。セグメントの詳細については、ML 可観測性:時間経過に伴うモデルの動作のモニタリング をご参照ください。
CUSTOM_METRIC_COLUMNS = custom_metric_column_name_arrayカスタムメトリックに使用されるソースデータの列を指定する文字列の配列。 これらの列は特徴量として扱われません。ARRAY 定数 をご参照ください。列は型 NUMBER にする必要があります。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
注意 |
|---|---|---|
OWNERSHIP |
モデルモニター |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
CREATE MODEL MONITOR |
スキーマ |
|
SELECT |
SOURCE パラメーターで指定されたテーブルまたはビュー |
|
USAGE |
WAREHOUSE パラメーターで指定されたウェアハウス |
|
USAGE |
MODEL パラメーターで指定されたモデル |
スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。スキーマに対する任意の権限を付与されたロールは、そのロールがスキーマを解決できることに注意してください。たとえば、スキーマに対する CREATE 権限を付与されたロールは、そのスキーマにオブジェクトを作成できますが、そのスキーマに対する USAGE*も*付与されている必要はありません。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
パラメーターには以下の要件が適用されます。
モデルタスクは
tabular_binary_classificationまたはtabular_regressionにする必要があります。複数出力モデルは現在サポートされていません。予測列と実際列は配列ですが、配列の要素は1つのみにする必要があります。
少なくとも1つの予測列を指定する必要があります。
実際列は任意ですが、指定しないと精度メトリクスは計算されません。
列はすべてのパラメーターで1回のみ指定できます(例: ID 列を予測列にもすることはできません)。
モニターできる特徴量の数は500個に制限されています。
セグメント列の要件:
セグメント列は、型 STRING にする必要があります。
モニターごとに最大5セグメント列(ハード制限)。
各セグメント列は、25個以下の一意の値を持たなければなりません(推奨制限)。
セグメント値は大文字と小文字が区別され、特殊文字はセグメントクエリではサポートされていません。
MODEL MONITOR インスタンスの基本構成(モニターするモデルや使用するデータソースを含む)を、モニター作成後に変更することはできません。ALTER MODEL MONITOR を使って変更できるのは、いくつかのオプションのみです。モニターの構成を変更するには、インスタンスをドロップして新しいインスタンスを作成します。
複製 は、 CUSTOM_CLASSIFIER クラスのインスタンスに対してのみサポートされます。
OR REPLACEとIF NOT EXISTS句は互いに排他的です。両方を同じステートメントで使うことはできません。CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
例¶
基本的な例
毎日リフレッシュし、単一の予測スコア列と実際スコア列を使用するモデルモニターを作成します。
CREATE MODEL MONITOR my_monitor WITH
MODEL = my_model
VERSION = 'v1'
FUNCTION = 'predict'
SOURCE = mydb.myschema.scoring_data
WAREHOUSE = compute_wh
REFRESH_INTERVAL = '1 day'
AGGREGATION_WINDOW = '1 day'
TIMESTAMP_COLUMN = event_time
PREDICTION_SCORE_COLUMNS = ( 'prediction_score' )
ACTUAL_SCORE_COLUMNS = ( 'actual_score' );
CUSTOM_METRIC_COLUMNS を使用した例
追加の特化したメトリックを計算するためにカスタム数値列を指定します。
CREATE MODEL MONITOR my_monitor_custom WITH
MODEL = my_model
VERSION = 'v1'
FUNCTION = 'predict'
SOURCE = mydb.myschema.scoring_data
WAREHOUSE = compute_wh
REFRESH_INTERVAL = '1 day'
AGGREGATION_WINDOW = '1 day'
TIMESTAMP_COLUMN = event_time
PREDICTION_SCORE_COLUMNS = ( 'prediction_score' )
ACTUAL_SCORE_COLUMNS = ( 'actual_score' )
CUSTOM_METRIC_COLUMNS = ( 'latency_ms', 'num_impressions' );
この例では、latency_ms と num_impressions という2つのカスタムメトリックを含めています。これらは、モデルの特徴ではないが、モデルのパフォーマンスの次に追跡すると役立つソースデータの列です。