次の方法で共有


Databricks レイクハウス監視でカスタム メトリックを使用する

このページでは、Databricks レイクハウス監視でカスタム メトリックを作成する方法について説明します。 自動的に計算される分析とドリフトの統計に加えて、カスタム メトリックを作成できます。 たとえば、ビジネス ロジックの何らかの側面をキャプチャする加重平均を追跡したり、カスタム モデル品質スコアを使用したりできます。 また、主テーブルの値の変更 (ベースラインまたは前回の時間枠との比較) を追跡するカスタム ドリフト メトリックを作成することもできます。

MonitorMetric API の使用方法の詳細については、API リファレンスを参照してください。

カスタム メトリックの種類

Databricks レイクハウス監視には、次の種類のカスタム メトリックが含まれています。

  • 集計メトリック。これは、主テーブルの列に基づいて計算されます。 集計メトリックは、プロファイル メトリック テーブルに保存されます。
  • 派生メトリック。これは、前に計算された集計メトリックに基づいて計算され、主テーブルのデータを直接使用しません。 派生メトリックは、プロファイル メトリック テーブルに保存されます。
  • ドリフト メトリック。これは、以前に計算された集計または派生メトリックを、2 つの異なる時間枠で、または主テーブルとベースライン テーブルの間で比較します。 ドリフト メトリックは、ドリフト メトリック テーブルに保存されます。

可能な限り派生およびドリフト メトリックを使用することで、主テーブル全体に対する再計算が最小限に抑えられます。 集計メトリックのみ主テーブルのデータにアクセスします。 派生およびドリフト メトリックは、集計メトリック値から直接計算できます。

カスタム メトリック パラメーター

カスタム メトリックを定義するには、SQL 列式の Jinja テンプレートを作成します。 このセクションの表では、メトリックを定義するパラメーターと、Jinja テンプレートで使用されるパラメーターについて説明します。

パラメーター 説明
type MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATEMonitorMetricType.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 乗の平均を計算し、列 f1f2 に適用されます。 出力はプロファイル メトリック テーブルの新しい列として保存され、列 f1f2 に対応する分析行に表示されます。 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(),
)

次のコードは、列 f1f2 の差の平均を計算するカスタム メトリックを定義しています。 この例では、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 の観測では、その行の予測された値がグランド トゥルースと一致しない場合、より重いペナルティが割り当てられます。 これは生の列 (predictionlabel) で定義されているため、集計メトリックとして定義されます。 :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(),
)