Использование пользовательских метрик с databricks Lakehouse Monitoring
На этой странице описывается создание пользовательской метрики в Databricks Lakehouse Monitoring. Помимо статистики анализа и смещения, которые вычисляются автоматически, можно создавать пользовательские метрики. Например, может потребоваться отслеживать весовые значения, которые фиксируют некоторые аспекты бизнес-логики или используют пользовательский показатель качества модели. Можно также создавать пользовательские метрики смещения, отслеживающие изменения значений в основной таблице (по сравнению с базовым или предыдущим периодом времени).
Дополнительные сведения об использовании MonitorMetric
API см. в справочнике по API.
Типы пользовательских метрик
Databricks Lakehouse Monitoring включает следующие типы пользовательских метрик:
- Статистические метрики, вычисляемые на основе столбцов в основной таблице. Агрегатные метрики хранятся в таблице метрик профиля.
- Производные метрики, которые вычисляются на основе ранее вычисляемых статистических метрик и не используют данные из первичной таблицы напрямую. Производные метрики хранятся в таблице метрик профиля.
- Метрики смещения, которые сравнивают ранее вычисляемые статистические или производные метрики из двух разных периодов времени или между первичной таблицей и базовой таблицей. Метрики смещения хранятся в таблице метрик смещения.
Использование производных и смещения метрик, где это возможно, позволяет свести к минимуму повторную компиляцию по всей основной таблице. Только статистические метрики получают доступ к данным из первичной таблицы. Затем производные и смещения метрики можно вычислить непосредственно из статистических значений метрик.
Параметры пользовательских метрик
Чтобы определить пользовательскую метрику, создайте шаблон Jinja для выражения столбца SQL. В таблицах этого раздела описываются параметры, определяющие метрики, и параметры, используемые в шаблоне Jinja.
Параметр | Описание |
---|---|
type |
Это может быть MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE , MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED или MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT . |
name |
Имя столбца для пользовательской метрики в таблицах метрик. |
input_columns |
Список имен столбцов во входной таблице, для которых следует вычислить метрику. Чтобы указать, что в вычислении используется несколько столбцов, используйте :table . См. примеры, приведенные в этой статье. |
definition |
Шаблон Jinja для выражения SQL, указывающего способ вычисления метрики. См. раздел "Создание определения". |
output_data_type |
Тип данных Spark выходных данных метрик в формате строки JSON. |
Создавать definition
Параметр definition
должен быть одним строковым выражением в виде шаблона Jinja. Он не может содержать соединения или вложенные запросы.
В следующей таблице перечислены параметры, которые можно использовать для создания шаблона SQL Jinja, чтобы указать способ вычисления метрики.
Параметр | Описание |
---|---|
{{input_column}} |
Столбец, используемый для вычисления пользовательской метрики. |
{{prediction_col}} |
Столбец, содержащий предсказания модели машинного обучения. Используется с InferenceLog анализом. |
{{label_col}} |
Столбец, содержащий истинные метки модели машинного обучения. Используется с 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(),
)