メインコンテンツまでスキップ

メトリクステーブルのモニター

このページでは、 Databricks レイクハウスモニタリングが作成するメトリクステーブルについて説明します。 モニターによって作成されたダッシュボードに関する情報については、「 生成された SQL ダッシュボードを使用する」を参照してください。

モニターが Databricks テーブルで実行されると、プロファイル メトリクス テーブルとドリフト メトリクス テーブルの 2 つのメトリクス テーブルが作成または更新されます。

  • プロファイル メトリクス テーブルには、各列と、時間枠、スライス、およびグループ化列の各組み合わせの要約統計量が含まれています。 InferenceLog解析の場合、解析テーブルにはモデルの精度メトリクスも含まれます。
  • drift メトリクス テーブルには、メトリクスの分布の変化を追跡する統計が含まれています。 ドリフト テーブルを使用すると、特定の値ではなく、データの変更を視覚化したり、アラートを出したりできます。 次のタイプのドリフトはコンピュートです。
    • 連続ドリフトは、ウィンドウを前のタイム ウィンドウと比較します。 連続ドリフトは、指定された粒度に従って集計後に連続する時間枠が存在する場合にのみ計算されます。
    • ベースラインドリフトは、ウィンドウをベースラインテーブルによって決定されたベースライン分布と比較します。 ベースラインドリフトは、ベースラインテーブルが指定されている場合にのみ計算されます。

メトリクステーブルが配置されている場所

モニター メトリクス テーブルは、 {output_schema}.{table_name}_profile_metrics{output_schema}.{table_name}_drift_metricsに保存されます。

  • {output_schema} は、 output_schema_nameで指定されたカタログとスキーマです。
  • {table_name} は、監視対象のテーブルの名前です。

モニター統計のコンピュート

メトリクス テーブル内の各統計とメトリクスは、指定された時間間隔 ("ウィンドウ" と呼ばれます) のコンピュートです。 Snapshot分析の場合、タイム ウィンドウは、メトリクスが更新された時刻に対応する 1 つの時点です。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_keyslice_valueで識別されます。 この例では、1 つのスライス キーは "col_2 > 10" で、対応する値は "true" と "false" になります。 テーブル全体は、 slice_key = NULL および slice_value = NULL に相当します。 スライスは、1 つのスライスキーで定義されます。

メトリクスは、タイム ウィンドウとスライス キーと値によって定義されるすべての可能なグループに対してコンピュートです。 また、 InferenceLog 分析については、モデルIDごとにメトリクスはコンピュートです。 詳細については、「 生成されたテーブルの列スキーマ」を参照してください。

モデル精度モニタリングの追加統計量 (InferenceLog 分析のみ)

InferenceLog分析では、追加の統計量が計算されます。

  • モデルの品質は、 label_colprediction_col の両方が提供されている場合に計算されます。
  • スライスは、 model_id_colの個別の値に基づいて自動的に作成されます。
  • 分類モデルの場合、 公平性とバイアスの統計 は、 Boolean 値を持つスライスに対して計算されます。

クエリ分析とドリフト メトリクス テーブル

メトリクステーブルを直接クエリできます。 次の例は、 InferenceLog 分析に基づいています。

SQL
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に設定されます。

profile メトリクスでは、次のグループ化列が使用されます。

  • 時間枠
  • 粒度 (TimeSeries および InferenceLog 分析のみ)
  • ログの種類 - 入力テーブルまたはベースラインテーブル
  • スライスのキーと値
  • モデル ID (InferenceLog 解析のみ)

ドリフト メトリクスでは、次の追加のグループ化列が使用されます。

  • 比較時間枠
  • ドリフト・タイプ(前のウィンドウとの比較またはベースライン・テーブルとの比較)

メトリクス テーブルのスキーマを以下に示します。また、 Databricks レイクハウスモニタリング API リファレンス ドキュメントにも示されています。

Profile メトリクス table schema

次の表は、プロファイルメトリクステーブルのスキーマを示しています。 メトリクスが行に適用できない場合、対応するセルは null です。

列名

タイプ

説明

列のグループ化

window

構造 体。 以下の[1]を参照してください。

時間ウィンドウ。

granularity

string

granularities パラメーターで設定されるウィンドウ期間。[2]

モデル_id_col

string

オプション。解析タイプにのみ使用されます InferenceLog

ログタイプ

string

メトリクスの計算に使用されるテーブル。 BASELINE または INPUT。

slice_key

string

スライス式。 デフォルトは NULL で、すべてのデータです。

slice_value

string

スライス式の値。

column_name

string

プライマリ テーブルの列の名前。 :table は、モデルの精度など、テーブル全体に適用されるメトリクスの特別な名前です。

data_type

string

Spark データ型は [ column_name] です。

ロギング_テーブル_コミット_バージョン

int

無視してください。

monitor_version

bigint

行内のメトリクスの計算に使用されるモニター構成のバージョン。 詳細は下記[3]をご覧ください。

メトリクス列 - 統計サマリー

count

bigint

null 以外の値の数。

num_nulls

bigint

column_name内の null 値の数 .

avg

double

列の算術平均、ヌルを含む。

quantiles

array<double>

1000 個の分位数の配列。 以下の[4]を参照してください。

distinct_count

bigint

column_nameの個別の値の数。

min

double

column_nameの最小値。

最大

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.

よく使うアイテム

構造 体。 以下の[1]を参照してください。

最も頻繁に発生する上位 100 のアイテム。

