搭配 Databricks Lakehouse 監視使用自訂計量
此頁面說明如何在 Databricks Lakehouse 監視中建立自訂計量。 除了自動計算的分析與漂移統計數據之外,您還可以建立自訂計量。 例如,您可能想要追蹤擷取商務邏輯某些層面的加權平均值,或使用自訂模型品質分數。 您也可以建立自訂漂移計量,以追蹤主要資料表中值的變更 (相較於基準或先前時間範圍)。
如需更多如何使用 MonitorMetric
API 的詳細資訊,請參閱 API 參照。
自訂計量的類型
Databricks Lakehouse 監視包括下列類型的自訂計量:
- 彙總計量是根據主要資料表中的資料行計算而得。 彙總計量會儲存在設定檔計量資料表中。
- 衍生計量是根據先前計算的彙總計量計算而得,而且不會直接使用來自主要資料表的資料。 衍生計量會儲存在設定檔計量資料表中。
- 漂移計量會比較先前計算的彙總或來自兩個不同的時間範圍衍生計量,或主要資料表與基準資料表之間的計量。 漂移計量會儲存在漂移計量資料表中。
使用衍生和漂移計量可能將完整主要資料表的重新計算降至最低。 僅彙總計量會從主要資料表存取資料。 然後可以直接從彙總計量值計算衍生和漂移計量。
自訂計量參數
若要定義自訂計量,您可以建立 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 範本。 請參閱建議定義。 |
output_data_type |
以 JSON 字串格式計量輸出的 Spark 資料類型。 |
建立 definition
參數 definition
必須為 Jinja 範本表單中的單一字串運算式。 它不能包含聯結或子查詢。
下列資料表列出可用來建立 SQL Jinja 範本的參數,以指定計算計量的方法。
參數 | 描述 |
---|---|
{{input_column}} |
用來計算自訂計量的資料行。 |
{{prediction_col}} |
保存 ML 模型預測的資料行。 與分析搭配 InferenceLog 使用。 |
{{label_col}} |
保存 ML 模型基準真實標籤的資料行。 與分析搭配 InferenceLog 使用。 |
{{current_df}} |
與先前時間範圍比較的漂移。 先前時間範圍的資料。 |
{{base_df}} |
與先前基準資料表比較的漂移。 基準資料。 |
彙總計量範例
下列範例會計算資料行中值的平方平均值,並套用至資料行 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
之間差異的平均值。 這個範例示範在參數 [":table"]
中使用 input_columns
,以指出計算中使用了資料表中的一個以上的資料行。
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(),
)