次の方法で共有


メトリック テーブルを監視する

このページでは、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_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

生成されたテーブルの列スキーマ

メトリック テーブルには、プライマリ テーブルの列ごとに、グループ化列の組み合わせごとに 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_collabel_col の間の平均二乗誤差。
root_mean_squared_error 倍精度浮動小数点 prediction_collabel_col の間の二乗平均平方根誤差。
mean_average_error 倍精度浮動小数点 prediction_collabel_col の間の平均誤差。
mean_absolute_percentage_error 倍精度浮動小数点 prediction_collabel_col の間の平均絶対パーセント誤差。
r2_score 倍精度浮動小数点 prediction_collabel_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_colprediction_col の両方が指定されている場合にのみ表示されます。

[6] モニターの分析タイプが InferenceLog で、problem_typeclassification の場合にのみ表示されます。

ドリフト メトリック テーブルのスキーマ

次の表は、ドリフト メトリック テーブルのスキーマを示しています。 ドリフト テーブルは、ベースライン テーブルが提供されている場合、または指定された粒度に従って集計後に連続した時間ウィンドウが存在する場合にのみ生成されます。

列名 種類 説明
列のグループ化
ウィンドウ 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 は、母集団の有意な変化を示します。