分享方式:


監視計量數據表

重要

這項功能處於公開預覽狀態

此頁面描述 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_typetimestamp_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 進行分析,系統會針對每個模型標識元計算計量。如需詳細資訊,請參閱 所產生數據表的數據行架構。

模型精確度監視的其他統計數據(InferenceLog 僅分析)

系統會計算其他統計數據以供 InferenceLog 分析。

查詢分析和漂移計量數據表

您可以直接查詢計量數據表。 下列範例是以分析為基礎 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。

資料行名稱 類型 描述
群組數據行
時間範圍 結構。 請參閱下方的 [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 column_nameSpark 資料類型。
logging_table_commit_version int 忽略。
monitor_version bigint 用來計算數據列中計量的監視組態版本。 如需詳細資訊,請參閱下方的 [3]。
計量數據行 - 摘要統計數據
計數 bigint 非 Null 值的數目。
num_nulls bigint 中的 column_nameNull 值數目。
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_nameNaN 值數目。
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_nameNull 值的百分比。
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] 、 precisionrecallf1_score的結構格式confusion_matrix

資料行名稱 類型
時間範圍 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_typeclassification時才會顯示。

漂移計量數據表架構

下表顯示漂移計量數據表的架構。 只有在提供基準數據表,或根據指定的數據粒度匯總之後存在連續時間範圍時,才會產生漂移數據表。

資料行名稱 類型 描述
群組數據行
時間範圍 struct<start: timestamp, end: timestamp> 時間範圍。
window_cmp struct<start: timestamp, end: timestamp> CONSECUTIVEdrift_type的比較視窗。
drift_type string 比較基準或連續。 漂移計量與上一個時間範圍或基準數據表比較。
粒度 string 窗口持續時間,依 granularities 參數設定。 [7]
model_id_col string 選擇性。 InferenceLog僅用於分析類型。
slice_key string 配量表達式。 默認值為 NULL,也就是所有數據。
slice_value string 配量表達式的值。
column_name string 主數據表中的數據行名稱。 :table 是套用至整個數據表之計量的特殊名稱,例如模型精確度。
data_type string column_nameSpark 資料類型。
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 表示大量母體變化。