Поделиться через


Использование пользовательских метрик с 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. Он не может содержать соединения или вложенные запросы. Для создания сложных определений можно использовать вспомогательные функции Python.

В следующей таблице перечислены параметры, которые можно использовать для создания шаблона SQL Jinja, чтобы указать способ вычисления метрики.

Параметр Описание
{{input_column}} Столбец, используемый для вычисления пользовательской метрики.
{{prediction_col}} Прогнозирование модели машинного обучения в столбцах. Используется с InferenceLog анализом.
{{label_col}} Столбцы, владея метками модели машинного обучения. Используется с InferenceLog анализом.
{{current_df}} Для смещения по сравнению с предыдущим периодом времени. Данные из предыдущего периода времени.
{{base_df}} Для смещения по сравнению с базовой таблицей. Базовые данные.

Пример статистической метрики

В следующем примере вычисляется среднее значение квадрата значений в столбце и применяется к столбцам f1 и f2. Выходные данные сохраняются в виде нового столбца в таблице метрик профиля и отображаются в строках анализа, соответствующих столбцам f1 и f2. Применимые имена столбцов заменяются параметром {{input_column}}Jinja.

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 указывает, что эта метрика вычисляется из нескольких столбцов. Параметры {{prediction_col}} Jinja и {{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 ранее в этом разделе. {{base_df}} Параметры {{current_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(),
)