Monitorar tabelas de métricas

Esta página descreve as tabelas de métricas criadas pelo Databricks lakehouse monitoramento. Para obter informações sobre o dashboard criado por um monitor, consulte Utilizar o dashboard SQL gerado.

Ao monitorar a execução em uma tabela do Databricks, ele cria ou atualiza duas tabelas de métricas: uma tabela de métricas de perfil e uma tabela de métricas de desvio.

  • A tabela de métricas de perfil contém estatísticas resumidas para cada coluna e para cada combinação de janela de tempo, fatia e colunas de agrupamento. Para análise InferenceLog , a tabela de análise também contém métricas de precisão do modelo.

  • A tabela de métricas de desvio contém estatísticas que controlam as mudanças na distribuição de uma métrica. As tabelas de desvio podem ser usadas para visualizar ou alertar sobre alterações nos dados em vez de valores específicos. Os seguintes tipos de deriva são compute:

    • O desvio consecutivo compara uma janela com a janela de tempo anterior. O desvio consecutivo só é calculado se existir uma janela de tempo consecutiva após a agregação de acordo com as granularidades especificadas.

    • O desvio da linha de base compara uma janela com a distribuição da linha de base determinada pela tabela de linha de base. O desvio da linha de base só é calculado se uma tabela de linha de base for fornecida.

Onde as tabelas de métricas estão localizadas

As tabelas de métricas do monitor são salvas em {output_schema}.{table_name}_profile_metrics e {output_schema}.{table_name}_drift_metrics, onde:

  • {output_schema} é o catálogo e o esquema especificados por output_schema_name.

  • {table_name} é o nome da tabela que está sendo monitorada.

Como as estatísticas do monitor são calculadas

Cada estatística e métrica nas tabelas de métricas é compute para um intervalo de tempo especificado (chamado de “janela”). Para a análise Snapshot , a janela de tempo é um único ponto no tempo correspondente à hora em que o indicador foi atualizado. Para análise TimeSeries e InferenceLog , a janela de tempo é baseada nas granularidades especificadas em create_monitor e nos valores em timestamp_col especificados no argumento profile_type .

As métricas são sempre compute para toda a tabela. Além disso, se você fornecer uma expressão de divisão, as métricas serão compute para cada fatia de dados definida por um valor da expressão.

Por exemplo:

slicing_exprs=["col_1", "col_2 > 10"]

gera as seguintes fatias: uma para col_2 > 10, uma para col_2 <= 10 e uma para cada valor exclusivo em col1.

As fatias são identificadas nas tabelas de métricas pelos nomes das colunas slice_key e slice_value. Neste exemplo, uma key de fatia seria “col_2 > 10” e os valores correspondentes seriam “true” e “false”. A tabela inteira é equivalente a slice_key = NULL e slice_value = NULL. As fatias são definidas por uma única key de fatia.

As métricas são compute para todos os grupos possíveis definidos pelas janelas de tempo e key e valores de fatia. Além disso, para análise InferenceLog, as métricas são compute para cada ID de modelo. Para obter detalhes, consulte Esquemas de colunas para tabelas geradas.

Estatísticas adicionais para monitoramento de precisão do modelo (InferenceLog análise apenas)

Estatísticas adicionais são calculadas para análise InferenceLog .

  • A qualidade do modelo é calculada se label_col e prediction_col forem fornecidos.

  • As fatias são criadas automaticamente com base nos valores distintos de model_id_col.

  • Para modelos de classificação, as estatísticas de imparcialidade e viés são calculadas para fatias que possuem um valor Boolean .

Análise de consulta e tabelas de métricas de desvio

Você pode query as tabelas de métricas diretamente. O exemplo a seguir é baseado na análise InferenceLog :

SELECT
  window.start, column_name, count, num_nulls, distinct_count, frequent_items
FROM census_monitor_db.adult_census_profile_metrics
WHERE model_id = 1     Constrain to version 1
  AND slice_key IS NULL     look at aggregate metrics over the whole data
  AND column_name = "income_predicted"
ORDER BY window.start

Esquemas de coluna para tabelas geradas

Para cada coluna na tabela principal, as tabelas de métricas contêm uma linha para cada combinação de colunas de agrupamento. A coluna associada a cada linha é mostrada na coluna column_name.

Para métricas baseadas em mais de uma coluna, como métricas de precisão de modelo, column_name é definido como :table.

Para métricas de perfil, as seguintes colunas de agrupamento são usadas:

  • janela de oportunidade

  • granularidade (análise TimeSeries e InferenceLog apenas)

  • tipo logs - tabela de entrada ou tabela de linha de base

  • fatia key e valor

  • ID do modelo (InferenceLog análise apenas)

Para métricas de desvio, as seguintes colunas de agrupamento adicionais são usadas:

  • janela de tempo de comparação

  • tipo de desvio (comparação com a janela anterior ou comparação com a tabela de linha de base)