non_null_columns

array<string>

少なくとも 1 つの null 以外の値を持つ列のリスト。

median

double

column_name の中央値。

percent_null

double

column_name の NULL 値のパーセンテージ。

percent_zeros

double

column_nameで 0 である値の割合。

percent_distinct

double

column_nameで異なる値の割合。

メトリクス列 - 分類モデルの精度 [5]

accuracy_score

double

モデルの精度は、(正しい予測の数/予測の合計数)として計算され、null値を無視します。

confusion_matrix

構造 体。 以下の[1]を参照してください。

precision

構造 体。 以下の[1]を参照してください。

recall

構造 体。 以下の[1]を参照してください。

f1_score

構造 体。 以下の[1]を参照してください。

メトリクス列 - 回帰モデルの精度 [5]

mean_squared_error

double

prediction_collabel_colの平均二乗誤差。

root_mean_squared_error

double

prediction_collabel_colの間の二乗平均平方根誤差。

平均_エラー_平均値

double

prediction_collabel_col の間の平均誤差。

mean_absolute_percentage_error

double

prediction_collabel_colの間の平均絶対誤差率。

r2_score

double

prediction_collabel_col の間のR二乗スコア。

メトリクス列 - 公平性とバイアス [6]

predictive_parity

double

2 つのグループの精度がすべての予測クラスで等しいかどうかを測定します。 label_col が必要です。

predictive_equality

double

2 つのグループの偽陽性率が、予測されたすべてのクラスで等しいかどうかを測定します。 label_col が必要です。

equal_opportunity

double

2つのグループの再現率がすべての予測クラスで等しいかどうかを測定します。 label_col が必要です。

statistical_parity

double

2つのグループの合格率が等しいかどうかを測定します。 ここでの合格率は、すべての予測クラスで特定のクラスとして予測される経験的確率として定義されます。

[1] confusion_matrixprecisionrecallf1_scoreの構造体の形式:

列名

タイプ

window

struct<start: timestamp, end: timestamp>

よく使うアイテム

array<struct<item: string, count: bigint>>

confusion_matrix

struct<prediction: string, label: string, count: bigint>

precision

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

recall

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] モニターに分析タイプ InferenceLogproblem_typeclassificationの場合にのみ表示されます。

Drift メトリクス テーブル スキーマ

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

列名

タイプ

説明

列のグループ化

window

struct<start: timestamp, end: timestamp>

時間ウィンドウ。

window_cmp

struct<start: timestamp, end: timestamp>

drift_type CONSECUTIVEの比較ウィンドウ。

drift_type

string

BASELINEまたはCONSECUTIVE。 ドリフト メトリクスを前の時間枠と比較するか、ベースライン テーブルと比較するか。

granularity

string

granularities パラメーターで設定されるウィンドウ期間。[7]

モデル_id_col

string

オプション。解析タイプにのみ使用されます InferenceLog

slice_key

string

スライス式。 デフォルトは NULL で、すべてのデータです。

slice_value

string

スライス式の値。

column_name

string

プライマリ テーブルの列の名前。 :table は、モデルの精度など、テーブル全体に適用されるメトリクスの特別な名前です。

data_type

string

Spark データ型は [ column_name] です。

monitor_version

bigint

行内のメトリクスの計算に使用されるモニター構成のバージョン。 詳細については、以下の[8]を参照してください。

メトリクス列 - ドリフト

差額は、現在のウィンドウ - 比較ウィンドウとして計算されます。

count_delta

double

countの変化。

avg_delta

double

avgの変化。

パーセント_ゼロ_デルタ

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以外の値が増減する列の数。

カイ・スクエア・テスト

struct<statistic: double, pvalue: double>

分布のドリフトのカイ二乗検定。

ks_test

struct<statistic: double, pvalue: double>

分布のドリフトのKS検定。 数値列のみで計算されます。

tv_distance

double

分布のドリフトの変動距離の合計です。

l_無限遠距離です

double

分布のドリフトのL無限遠。

js_distance

double

分布のドリフトのジェンセン・シャノン距離。 カテゴリ列に対してのみ計算されます。

wasserstein_distance

double

Wasserstein distance メトリクスを使用した 2 つの数値分布間のドリフト。

population_stability_index

double

Population Stability Index メトリクスを使用して 2 つの数値分布間のドリフトを比較するためのメトリクス。 詳細については、以下の[9]を参照してください。

[7] 時系列プロファイルまたは推論プロファイルの場合、モニターはモニターが作成された時点から 30 日間さかのぼって検索します。 このカットオフにより、最初の分析には部分的なウィンドウが含まれる場合があります。 たとえば、30 日の制限が週または月の中間にある場合、週全体または月は計算に含まれません。 この問題は、最初のウィンドウにのみ影響します。

[8] この列に示されているバージョンは、行の統計の計算に使用されたバージョンであり、モニターの現在のバージョンではない可能性があります。 メトリクスを更新するたびに、モニターは現在のモニター設定を使用して以前に計算されたメトリクスの再計算を試みます。 現在のモニター・バージョンは、API および Python クライアントによって返されるモニター情報に表示されます。

[9] 人口安定性指数の出力は、2つの分布がどの程度異なるかを表す数値です。 範囲は [0, inf) です。 PSI < 0.1 は、人口の大幅な変化がないことを意味します。 PSI < 0.2 は、人口の変化が中程度であることを示します。 PSI >= 0.2 は、人口の大幅な変化を示します。