Compartilhar via


Tabelas de métricas de perfilagem de dados

Esta página descreve as tabelas de métricas criadas pela criação de perfil de dados. Para obter informações sobre o painel criado por um perfil, consulte o painel de criação de perfil de dados.

Quando um perfil é executado 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 descompasso.

  • A tabela de métricas de perfil contém estatísticas de resumo para cada coluna e para cada combinação de janela de tempo, fatia e colunas de agrupamento. Para a 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 descompasso contém estatísticas que rastreiam as alterações na distribuição de uma métrica. As tabelas de descompasso podem ser usadas para visualizar ou alertar sobre alterações nos dados em vez de valores específicos. Os seguintes tipos de descompasso são calculados:
    • O descompasso consecutivo compara uma janela com a janela de tempo anterior. O descompasso consecutivo só é calculado se existir uma janela de tempo consecutiva após a agregação de acordo com as granularidades especificadas.
    • O descompasso da linha de base compara uma janela com a distribuição da linha de base determinada pela tabela da linha de base. O descompasso da linha de base só é calculado se uma tabela de linha de base for fornecida.

Onde as tabelas métricas estão localizadas

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

  • {output_schema} é o catálogo e o esquema especificados por output_schema_name.
  • {table_name} é o nome da tabela que está sendo perfilada.

Como as estatísticas de perfil são computadas

Cada estatística e métrica nas tabelas métricas é calculada para um intervalo de tempo especificado (chamado de "janela"). Para a análise Snapshot, a janela de tempo é um único ponto no tempo correspondente ao tempo em que a métrica foi atualizada. Para análise TimeSeries e InferenceLog, a janela de tempo é baseada nas granularidades especificadas em create_monitor e nos valores no timestamp_col especificado no argumento profile_type.

As métricas são sempre calculadas para toda a tabela. Além disso, se você fornecer uma expressão de fatiamento, as métricas serão calculadas 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 de coluna slice_key e slice_value. Neste exemplo, uma chave 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 chave de fatia.

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

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

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

  • A qualidade do modelo é calculada se ambos os 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, estatísticas de imparcialidade e viés são calculadas para fatias que têm um valor booleano.

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

