监视器指标表

本页介绍 Databricks Lakehouse Monitoring 创建的指标表。 有关监视器创建的仪表板的信息,请参阅使用生成的 SQL 仪表板

当监视器在 Databricks 表上运行时,它会创建或更新两个指标表:配置文件指标表和偏移指标表。

  • 配置文件指标表包含每个列以及时间窗口、切片和分组列的每个组合的摘要统计信息。 对于 InferenceLog 分析,分析表还包含模型准确度指标。
  • 偏移指标表包含跟踪指标分布更改的统计信息。 偏移表可用于可视化数据(而不是特定值)中的更改或就更改发出警报。 计算以下类型的偏移:
    • 连续偏移将某个窗口与上一个时间窗口进行比较。 仅当根据指定的粒度在聚合后存在连续时间窗口时,才会计算连续偏移。
    • 基线偏移将某个窗口与基表确定的基线分布进行比较。 仅当提供了基表时,才会计算基线偏移。

指标表所在的位置

监视器指标表保存到 {output_schema}.{table_name}_profile_metrics{output_schema}.{table_name}_drift_metrics,其中:

  • {output_schema} 是由 output_schema_name 指定的目录和架构。
  • {table_name} 是正在被监视的表的名称。

如何计算监视器统计信息

指标表中的每个统计信息和指标都按指定的时间间隔计算(称为“窗口”)。 对于 Snapshot 分析,时间窗口是与指标刷新时间对应的单个时间点。 对于 TimeSeriesInferenceLog 分析,时间窗口基于 create_monitor 中指定的粒度和 profile_type 参数中指定的 timestamp_col 中的值。

始终为整个表计算指标。 此外,如果提供切片表达式,则会为由表达式的值定义的每个数据切片计算指标。

例如:

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

生成以下切片:为 col_2 > 10 生成一个,为 col_2 <= 10 生成一个,为 col1 中的每个唯一值生成一个。

在指标表中,切片由列名 slice_keyslice_value 标识。 在此示例中,一个切片键为“col_2 > 10”,相应的值为“true”和“false”。 整个表等效于 slice_key = NULL 和 slice_value = NULL。 切片由单个切片键定义。

为时间窗口以及切片键和值定义的所有可能组计算指标。 此外,对于 InferenceLog 分析,将为每个模型 ID 计算指标。有关详细信息,请参阅生成的表的列架构

模型准确度监视的其他统计信息(仅 InferenceLog 分析)

InferenceLog 分析计算其他统计信息。

  • 如果同时提供 label_colprediction_col,则会计算模型质量。
  • 切片是根据 model_id_col 的非重复值自动创建的。
  • 对于分类模型,将针对具有布尔值的切片计算公平性和偏差统计信息

查询分析和偏移指标表

可以直接查询指标表。 下面的示例基于 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

生成的表的列架构

对于主表中的每个列,分组列的每个组合在指标表中都有一行。 与每行关联的列显示在列 column_name 中。

对于基于多个列的指标(例如模型准确度指标),column_name 设为 :table

对于配置文件指标,使用以下分组列:

  • 时间窗口
  • 粒度(仅 TimeSeriesInferenceLog 分析)
  • 日志类型 - 输入表或基表
  • 切片键和值
  • 模型 ID(仅 InferenceLog 分析)

对于偏移指标,使用以下附加分组列:

  • 比较时间窗口
  • 偏移类型(与上一个窗口比较或与基表比较)

指标表的架构如下所示,它也显示在 Databricks Lakehouse Monitoring API 参考文档中。

配置文件指标表架构

下表显示了配置文件指标表的架构。 如果某个指标不适用于某一行,则对应的单元格为 null。

列名称 类型 描述
分组列
window 结构。 请参阅下面的 [1]。 时间窗口。
粒度 string 窗口持续时间,由 granularities 参数设置。 [2]
model_id_col string 可选。 仅用于 InferenceLog 分析类型。
log_type string 用于计算指标的表。 BASELINE 或 INPUT。
slice_key string 切片表达式。 默认为 NULL,即所有数据。
slice_value string 切片表达式的值。
column_name string 主表中的列名。 :table 是应用于整个表的指标的特殊名称,例如模型准确度。
data_type string Spark 数据类型 column_name
logging_table_commit_version int 忽略。
monitor_version bigint 用于计算行中指标的监视器配置版本。 有关详细信息,请参阅下面的 [3]。
指标列 - 摘要统计信息
count bigint 非 null 值的数目。
num_nulls bigint column_name 中 null 值的数目。
平均值 double 列的算术平均值,忽略 null。
分位数 array<double> 1000 分位数的数组。 请参阅下面的 [4]。
distinct_count bigint column_name 中非重复值的数目。
分钟 Double column_name 中的最小值。
max double column_name 中的最大值。
stddev double column_name 的标准偏差。
num_zeros bigint column_name 中零的数目。
num_nan bigint column_name 中 NaN 值的数目。
min_size double column_name 中数组或结构的最小大小。
max_size double column_name 中数组或结构的最大大小。
avg_size double column_name 中数组或结构的平均大小。
min_len double column_name 中字符串和二进制值的最小长度。
max_len Double column_name 中字符串和二进制值的最大长度。
avg_len Double column_name 中字符串和二进制值的平均长度。
frequent_items 结构。 请参阅下面的 [1]。 前 100 个最常出现的项。
non_null_columns array<string> 包含至少一个非 null 值的列的列表。
中值 (median) double column_name 的中值。
percent_null Double column_name 中 null 值的百分比。
percent_zeros Double column_name 中为零的值的百分比。
percent_distinct double column_name 中非重复值的百分比。
指标列 - 分类模型准确度 [5]
accuracy_score Double 模型的准确度,计算方法为(正确预测数 / 预测总数),忽略 null 值。
confusion_matrix 结构。 请参阅下面的 [1]。
精度 结构。 请参阅下面的 [1]。
召回率 结构。 请参阅下面的 [1]。
f1_score 结构。 请参阅下面的 [1]。
指标列 - 回归模型准确度 [5]
mean_squared_error Double prediction_collabel_col 之间的均方误差。
root_mean_squared_error Double prediction_collabel_col 之间的均方根误差。
mean_average_error Double prediction_collabel_col 之间的平均误差。
mean_absolute_percentage_error Double prediction_collabel_col 之间的平均绝对百分比误差。
r2_score Double prediction_collabel_col 之间的 R 平方分数。
指标列 - 公平性和偏差 [6]
predictive_parity Double 衡量两个组在所有预测类中是否具有相同的精准率。 需要 label_col
predictive_equality Double 衡量两个组在所有预测类中的假正率是否相等。 需要 label_col
equal_opportunity Double 衡量两个组在所有预测类中的召回率是否相等。 需要 label_col
statistical_parity double 衡量两个组是否具有相等的接受率。 此处的接受率定义为被预测为所有预测类中某个类的经验概率。

