メインコンテンツまでスキップ

データプロファイリングでカスタム メトリクスを使用する

このページでは、データプロファイリングでカスタム メトリクスを作成する方法について説明します。 自動的に計算される分析とドリフト統計に加えて、カスタムメトリックを作成することもできます。 たとえば、ビジネス ロジックの側面を捉えた加重平均を追跡したり、カスタム モデル品質スコアを使用したりする必要がある場合があります。また、プライマリ テーブルの値の変化 (ベースラインまたは前の時間ウィンドウと比較) を追跡するカスタム ドリフト メトリックを作成することもできます。

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

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

データプロファイリングには、次のタイプのカスタム メトリクスが含まれます。

  • 集計メトリクス。プライマリ テーブルの列に基づいて計算されます。 集約メトリクスは、プロファイル メトリクス テーブルに保存されます。
  • 派生メトリクス。以前にコンピュートされた集計メトリクスに基づいて計算され、プライマリ テーブルのデータは直接使用されません。 派生メトリクスはプロファイル メトリクス テーブルに保存されます。
  • ドリフト メトリクス。以前にコンピュートされた集計メトリクス、または 2 つの異なる時間ウィンドウからのメトリクス、またはプライマリ テーブルとベースライン テーブルの間の導出メトリクスを比較します。 ドリフト メトリクスは、ドリフト メトリクス テーブルに保存されます。

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

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

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

パラメーター

説明

type

MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATEMonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED、またはMonitorMetricType.CUSTOM_METRIC_TYPE_DRIFTのいずれか。

name

メトリクス テーブル内のカスタム メトリクスの列名。

input_columns

メトリクスがコンピュートする必要がある入力テーブル内の列名のリスト。 計算に複数の列が使用されていることを示すには、 :tableを使用します。この記事の例を参照してください。

definition

Jinjaテンプレートで、メトリクスをコンピュートする方法を指定する SQL 式です。 定義の作成を参照してください。

output_data_type

JSON文字列形式のメトリクス出力のSparkデータ型。

作成: definition

definition問題は、Jinja テンプレートの形式の単一の文字列式である必要があります。 結合またはサブクエリを含めることはできません。

次の表に、 SQL Jinja テンプレートを作成してメトリクスの計算方法を指定するために使用できる問題を示します。

パラメーター

説明

{{input_column}}

カスタム メトリクスをコンピュートするために使用される列。

{{prediction_col}}

ML モデルの予測を保持する列。InferenceLog分析で使用されます。

{{label_col}}

ML モデルのグラウンド トゥルース ラベルを保持する列。InferenceLog分析で使用されます。

{{current_df}}

前の時間ウィンドウと比較したドリフトです。前の時間ウィンドウからのデータ。

{{base_df}}

ベースライン テーブルと比較したドリフトです。ベースラインデータ。

集約メトリクスの例

次の例は、列内の値の二乗の平均をコンピュートし、列f1f2に適用されます。 出力はプロファイルメトリクステーブルに新しい列として保存され、列f1f2に対応する分析行に表示されます。 該当する列名が Jinja 問題{{input_column}}に置き換えられます。

Python
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"]を使用して、テーブルの複数の列が計算に使用されることを示しています。

Python
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}}は、プロファイルの予測ラベル列と正解ラベル列の名前に置き換えられます。

Python
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(),
)

Derived メトリクスの例

次のコードは、このセクションで前に定義したsquared_avgメトリクスの平方根を計算するカスタム メトリクスを定義します。 これは派生メトリクスであるため、プライマリ テーブル データを参照せず、代わりにsquared_avg集約メトリクスに関して定義されます。 出力は、プロファイル メトリクス テーブルの新しい列として保存されます。

Python
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値を参照できます。 比較ウィンドウは、ベースライン データまたは前の時間ウィンドウのデータのいずれかになります。ドリフト メトリクスは、ドリフト メトリクス テーブルに保存されます。

Python
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(),
)