Os esquemas das tabelas de métricas são mostrados abaixo e também são mostrados na documentação de referência da API de monitoramento Databricks Lakehouse.

Esquema da tabela de métricas do perfil

A tabela a seguir mostra o esquema da tabela de métricas de perfil. Quando uma medição não é aplicável a uma linha, a célula correspondente é nula.

Nome da coluna

Tipo

Descrição

Agrupar colunas

janela

Estrutura. Veja [1] abaixo.

Janela de oportunidade.

granularidade

String

Duração da janela, definida pelo parâmetro granularities . [2]

model_id_col

String

Opcional. Usado apenas para o tipo de análise InferenceLog .

logs

String

Tabela usada para calcular métricas. LINHA DE BASE ou ENTRADA.

slice_key

String

Expressão de fatia. NULL para default, que são todos os dados.

valor_fatia

String

Valor da expressão de divisão.

nome da coluna

String

Nome da coluna na tabela primária. :table é um nome especial para métricas que se aplicam a toda a tabela, como a precisão do modelo.

tipo de dados

String

Tipo de dados Spark de column_name.

logging_table_commit_version

int

Ignorar.

versão_monitor

bigint

Versão da configuração do monitor usada para calcular as métricas na linha. Consulte [3] abaixo para obter detalhes.

Colunas de métricas - estatísticas resumidas

contar

bigint

Número de valores não nulos.

num_nulls

bigint

Número de valores nulos em column_name.

média

dobro

Média aritmética da coluna, incluindo nulos.

quantil

array<double>

Matriz de 1.000 quantis. Veja [4] abaixo.

contagem_distinta

bigint

Número de valores distintos em column_name.

min

dobro

Valor mínimo em column_name.

máximo

dobro

Valor máximo em column_name.

stddev

dobro

Desvio padrão de column_name.

num_zeros

bigint

Número de zeros em column_name.

num_nan

bigint

Número de valores NaN em column_name.

min_size

dobro

Tamanho mínimo de arrays ou estruturas em column_name.

tamanho máximo

dobro

Tamanho máximo de arrays ou estruturas em column_name.

tamanho_médio

dobro

Tamanho médio de arrays ou estruturas em column_name.

min_len

dobro

Comprimento mínimo de strings e valores binários em column_name.

max_len

dobro

Comprimento máximo de strings e valores binários em column_name.

avg_len

dobro

Comprimento médio de strings e valores binários em column_name.

itens_frequentes

Estrutura. Veja [1] abaixo.

Os 100 itens que ocorrem com mais frequência.

non_null_columns

array<string>

Lista de colunas com pelo menos um valor não nulo.

mediana

dobro

Valor médio de column_name.

percent_null

dobro

Porcentagem de valores nulos em column_name.

percent_zeros

dobro

Porcentagem de valores que são zero em column_name.

percent_distinct

dobro

Porcentagem de valores que são distintos em column_name.

Colunas de métricas - precisão do modelo de classificação [5]

exatidão_pontuação

dobro

Precisão do modelo, calculada como (número de previsões corretas / número total de previsões), ignorando valores nulos.

matriz_confusão

Estrutura. Veja [1] abaixo.

precisão

Estrutura. Veja [1] abaixo.

lembrar

Estrutura. Veja [1] abaixo.

f1_score

Estrutura. Veja [1] abaixo.

Colunas de métricas - precisão do modelo de regressão [5]

erro_quadrado_médio

dobro

Erro quadrático médio entre prediction_col e label_col.

root_mean_squared_error

dobro

Raiz do erro quadrático médio entre prediction_col e label_col.

mean_average_error

dobro

Erro médio médio entre prediction_col e label_col.

mean_absolute_percentage_error

dobro

Erro percentual médio absoluto entre prediction_col e label_col.

r2_score

dobro

Pontuação do R-quadrado entre prediction_col e label_col.

Colunas de métricas - justiça e preconceito [6]

paridade_preditiva

dobro

Mede se os dois grupos têm precisão igual em todas as classes previstas. label_col é obrigatório.

preditiva_igualdade

dobro

Mede se os dois grupos têm taxas de falsos positivos iguais em todas as classes previstas. label_col é obrigatório.

oportunidade igual

dobro

Mede se os dois grupos têm recall igual em todas as classes previstas. label_col é obrigatório.

paridade_estatística

dobro

Mede se os dois grupos têm taxa de aceitação igual. A taxa de aceitação aqui é definida como a probabilidade empírica de ser prevista como uma determinada classe, em todas as classes previstas.

[1] Formato da estrutura para confusion_matrix, precision, recall e f1_score:

Nome da coluna

Tipo

janela

struct<start: timestamp, end: timestamp>

itens_frequentes

array<struct<item: string, count: bigint>>

matriz_confusão

struct<prediction: string, label: string, count: bigint>

precisão

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

lembrar

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

f1_score

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