[1] confusion_matrixprecisionrecallf1_score 的结构格式:

列名称 类型
window struct<start: timestamp, end: timestamp>
frequent_items array<struct<item: string, count: bigint>>
confusion_matrix struct<prediction: string, label: string, count: bigint>
精度 struct<one_vs_all: map<string,double>, macro: double, weighted: double>
召回率 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] 对于时序或推理配置文件,监视器从监视器创建时起回看 30 天。 由于此截止,第一个分析可能包含部分窗口。 例如,30 天的期限可能在一周或一个月的中间,在这种情况下,整个一周或一个月都不包含在计算内。 此问题只会影响第一个窗口。

[3] 此列中显示的版本是用于计算行中统计信息的版本,可能不是监视器的当前版本。 每次刷新指标时,监视器都会尝试使用当前监视器配置重新计算以前计算的指标。 当前监视器版本显示在 API 和 Python 客户端返回的监视器信息中。

[4] 用于检索第 50 百分位的示例代码:SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ...SELECT quantiles[500] ...

[5] 仅当监视器具有 InferenceLog 分析类型且同时提供 label_colprediction_col 时才显示。

[6] 仅当监视器具有 InferenceLog 分析类型且 problem_typeclassification 时才显示。

偏移指标表架构

下表显示了偏移指标表的架构。 仅当提供了基表时,或者根据指定的粒度在聚合后存在连续的时间窗口时,才会生成偏移表。

列名称 类型 描述
分组列
window struct<start: timestamp, end: timestamp> 时间窗口。
window_cmp struct<start: timestamp, end: timestamp> drift_type CONSECUTIVE 的比较窗口。
drift_type string BASELINE 或 CONSECUTIVE。 偏移指标是与上一个时间窗口还是基表进行比较。
粒度 string 窗口持续时间,由 granularities 参数设置。 [7]
model_id_col string 可选。 仅用于 InferenceLog 分析类型。
slice_key string 切片表达式。 默认为 NULL,即所有数据。
slice_value string 切片表达式的值。
column_name string 主表中的列名。 :table 是应用于整个表的指标的特殊名称,例如模型准确度。
data_type string Spark 数据类型 column_name
monitor_version bigint 用于计算行中指标的监视器配置版本。 有关详细信息,请参阅下面的 [8]。
指标列 - 偏移 差异计算为当前窗口 - 比较窗口。
count_delta Double count 的差异。
avg_delta Double avg 的差异。
percent_null_delta Double percent_null 的差异。
percent_zeros_delta double percent_zeros 的差异。
percent_distinct_delta Double percent_distinct 的差异。
non_null_columns_delta struct<added: int, missing: int> 非 null 值有任何增加或减少的列数。
chi_squared_test struct<statistic: double, pvalue: double> 分布偏移的卡方检验。
ks_test struct<statistic: double, pvalue: double> 分布偏移的 KS 检验。 仅对数字列计算。
tv_distance Double 分布偏移的总变差距离。
l_infinity_distance Double 分布偏移的 L 无穷距离。
js_distance Double 分布偏移的 Jensen–Shannon 距离。 仅对分类列计算。
wasserstein_distance Double 使用 Wasserstein 距离指标计算的两个数值分布之间的偏移。
population_stability_index double 比较使用人口稳定性指数计算的两个数值分布之间的偏移的指标。 有关详细信息,请参阅下面的 [9]。

[7] 对于时序或推理配置文件,监视器从监视器创建时起回看 30 天。 由于此截止,第一个分析可能包含部分窗口。 例如,30 天的期限可能在一周或一个月的中间,在这种情况下,整个一周或一个月都不包含在计算内。 此问题只会影响第一个窗口。

[8] 此列中显示的版本是用于计算行中统计信息的版本,可能不是监视器的当前版本。 每次刷新指标时,监视器都会尝试使用当前监视器配置重新计算以前计算的指标。 当前监视器版本显示在 API 和 Python 客户端返回的监视器信息中。

[9] 人口稳定性指数的输出是一个数值,表示两个分布的不同程度。 范围为 [0, inf)。 PSI < 0.1 表示没有显著的人口变化。 PSI < 0.2 表示中等人口变化。 PSI >= 0.2 表示显著的人口变化。