メトリック テーブルを監視する
このページでは、Databricks レイクハウス監視によって作成されるメトリック テーブルについて説明します。 モニターによって作成されるダッシュボードの詳細については、「生成された SQL ダッシュボードを使用する」を参照してください。
モニターが Databricks テーブルで実行されると、プロファイル メトリック テーブルとドリフト メトリック テーブルという 2 つのメトリック テーブルが作成または更新されます。
- プロファイル メトリック テーブルには、各列と、タイム ウィンドウ、スライス、およびグループ化列の組み合わせごとの概要統計が含まれています。
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
に 1 つ、col_2 <= 10
に 1 つ、col1
の一意の値ごとに 1 つ。
スライスは、メトリック テーブル内で列名 slice_key
および slice_value
によって識別されます。 この例では、1 つのスライス キーは “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
生成されたテーブルの列スキーマ
メトリック テーブルには、プライマリ テーブルの列ごとに、グループ化列の組み合わせごとに 1 つの行が含まれます。 各行に関連付けられた列は、列 column_name
に示されています。
モデル精度メトリクスなど、複数の列に基づくメトリクスの場合、column_name
は :table
に設定されます。
プロファイル メトリックの場合、次のグループ化列が使用されます。
- 時間枠
- 粒度 (
TimeSeries
およびInferenceLog
分析のみ) - ログの種類 - 入力テーブルまたはベースライン テーブル
- スライスのキーと値
- モデル ID (
InferenceLog
分析のみ)
ドリフト メトリックの場合、次の追加のグループ化列が使用されます。
- 比較時間枠
- ドリフト タイプ (前のウィンドウとの比較、またはベースライン テーブルとの比較)
メトリック テーブルのスキーマを以下に示します。また、Databricks Lakehouse Monitoring API リファレンス ドキュメントにも示されています。
プロファイル メトリック テーブルのスキーマ
次の表は、プロファイル メトリック テーブルのスキーマを示しています。 メトリックが行に適用できない場合、対応するセルは null になります。
列名 | 種類 | 説明 |
---|---|---|
列のグループ化 | ||
ウィンドウ | 構造体。 以下の [1] を参照してください。 | 時間枠。 |
粒度 (granularity) | string | ウィンドウ期間。 granularities パラメーターによって設定されます。 [2] |
model_id_col | string | 省略可能。 InferenceLog 分析タイプにのみ使用されます。 |
log_type | string | メトリックを計算するために使用されるテーブル。 ベースラインまたは入力。 |
slice_key | string | スライス式。 既定値の場合は NULL。これはすべてのデータです。 |
slice_value | string | スライス式の値。 |
column_name | string | プライマリ テーブルの列の名前。 :table は、モデル精度など、テーブル全体に適用されるメトリックの特別な名前です。 |
data_type | string | column_name の Spark データ型。 |
logging_table_commit_version | int | [無視]。 |
monitor_version | bigint | 行のメトリックを計算するために使用されるモニター構成のバージョン。 詳細については、以下の [3] を参照してください。 |
メトリック列 - 概要統計 | ||
count | bigint | null 以外の値の数。 |
num_nulls | bigint | column_name 内の null 値の数。 |
avg | 倍精度浮動小数点 | null を無視した、列の算術平均。 |
分位点 | array<double> |
1000 分位点の配列。 以下の [4] を参照してください。 |
distinct_count | bigint | column_name 内の個別の値の数。 |
最小 | 倍精度浮動小数点 | column_name の最小値。 |
max | 倍精度浮動小数点 | 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> |
少なくとも 1 つの非 null 値を持つ列のリスト。 |
中央値 (median) | 倍精度浮動小数点 | column_name の中央値。 |
percent_null | 倍精度浮動小数点 | column_name 内の null 値の割合。 |
percent_zeros | 倍精度浮動小数点 | column_name 内のゼロの値の割合。 |
percent_distinct | 倍精度浮動小数点 | column_name 内で異なる値の割合。 |
メトリック列 - 分類モデルの精度 [5] | ||
accuracy_score | 倍精度浮動小数点 | モデルの精度。null 値を無視して、(正しい予測の数 / 予測の総数) として計算されます。 |
confusion_matrix | 構造体。 以下の [1] を参照してください。 | |
有効桁数 (precision) | 構造体。 以下の [1] を参照してください。 | |
再現率 | 構造体。 以下の [1] を参照してください。 | |
f1_score | 構造体。 以下の [1] を参照してください。 | |
メトリック列 - 回帰モデルの精度 [5] | ||
mean_squared_error | 倍精度浮動小数点 | prediction_col と label_col の間の平均二乗誤差。 |
root_mean_squared_error | 倍精度浮動小数点 | prediction_col と label_col の間の二乗平均平方根誤差。 |
mean_average_error | 倍精度浮動小数点 | prediction_col と label_col の間の平均誤差。 |
mean_absolute_percentage_error | 倍精度浮動小数点 | prediction_col と label_col の間の平均絶対パーセント誤差。 |
r2_score | 倍精度浮動小数点 | prediction_col と label_col の間の R 二乗スコア。 |
メトリック列 - 公平性と偏り [6] | ||
predictive_parity | 倍精度浮動小数点 | 2 つのグループの精度がすべての予測クラスにわたって等しいかどうかを測定します。 label_col は必須です。 |
predictive_equality | 倍精度浮動小数点 | 2 つのグループの誤検出率がすべての予測クラスにわたって等しいかどうかを測定します。 label_col は必須です。 |
機会均等 | 倍精度浮動小数点 | 2 つのグループの再現率がすべての予測クラスにわたって等しいかどうかを測定します。 label_col は必須です。 |
statistical_parity | 倍精度浮動小数点 | 2 つのグループの受け入れ率が等しいかどうかを測定します。 ここでの受け入れ率は、予測されたすべてのクラスにわたって、特定のクラスとして予測される経験的確率として定義されます。 |
[1] confusion_matrix
, precision
, recall
, f1_score
の構造体の形式:
列名 | Type |
---|---|
ウィンドウ | 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
の場合にのみ表示されます。
ドリフト メトリック テーブルのスキーマ
次の表は、ドリフト メトリック テーブルのスキーマを示しています。 ドリフト テーブルは、ベースライン テーブルが提供されている場合、または指定された粒度に従って集計後に連続した時間ウィンドウが存在する場合にのみ生成されます。
列名 | 種類 | 説明 |
---|---|---|
列のグループ化 | ||
ウィンドウ | struct<start: timestamp, end: timestamp> |
時間枠。 |
window_cmp | struct<start: timestamp, end: timestamp> |
drift_type CONSECUTIVE の比較ウィンドウ。 |
drift_type | string | ベースラインまたは連続。 ドリフト メトリックが前の時間枠と比較されるか、ベースライン テーブルと比較されるか。 |
粒度 (granularity) | string | ウィンドウ期間。 granularities パラメーターによって設定されます。 [7] |
model_id_col | string | 省略可能。 InferenceLog 分析タイプにのみ使用されます。 |
slice_key | string | スライス式。 既定値の場合は NULL。これはすべてのデータです。 |
slice_value | string | スライス式の値。 |
column_name | string | プライマリ テーブルの列の名前。 :table は、モデル精度など、テーブル全体に適用されるメトリックの特別な名前です。 |
data_type | string | column_name の Spark データ型。 |
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> |
分布のドリフトのカイ二乗検定。 |
ks_test | struct<statistic: double, pvalue: double> |
分布のドリフトに対する KS 検定。 数値列のみについて計算されます。 |
tv_distance | 倍精度浮動小数点 | 分布のドリフトの合計変動距離。 |
l_infinity_distance | 倍精度浮動小数点 | 分布のドリフトに対する L 無限距離。 |
js_distance | 倍精度浮動小数点 | 分布のドリフトに関する Jensen–Shannon 距離。 カテゴリ列に対してのみ計算されます。 |
wasserstein_distance | 倍精度浮動小数点 | Wasserstein 距離メトリックを使用して、2 つの数値分布間のドリフトを計算します。 |
population_stability_index | 倍精度浮動小数点 | 母集団安定性指数メトリックを使用して 2 つの数値分布間のドリフトを比較するためのメトリック。 詳細については、以下の [9] を参照してください。 |
[7] 時系列または推論プロファイルの場合、モニターは、モニターが作成された時点から 30 日間さかのぼります。 このカットオフにより、最初の分析に部分的なウィンドウが含まれる場合があります。 たとえば、30 日の制限が週または月の途中にあたった場合、その週全体または月全体は計算に含まれません。 この問題は、最初のウィンドウにのみ影響します。
[8] この列に表示されるバージョンは、行の統計を計算するために使われたバージョンであり、モニターの現在のバージョンではない可能性があります。 メトリックを更新するたびに、モニターは現在のモニター構成を使用して以前に計算されたメトリックを再計算しようとします。 現在のモニターのバージョンは、API および Python クライアントによって返されるモニター情報に表示されます。
[9] 個体群安定性インデックスの出力は、2 つの分布の違いを表す数値です。 範囲は [0, inf) です。 PSI < 0.1 は、母集団に有意な変化がないことを意味します。 PSI < 0.2 は、中程度の母集団の変化を示します。 PSI >= 0.2 は、母集団の有意な変化を示します。