[2] Para perfis de séries temporais ou de inferência, o monitor olha para trás 30 dias a partir do momento em que o monitor é criado. Devido a esse corte, a primeira análise pode incluir uma janela parcial. Por exemplo, o limite de 30 dias pode cair no meio de uma semana ou mês e, nesse caso, a semana ou o mês inteiro não é incluído no cálculo. Esse problema afeta apenas a primeira janela.

[3] A versão mostrada nesta coluna é a versão usada para calcular as estatísticas na linha e pode não ser a versão atual do monitor. Cada vez que você refresh as métricas, o monitor tenta recalcular as métricas calculadas anteriormente usando a configuração atual do monitor. A versão atual do monitor aparece nas informações do monitor retornadas pela API e pelo cliente Python.

[4] Código de exemplo para recuperar o percentil 50: SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ... ou SELECT quantiles[500] ... .

[5] Mostrado apenas se o monitor tiver o tipo de análise InferenceLog e ambos label_col e prediction_col forem fornecidos.

[6] Mostrado apenas se o monitor tiver tipo de análise InferenceLog e problem_type for classification.

Esquema da tabela de métricas de desvio

A tabela a seguir mostra o esquema da tabela de métricas de desvio. A tabela de desvio é gerada apenas se uma tabela de linha de base for fornecida ou se existir uma janela de tempo consecutiva após a agregação de acordo com as granularidades especificadas.

Nome da coluna

Tipo

Descrição

Agrupar colunas

janela

struct<start: timestamp, end: timestamp>

Janela de oportunidade.

window_cmp

struct<start: timestamp, end: timestamp>

Janela de comparação para drift_type CONSECUTIVE.

drift_type

String

LINHA DE BASE ou CONSECUTIVO. Se as métricas de desvio se comparam à janela de tempo anterior ou à tabela de linha de base.

granularidade

String

Duração da janela, definida pelo parâmetro granularities . [7]

model_id_col

String

Opcional. Usado apenas para o tipo de análise InferenceLog .

slice_key

String

Expressão de fatia. NULL para default, que são todos os dados.

valor_fatia

String

Valor da expressão de divisão.

nome da coluna

String

Nome da coluna na tabela primária. :table é um nome especial para métricas que se aplicam a toda a tabela, como a precisão do modelo.

tipo de dados

String

Tipo de dados Spark de column_name.

versão_monitor

bigint

Versão da configuração do monitor usada para calcular as métricas na linha. Consulte [8] abaixo para obter detalhes.

Colunas de métricas - desvio

As diferenças são calculadas como janela atual - janela de comparação.

contagem_delta

dobro

Diferença em count.

avg_delta

dobro

Diferença em avg.

percent_null_delta

dobro

Diferença em percent_null.

percent_zeros_delta

dobro

Diferença em percent_zeros.

percent_distinct_delta

dobro

Diferença em percent_distinct.

non_null_columns_delta

struct<added: int, missing: int>

Número de colunas com qualquer aumento ou diminuição em valores não nulos.

qui_quadrado_teste

struct<statistic: double, pvalue: double>

Teste qui-quadrado para deriva na distribuição.

ks_test

struct<statistic: double, pvalue: double>

Teste KS para desvio na distribuição. Calculado apenas para colunas numéricas.

tv_distance

dobro

Distância de variação total para deriva na distribuição.

l_infinity_distance

dobro

Distância L-infinita para deriva na distribuição.

js_distance

dobro

Distância de Jensen-Shannon para deriva na distribuição. Calculado apenas para colunas categóricas.

wasserstein_distance

dobro

Flutua entre duas distribuições numéricas usando os indicadores de distância de Wasserstein.

população_estabilidade_índice

dobro

métricas para comparar o desvio entre duas distribuições numéricas usando o índice de estabilidade populacional. Consulte [9] abaixo para obter detalhes.

[7] Para perfis de séries temporais ou de inferência, o monitor olha para trás 30 dias a partir do momento em que o monitor é criado. Devido a esse corte, a primeira análise pode incluir uma janela parcial. Por exemplo, o limite de 30 dias pode cair no meio de uma semana ou mês e, nesse caso, a semana ou o mês inteiro não é incluído no cálculo. Esse problema afeta apenas a primeira janela.

[8] A versão mostrada nesta coluna é a versão usada para calcular as estatísticas na linha e pode não ser a versão atual do monitor. Cada vez que você refresh as métricas, o monitor tenta recalcular as métricas calculadas anteriormente usando a configuração atual do monitor. A versão atual do monitor aparece nas informações do monitor retornadas pela API e pelo cliente Python.

[9] O resultado do índice de estabilidade populacional é um valor numérico que representa quão diferentes são duas distribuições. O intervalo é [0, inf). PSI < 0,1 significa que não há mudança significativa na população. PSI < 0,2 indica mudança populacional moderada. PSI >= 0,2 indica mudança populacional significativa.