Databricks レイクハウス監視でカスタム メトリックを使用する
このページでは、Databricks レイクハウス監視でカスタム メトリックを作成する方法について説明します。 自動的に計算される分析とドリフトの統計に加えて、カスタム メトリックを作成できます。 たとえば、ビジネス ロジックの何らかの側面をキャプチャする加重平均を追跡したり、カスタム モデル品質スコアを使用したりできます。 また、主テーブルの値の変更 (ベースラインまたは前回の時間枠との比較) を追跡するカスタム ドリフト メトリックを作成することもできます。
MonitorMetric
API の使用方法の詳細については、API リファレンスを参照してください。
カスタム メトリックの種類
Databricks レイクハウス監視には、次の種類のカスタム メトリックが含まれています。
- 集計メトリック。これは、主テーブルの列に基づいて計算されます。 集計メトリックは、プロファイル メトリック テーブルに保存されます。
- 派生メトリック。これは、前に計算された集計メトリックに基づいて計算され、主テーブルのデータを直接使用しません。 派生メトリックは、プロファイル メトリック テーブルに保存されます。
- ドリフト メトリック。これは、以前に計算された集計または派生メトリックを、2 つの異なる時間枠で、または主テーブルとベースライン テーブルの間で比較します。 ドリフト メトリックは、ドリフト メトリック テーブルに保存されます。
可能な限り派生およびドリフト メトリックを使用することで、主テーブル全体に対する再計算が最小限に抑えられます。 集計メトリックのみ主テーブルのデータにアクセスします。 派生およびドリフト メトリックは、集計メトリック値から直接計算できます。
カスタム メトリック パラメーター
カスタム メトリックを定義するには、SQL 列式の Jinja テンプレートを作成します。 このセクションの表では、メトリックを定義するパラメーターと、Jinja テンプレートで使用されるパラメーターについて説明します。
パラメーター | 説明 |
---|---|
type |
MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE 、MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED 、または MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT のいずれか。 |
name |
メトリック テーブル内のカスタム メトリックの列名。 |
input_columns |
メトリックを計算する必要がある入力テーブル内の列名の一覧。 計算で複数の列が使用されていることを示すには、:table を使用します。 この記事の例を参照してください。 |
definition |
メトリックの計算方法を指定する SQL 式の Jinja テンプレート。 「definition の作成」を参照してください。 |
output_data_type |
JSON 文字列形式のメトリック出力の Spark データ型。 |
definition
の作成
definition
パラメーターは、Jinja テンプレートの形式の単一の文字列式でなければなりません。 結合やサブクエリを含めることはできません。
次の表に、メトリックの計算方法を指定する SQL Jinja テンプレートの作成に使用できるパラメーターを示します。
パラメーター | 説明 |
---|---|
{{input_column}} |
カスタム メトリックの計算に使用される列。 |
{{prediction_col}} |
ML モデル予測を保持する列。 InferenceLog 分析と共に使用します。 |
{{label_col}} |
ML モデルのグランド トゥルース ラベルを保持する列。 InferenceLog 分析と共に使用します。 |
{{current_df}} |
前の時間枠と比較されるドリフトの場合。 前の時間枠のデータ。 |
{{base_df}} |
ベースライン テーブルと比較されるドリフトの場合。 ベースライン データ。 |
集計メトリックの例
次の例は、列の値の 2 乗の平均を計算し、列 f1
と f2
に適用されます。 出力はプロファイル メトリック テーブルの新しい列として保存され、列 f1
と f2
に対応する分析行に表示されます。 Jinja パラメーター {{input_column}}
は、該当する列名に置き換えられます。
from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T
MonitorMetric(
type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
name="squared_avg",
input_columns=["f1", "f2"],
definition="avg(`{{input_column}}`*`{{input_column}}`)",
output_data_type=T.StructField("output", T.DoubleType()).json(),
)
次のコードは、列 f1
と f2
の差の平均を計算するカスタム メトリックを定義しています。 この例では、input_columns
パラメーターで [":table"]
が使用され、テーブルの複数の列が計算で使用されていることを示しています。
from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T
MonitorMetric(
type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
name="avg_diff_f1_f2",
input_columns=[":table"],
definition="avg(f1 - f2)",
output_data_type=T.StructField("output", T.DoubleType()).json(),
)
この例では、加重モデル品質スコアを計算します。 critical
列が True
の観測では、その行の予測された値がグランド トゥルースと一致しない場合、より重いペナルティが割り当てられます。 これは生の列 (prediction
と label
) で定義されているため、集計メトリックとして定義されます。 :table
列は、このメトリックが複数の列から計算されることを示します。 Jinja パラメーターの {{prediction_col}}
および {{label_col}}
は、モニターの予測とグラウンド トゥルース ラベルの各列の名前に置き換えられます。
from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T
MonitorMetric(
type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
name="weighted_error",
input_columns=[":table"],
definition="""avg(CASE
WHEN {{prediction_col}} = {{label_col}} THEN 0
WHEN {{prediction_col}} != {{label_col}} AND critical=TRUE THEN 2
ELSE 1 END)""",
output_data_type=T.StructField("output", T.DoubleType()).json(),
)
派生メトリックの例
次のコードでは、このセクションで前に定義した squared_avg
メトリックの平方根を計算するカスタム メトリックを定義します。 これは派生メトリックであるため、主テーブル データを参照せず、代わりに squared_avg
集計メトリックの観点から定義されます。 出力は、プロファイル メトリック テーブルの新しい列として保存されます。
from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T
MonitorMetric(
type=MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED,
name="root_mean_square",
input_columns=["f1", "f2"],
definition="sqrt(squared_avg)",
output_data_type=T.StructField("output", T.DoubleType()).json(),
)
ドリフト メトリックの例
次のコードでは、このセクションで前に定義した weighted_error
メトリックの変化を追跡するドリフト メトリックを定義します。 {{current_df}}
および {{base_df}}
パラメーターを使用すると、メトリックは現在のウィンドウと比較ウィンドウの weighted_error
値を参照できます。 比較ウィンドウは、ベースライン データまたは前の時間枠のデータのいずれかになります。 ドリフト メトリックは、ドリフト メトリック テーブルに保存されます。
from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T
MonitorMetric(
type=MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT,
name="error_rate_delta",
input_columns=[":table"],
definition="{{current_df}}.weighted_error - {{base_df}}.weighted_error",
output_data_type=T.StructField("output", T.DoubleType()).json(),
)