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

このページでは、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スライス、 col_2 <= 10スライス、 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 分析に基づいています。

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 レイクハウスモニタリング API リファレンス ドキュメントにも示されています。

プロファイルメトリクステーブルのスキーマ

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

列名

タイプ

説明

列のグループ化

window

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

時間ウィンドウ。

granularity

文字列

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

model_id_col

文字列

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

log_type

文字列

メトリクスの計算に使用されるテーブル。 ベースラインまたは入力。

slice_key

文字列

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

slice_value

文字列

スライス式の値。

column_name

文字列

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

data_type

文字列

column_nameの Spark データ型。

logging_table_commit_version

整数

無視してください。

monitor_version

bigint

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

メトリクス 列 - 要約統計量

count

bigint

null 以外の値の数。

num_nulls

bigint

column_name内のヌル値の数。

avg

double

列の算術平均、インゴリングヌル。

quantiles

array<double>

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

distinct_count

bigint

column_name内の個別の値の数。

min

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>

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

median

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]を参照してください。

precision

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

recall

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

f1_score

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

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

mean_squared_error

double

prediction_collabel_colの間の平均二乗誤差。

root_mean_squared_error

double

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

mean_average_error

double

prediction_collabel_colの間の平均平均誤差。

mean_absolute_percentage_error

double

prediction_collabel_colの間の平均絶対パーセント誤差。

r2_score

double

prediction_col から label_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_matrixprecisionrecall、および f1_scoreの構造体の形式:

列名

タイプ

window

struct<start: timestamp, end: timestamp>

frequent_items

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] モニターの解析タイプが InferenceLog で、 problem_typeclassificationの場合のみ表示されます。

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

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

列名

タイプ

説明

列のグループ化

window

struct<start: timestamp, end: timestamp>

時間ウィンドウ。

window_cmp

struct<start: timestamp, end: timestamp>

drift_type CONSECUTIVEの比較ウィンドウ。

drift_type

文字列

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

granularity

文字列

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>

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

ks_test

struct<statistic: double, pvalue: double>

分布のドリフトに関するKSテスト。 数値列に対してのみ計算されます。

tv_distance

double

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

l_infinity_distance

double

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

js_distance

double

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

wasserstein_distance

double

ワッサーシュタイン距離メトリクスを使用した2つの数値分布間のドリフト。

population_stability_index

double

メトリクスは、人口安定指数メトリクスを用いて2つの数値分布間のドリフトを比較します。 詳細については、以下の [9] を参照してください。

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

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

[9] 人口安定指数の出力は、2つの分布の違いを表す数値です。 範囲は [0, inf) です。 PSI < 0.1 は、有意な母集団変化がないことを意味します。 PSI < 0.2 は、中程度の人口変化を示します。 PSI >= 0.2 は、有意な人口変化を示します。