Pular para o conteúdo principal

Monitorar tabelas métricas

info

Visualização

Esse recurso está em Public Preview.

Esta página descreve as tabelas métricas criadas pelo Databricks lakehouse monitoring. Para obter informações sobre o dashboard criado por um monitor, consulte Use the generated SQL dashboard.

Quando um monitor executa em uma tabela Databricks, ele cria ou atualiza duas tabelas métricas: uma tabela métrica de perfil e uma tabela métrica 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 a análise do site InferenceLog, a tabela de análise também contém métricas de precisão do modelo.
  • A tabela de métricas de deriva contém estatísticas que acompanham as alterações 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 desvio são computados:
    • 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 da linha de base. O desvio da linha de base só é calculado se uma tabela de linha de base for fornecida.

Onde estão localizadas as tabelas métricas

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 computadas

Cada estatística e métrica nas tabelas de métricas é calculada para um intervalo de tempo específico (chamado de "janela"). Para Snapshot análise, a janela de tempo é um único ponto no tempo correspondente ao momento em que as métricas foram atualizadas. Para as análises 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.

métricas são sempre computadas para toda a tabela. Além disso, se o senhor fornecer uma expressão de fatiamento, as métricas serão computadas 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 fatia key 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 fatia key.

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

Estatísticas adicionais para o monitoramento da precisão do modelo (somente na análise do siteInferenceLog )

Estatísticas adicionais são calculadas para a análise do site 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 os modelos de classificação, as estatísticas de imparcialidade e viés são calculadas para fatias que têm um valor Boolean.

Análise de consultas e tabelas métricas de deriva

O senhor pode consultar as tabelas de métricas diretamente. O exemplo a seguir é baseado na análise do site InferenceLog:

SQL
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 colunas para tabelas geradas

Para cada coluna da tabela primária, 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 as métricas de precisão do modelo, column_name é definido como :table.

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

  • janela de tempo
  • granularidade (somente análiseTimeSeries e InferenceLog )
  • log type - tabela de entrada ou tabela de linha de base
  • slice key e valor
  • ID do modelo (somente para análise emInferenceLog )

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

  • 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 métricas são mostrados abaixo e também são mostrados na documentação de referência doDatabricks lakehouse monitoring API.

Esquema da tabela de métricas de perfil

A tabela a seguir mostra o esquema da tabela de métricas de perfil. Se uma métrica não for aplicável a uma linha, a célula correspondente será nula.

Nome da coluna

Tipo

Descrição

Agrupando colunas

janela

Estrutura. Veja [1] abaixo.

Janela de tempo.

Granularidade

string

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

model_id_col

string

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

registros

string

Tabela usada para calcular as métricas. BASELINE ou INPUT.

chave de fatia

string

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

valor_da_fatia

string

Valor da expressão de fatiamento.

nome_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_nulos

bigint

Número de valores nulos em column_name.

média

double

Média aritmética da coluna, ignorando os nulos.

quantis

array<double>

Matriz de 1000 quantis. Veja [4] abaixo.

contabilidade_distinta

bigint

Número de valores distintos em column_name.

Mín

double

Valor mínimo em column_name.

Máx

double

Valor máximo em column_name.

stddev

double

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.

tamanho_mínimo

double

Tamanho mínimo de matrizes ou estruturas em column_name.

tamanho_máximo

double

Tamanho máximo de matrizes ou estruturas em column_name.

tamanho_médio

double

Tamanho médio de matrizes ou estruturas em column_name.

min_len

double

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

max_len

double

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

avg_len

double

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.

colunas_nulas

array<string>

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

Mediana

double

Valor médio de column_name.

percenta_nulo

double

Porcentagem de valores nulos em column_name.

percenta_zeros

double

Porcentagem de valores que são zero em column_name.

percento_distinto

double

Porcentagem de valores que são distintos em column_name.

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

pontuação de precisão

double

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

matriz_de_confusão

Estrutura. Veja [1] abaixo.

Precisão

Estrutura. Veja [1] abaixo.

Recall

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

double

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

erro root_mean_squared_squared_error

double

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

erro_médio_médio

double

Erro médio entre prediction_col e label_col.

erro percentual absoluto médio

double

Erro percentual médio absoluto entre prediction_col e label_col.

r2_score

double

Pontuação R ao quadrado entre prediction_col e label_col.

Colunas de métricas - imparcialidade e viés [6]

paridade_preditiva

double

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

igualdade_preditiva

double

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

oportunidades iguais

double

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

paridade_estatística

double

Mede se os dois grupos têm a mesma taxa de aceitação. 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_de_confusão

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

Precisão

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

Recall

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 séries temporais ou perfis de inferência, o monitor faz uma retrospectiva de 30 dias a partir do momento em que foi 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; nesse caso, a semana ou o mês inteiro não são incluídos no cálculo. Esse problema afeta somente a primeira janela.

[3] A versão mostrada nesta coluna é a versão que foi usada para calcular as estatísticas na linha e pode não ser a versão atual do monitor. Sempre que o senhor acessar refresh as métricas, o monitor tentará recomputar 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 pelo cliente API e Python.

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

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

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

Esquema da tabela de métricas de deriva

A tabela a seguir mostra o esquema da tabela de métricas de desvio. A tabela de deriva só é gerada 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

Agrupando colunas

janela

struct<start: timestamp, end: timestamp>

Janela de tempo.

window_cmp

struct<start: timestamp, end: timestamp>

Janela de comparação para drift_type CONSECUTIVE.

tipo_de_deriva

string

LINHA DE BASE ou CONSECUTIVA. Se as métricas de desvio são comparadas com a janela de tempo anterior ou com a tabela de linha de base.

Granularidade

string

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

model_id_col

string

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

chave de fatia

string

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

valor_da_fatia

string

Valor da expressão de fatiamento.

nome_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.

count_delta

double

Diferença em count.

avg_delta

double

Diferença em avg.

percentual_null_delta

double

Diferença em percent_null.

por cento_zeros_delta

double

Diferença em percent_zeros.

percentagem_distinto_delta

double

Diferença em percent_distinct.

colunas_null_delta

struct<added: int, missing: int>

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

chi_squared_test

struct<statistic: double, pvalue: double>

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

ks_test

struct<statistic: double, pvalue: double>

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

tv_distance

double

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

l_infinity_distance

double

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

js_distance

double

Distância Jensen-Shannon para desvio na distribuição. Calculado somente para colunas categóricas.

distância_de_água

double

Desvio entre duas distribuições numéricas usando as métricas de distância de Wasserstein.

índice_estabilidade_população

double

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

[7] Para séries temporais ou perfis de inferência, o monitor faz uma retrospectiva de 30 dias a partir do momento em que foi 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; nesse caso, a semana ou o mês inteiro não são incluídos no cálculo. Esse problema afeta somente 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. Sempre que o senhor acessar refresh as métricas, o monitor tentará recomputar 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 pelo cliente API e Python.

[9] A saída do índice de estabilidade da população é um valor numérico que representa a diferença entre 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 significativa na população.