本页介绍数据分析创建的指标表。 有关配置文件创建的仪表板的信息,请参阅 数据分析仪表板。
当配置文件在 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 中指定的粒度和 timestamp_col 参数中指定的 profile_type 中的值。
始终为整个表计算指标。 此外,如果提供切片表达式,则会为由表达式的值定义的每个数据切片计算指标。
例如:
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分析)
对于偏移指标,使用以下附加分组列:
- 比较时间窗口
- 偏移类型(与上一个窗口比较或与基表比较)
指标表的架构如下所示,数据 分析 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_col 和 label_col 之间的均方误差。 |
| root_mean_squared_error | 翻倍 |
prediction_col 和 label_col 之间的均方根误差。 |
| mean_average_error | 翻倍 |
prediction_col 和 label_col 之间的平均误差。 |
| 平均绝对百分比误差 | 翻倍 |
prediction_col 和 label_col 之间的平均绝对百分比误差。 |
| r2_score | 翻倍 |
prediction_col 和 label_col 之间的 R 平方分数。 |
| 指标列 - 公平性和偏差 [6] | ||
| predictive_parity | 翻倍 | 衡量两个组在所有预测类中是否具有相同的精准率。
label_col 必需。 |
| predictive_equality | 翻倍 | 衡量两个组在所有预测类中的假正率是否相等。
label_col 必需。 |
| equal_opportunity | 翻倍 | 衡量两个组在所有预测类中的召回率是否相等。
label_col 必需。 |
| statistical_parity | 翻倍 | 衡量两个组是否具有相等的接受率。 此处的接受率定义为被预测为所有预测类中某个类的经验概率。 |
[1] confusion_matrix、precision、recall、f1_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_col 和 prediction_col 时才显示。
[6] 仅当配置文件具有 InferenceLog 分析类型且 problem_type 为 classification时显示。
偏移指标表架构
下表显示了偏移指标表的架构。 仅当提供了基表时,或者根据指定的粒度在聚合后存在连续的时间窗口时,才会生成偏移表。 如果某个指标不适用于某一行,则对应的单元格为 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 表示显著的人口变化。