数据剖析度量表

本页介绍数据分析创建的指标表。 有关配置文件创建的仪表板的信息,请参阅 数据分析仪表板

当配置文件在 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 中指定的粒度和 timestamp_col 参数中指定的 profile_type 中的值。

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

例如:

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 分析)

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

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

指标表的架构如下所示,数据 分析 API 参考文档中也显示了这些架构。

配置文件指标表架构

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

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

[1] confusion_matrixprecisionrecallf1_score 的结构格式:

列名称 类型
窗口 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时显示。

偏移指标表架构

下表显示了偏移指标表的架构。 仅当提供了基表时,或者根据指定的粒度在聚合后存在连续的时间窗口时,才会生成偏移表。 如果某个指标不适用于某一行,则对应的单元格为 null。

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

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

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

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