監視計量資料表
此頁面描述 Databricks Lakehouse 監視所建立的計量數據表。 如需監視器所建立之儀錶板的相關信息,請參閱 使用產生的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
進行分析,系統會針對每個模型標識元計算計量。如需詳細資訊,請參閱 所產生數據表的數據行架構。
模型精確度監視的其他統計數據(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
分析) - 記錄類型 - 輸入資料表或基準數據表
- 配量索引鍵和值
- 模型識別碼 (
InferenceLog
僅分析)
針對漂移計量,會使用下列額外的分組數據行:
- 比較時間範圍
- 漂移型態 (與上一個視窗的比較或比較基準表)
計量數據表的架構如下所示,也會顯示在 Databricks Lakehouse 監視 API 參考檔中。
配置檔計量數據表架構
下表顯示配置檔計量數據表的架構。 如果計量不適用於數據列,則對應的單元格為 null。
資料行名稱 | 類型 | 描述 |
---|---|---|
群組數據行 | ||
window | 結構。 請參閱下方的 [1]。 | 時間範圍。 |
資料粒度 | 字串 | 窗口持續時間,依 granularities 參數設定。 [2] |
model_id_col | 字串 | 選擇性。 InferenceLog 僅用於分析類型。 |
log_type | 字串 | 用來計算計量的數據表。 BASELINE 或 INPUT。 |
slice_key | 字串 | 配量表達式。 默認值為 NULL,也就是所有數據。 |
slice_value | 字串 | 配量表達式的值。 |
column_name | 字串 | 主數據表中的數據行名稱。 :table 是套用至整個數據表之計量的特殊名稱,例如模型精確度。 |
data_type | 字串 | 的 column_name Spark 資料類型。 |
logging_table_commit_version | int | 忽略。 |
monitor_version | bigint | 用來計算數據列中計量的監視組態版本。 如需詳細資訊,請參閱下方的 [3]。 |
計量數據行 - 摘要統計數據 | ||
計數 | bigint | 非 Null 值的數目。 |
num_nulls | bigint | 中的 column_name Null 值數目。 |
avg | double | 數據行的算術平均值,將 Null 分類。 |
quantiles | 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 值的數據行清單。 |
中間值 | 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 | 和label_col 之間的prediction_col 平均平方誤差。 |
root_mean_squared_error | double | 和label_col 之間的prediction_col 均方根誤差。 |
mean_average_error | double | 和label_col 之間的prediction_col 平均誤差。 |
mean_absolute_percentage_error | double | 與label_col 之間的prediction_col 平均絕對百分比誤差。 |
r2_score | double | 和label_col 之間的 prediction_col R 平方分數。 |
計量數據行 - 公平性和偏差 [6] | ||
predictive_parity | double | 測量這兩個群組是否在所有預測類別中具有相等的精確度。 label_col 是必要的。 |
predictive_equality | double | 測量這兩個群組是否在所有預測類別中具有相等誤判率。 label_col 是必要的。 |
equal_opportunity | double | 測量這兩個群組是否在所有預測類別中具有相同的召回率。 label_col 是必要的。 |
statistical_parity | double | 測量兩個群組是否具有相等的接受率。 這裡的接受率定義為在所有預測類別中預測為特定類別的經驗機率。 |
[1] 、 precision
recall
和 f1_score
的結構格式confusion_matrix
:
資料行名稱 | 類型 |
---|---|
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> |
CONSECUTIVE drift_type的比較視窗。 |
drift_type | 字串 | 比較基準或連續。 漂移計量與上一個時間範圍或基準數據表比較。 |
資料粒度 | 字串 | 窗口持續時間,依 granularities 參數設定。 [7] |
model_id_col | 字串 | 選擇性。 InferenceLog 僅用於分析類型。 |
slice_key | 字串 | 配量表達式。 默認值為 NULL,也就是所有數據。 |
slice_value | 字串 | 配量表達式的值。 |
column_name | 字串 | 主數據表中的數據行名稱。 :table 是套用至整個數據表之計量的特殊名稱,例如模型精確度。 |
data_type | 字串 | 的 column_name Spark 資料類型。 |
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 | 詹森–香農分佈漂移距離。 僅針對類別數據行計算。 |
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 表示大量母體變化。