Você pode consultar as tabelas de métricas diretamente. O exemplo a seguir é baseado em 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 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 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 tempo
  • granularidade (somente análise TimeSeries e InferenceLog)
  • Tipo de log - tabela de entrada ou tabela de linha de base
  • chave e valor de fatia
  • ID do modelo (somente análise InferenceLog)

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

  • janela de tempo de comparação
  • Tipo de descompasso (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 criação de perfil de dados.

Esquema da tabela de métricas de perfil

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

Nome da coluna Tipo Descrição
Agrupando colunas
janela Estrutura. Ver [1] abaixo. Janela de tempo.
granularidade cadeia Duração da janela, definida pelo parâmetro granularities. [2]
model_id_col cadeia Opcional. Utilizado apenas para o tipo de análise InferenceLog.
log_type cadeia Tabela usada para calcular métricas. LINHA DE BASE OU ENTRADA.
slice_key cadeia Expressão de fatia. NULL por padrão, que são todos os dados.
slice_value cadeia Valor da expressão de fatiamento.
nome_da_coluna cadeia 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 cadeia Tipo de dados do Spark de column_name.
logging_table_commit_version int Ignorar.
monitor_version bigint Versão da configuração de perfil usada para calcular as métricas na linha. Veja [3] abaixo para obter detalhes.
Colunas de métricas - estatísticas de resumo
contagem bigint Número de valores não nulos.
num_nulls bigint Número de valores nulos em column_name.
avg duplo Média aritmética da coluna, ignorando nulos.
quantis array<double> Matriz de 1000 quantis. Veja [4] abaixo.
distinct_count bigint Número aproximado de valores distintos em column_name. Isso usa a approx_count_distinct função, portanto, o resultado pode não ser exato.
min duplo Valor mínimo em column_name.
max duplo Valor máximo em column_name.
desvpad duplo Desvio padrão de column_name.
num_zeros bigint Número de zeros em column_name.
num_nan bigint Número de valores de NaN em column_name.
min_size duplo Tamanho mínimo de matrizes ou estruturas em column_name.
max_size duplo Tamanho máximo de matrizes ou estruturas em column_name.
avg_size duplo Tamanho médio de matrizes ou estruturas em column_name.
min_len duplo Comprimento mínimo da cadeia de caracteres e valores binários em column_name.
comprimento máximo duplo Comprimento máximo da cadeia de caracteres e valores binários em column_name.
avg_len duplo Comprimento médio da cadeia de caracteres e valores binários em column_name.
itens frequentes Estrutura. Ver [1] abaixo. 100 principais itens que ocorrem com mais frequência.
colunas não nulas array<string> Lista de colunas com pelo menos um valor não nulo.
mediana duplo Valor mediano de column_name.
percent_null duplo Porcentagem de valores nulos em column_name.
percent_zeros duplo Porcentagem de valores que são zero em column_name.
percent_distinct duplo Porcentagem de valores que são distintos em column_name.
Colunas de métricas — Precisão do modelo de classificação [5]
accuracy_score duplo Precisão do modelo, calculada como:
Equação de precisão.
Valores nulos são ignorados.
log_loss duplo Perda de log para problemas de classificação, calculada como:
Equação de perda de log.
Requer prediction_proba_col. Previsões ou rótulos que são NULL são ignorados.
roc_auc_score Estrutura. Ver [1] abaixo. Pontuação ROC AUC para classificação binária e multiclasse. Requer prediction_proba_col. Retorna pontuações ponderadas e médias macro em um cenário um-contra-um. Rótulos ou previsões que são "NULL" são ignorados.
confusion_matrix Estrutura. Ver [1] abaixo.
precisão Estrutura. Ver [1] abaixo.
recall Estrutura. Ver [1] abaixo.
f1_score Estrutura. Ver [1] abaixo.
Colunas de métricas — Precisão do modelo de regressão [5]
mean_squared_error duplo Erro quadrático médio entre prediction_col e label_col.
root_mean_squared_error duplo Raiz do erro quadrático médio entre prediction_col e label_col.
mean_average_error duplo Média do erro médio entre prediction_col e label_col.
erro percentual absoluto médio duplo Erro percentual absoluto médio entre prediction_col e label_col.
r2_score duplo Pontuação R-quadrado entre prediction_col e label_col.
Colunas de métricas — Imparcialidade e desvio [6]
paridade preditiva duplo Mede se os dois grupos têm precisão igual em todas as classes previstas. label_col é obrigatório.
igualdade preditiva duplo Mede se os dois grupos têm taxa igual de falsos positivos em todas as classes previstas. label_col é obrigatório.
Igualdade de oportunidades duplo Mede se os dois grupos têm memória igual em todas as classes previstas. label_col é obrigatório.
paridade estatística duplo Mede se os dois grupos têm igual 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 do struct para confusion_matrix, precision, recall, f1_score e roc_auc_score.

Nome da coluna Tipo
janela struct<start: timestamp, end: timestamp>
itens frequentes array<struct<item: string, count: bigint>>
confusion_matrix 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>
roc_auc_score struct<one_vs_one: struct<weighted: double, macro: double>>

[2] Para perfis de série temporal ou inferência, o perfil olha para trás 30 dias a partir do momento em que o perfil é 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 serão incluídos no cálculo. Esse problema afeta apenas 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 perfil. Sempre que você atualiza as métricas, o perfil tenta recompute métricas calculadas anteriormente usando a configuração de perfil atual. A versão do perfil atual aparece nas informações de perfil retornadas pela API e pelo Cliente Python.

[4] Código de exemplo 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 perfil tiver o tipo de análise InferenceLog e ambos label_col e prediction_col forem fornecidos.

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

Esquema de tabela de métricas de descompasso

A tabela a seguir mostra o esquema da tabela de métricas de descompasso. A tabela de descompasso só será 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. Quando uma métrica não é aplicável a uma linha, a célula correspondente é nula.

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_desvio cadeia LINHA BASE ou CONSECUTIVA. Se as métricas de descompasso se comparam à janela de tempo anterior ou à tabela de linha de base.
granularidade cadeia Duração da janela, definida pelo parâmetro granularities. [7]
model_id_col cadeia Opcional. Utilizado apenas para o tipo de análise InferenceLog.
slice_key cadeia Expressão de fatia. NULL por padrão, que são todos os dados.
slice_value cadeia Valor da expressão de fatiamento.
nome_da_coluna cadeia 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 cadeia Tipo de dados do Spark de column_name.
monitor_version bigint Versão da configuração do monitor usada para calcular as métricas na linha. Veja [8] abaixo para obter detalhes.
Colunas de métricas - descompasso As diferenças são calculadas como janela atual - janela de comparação.
count_delta duplo Diferença de count.
avg_delta duplo Diferença de avg.
percent_null_delta duplo Diferença de percent_null.
percent_zeros_delta duplo Diferença de percent_zeros.
percent_distinct_delta duplo Diferença de 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.
chi_squared_test struct<statistic: double, pvalue: double> Teste chi-quadrado para descompasso na distribuição. Calculado apenas para colunas categóricas. null para colunas numéricas.
ks_test struct<statistic: double, pvalue: double> Teste de KS para descompasso na distribuição. Calculado apenas para colunas numéricas. null para colunas categóricas.
distância_da_tv duplo Distância de variação total para descompasso na distribuição. Calculado apenas para colunas categóricas. null para colunas numéricas.
l_infinity_distance duplo Distância L-infinito para descompasso na distribuição. Calculado apenas para colunas categóricas. null para colunas numéricas.
js_distance duplo Distância Jensen-Shannon para descompasso na distribuição. Calculado apenas para colunas categóricas. null para colunas numéricas.
distância de Wasserstein duplo Descompasso entre duas distribuições numéricas usando a métrica de distância de Wasserstein. Calculado apenas para colunas numéricas. null para colunas categóricas.
índice de estabilidade populacional duplo Métrica para comparar o descompasso entre duas distribuições numéricas usando a métrica índice de estabilidade populacional. Veja [9] abaixo para obter detalhes. Calculado apenas para colunas numéricas. null para colunas categóricas.

[7] Para perfis de série temporal ou inferência, o perfil olha para trás 30 dias a partir do momento em que o perfil é 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 serão incluídos no cálculo. Esse problema afeta apenas a primeira janela.

[8] 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 perfil. Sempre que você atualiza as métricas, o perfil tenta recompute métricas calculadas anteriormente usando a configuração de perfil atual. A versão do perfil atual aparece nas informações de perfil retornadas pela API e pelo Cliente Python.

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