监视器指标表
本页介绍 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
分析,时间窗口是与指标刷新时间对应的单个时间点。 对于 TimeSeries
和 InferenceLog
分析,时间窗口基于 create_monitor
中指定的粒度和 profile_type
参数中指定的 timestamp_col
中的值。
始终为整个表计算指标。 此外,如果提供切片表达式,则会为由表达式的值定义的每个数据切片计算指标。
例如:
slicing_exprs=["col_1", "col_2 > 10"]
生成以下切片:为 col_2 > 10
生成一个,为 col_2 <= 10
生成一个,为 col1
中的每个唯一值生成一个。
在指标表中,切片由列名 slice_key
和 slice_value
标识。 在此示例中,一个切片键为“col_2 > 10”,相应的值为“true”和“false”。 整个表等效于 slice_key
= NULL 和 slice_value
= NULL。 切片由单个切片键定义。
为时间窗口以及切片键和值定义的所有可能组计算指标。 此外,对于 InferenceLog
分析,将为每个模型 ID 计算指标。有关详细信息,请参阅生成的表的列架构。
模型准确度监视的其他统计信息(仅 InferenceLog
分析)
为 InferenceLog
分析计算其他统计信息。
- 如果同时提供
label_col
和prediction_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
。
对于配置文件指标,使用以下分组列:
- 时间窗口
- 粒度(仅
TimeSeries
和InferenceLog
分析) - 日志类型 - 输入表或基表
- 切片键和值
- 模型 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_col 和 label_col 之间的均方误差。 |
root_mean_squared_error | Double | prediction_col 和 label_col 之间的均方根误差。 |
mean_average_error | Double | prediction_col 和 label_col 之间的平均误差。 |
mean_absolute_percentage_error | Double | prediction_col 和 label_col 之间的平均绝对百分比误差。 |
r2_score | Double | prediction_col 和 label_col 之间的 R 平方分数。 |
指标列 - 公平性和偏差 [6] | ||
predictive_parity | Double | 衡量两个组在所有预测类中是否具有相同的精准率。 需要 label_col 。 |
predictive_equality | Double | 衡量两个组在所有预测类中的假正率是否相等。 需要 label_col 。 |
equal_opportunity | Double | 衡量两个组在所有预测类中的召回率是否相等。 需要 label_col 。 |
statistical_parity | double | 衡量两个组是否具有相等的接受率。 此处的接受率定义为被预测为所有预测类中某个类的经验概率。 |
[1] confusion_matrix
、precision
、recall
、f1_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_col
和 prediction_col
时才显示。
[6] 仅当监视器具有 InferenceLog
分析类型且 problem_type
为 classification
时才显示。
偏移指标表架构
下表显示了偏移指标表的架构。 仅当提供了基表时,或者根据指定的粒度在聚合后存在连续的时间窗口时,才会生成偏移表。
列名称 | 类型 | 描述 |
---|---|---|
分组列 | ||
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 表示显著的人口变化。