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

プレビュー

この機能はパブリックプレビュー段階です。

このページでは、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 になります。

列名

タイプ

説明

列のグループ化

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

時間枠。

粒 度

文字列

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

ビギント

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

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

カウント

ビギント

null 以外の値の数。

num_nulls

ビギント

column_name内のヌル値の数。

平均

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

分位数

array<double>

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

distinct_count

ビギント

column_name内の個別の値の数。

column_nameの最小値。

.max

最大値 ( column_name単位)。

標準デブ

column_nameの標準偏差。

num_zeros

ビギント

column_nameのゼロの数。

num_nan

ビギント

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 以外の値を持つ列のリスト。

中央値

column_nameの中央値。

percent_null

column_nameの null 値の割合。

percent_zeros

column_nameでゼロの値の割合。

percent_distinct

column_nameで異なる値の割合。

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

accuracy_score

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

confusion_matrix

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

精度

構造 体。 以下の[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_col から label_colの間のR二乗スコア。

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

predictive_parity

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

predictive_equality

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

equal_opportunity

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

statistical_parity

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

[1] confusion_matrixprecisionrecall、および f1_scoreの構造体の形式:

列名

タイプ

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

文字列

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

粒 度

文字列

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

model_id_col

文字列

随意。 解析タイプにのみ使用されます InferenceLog

slice_key

文字列

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

slice_value

文字列

スライス式の値。

column_name

文字列

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

data_type

文字列

column_nameの Spark データ型。

monitor_version

ビギント

行のメトリクスを計算するために使用されるモニター構成のバージョン。 詳細については、以下の [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>

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

ks_test

struct<statistic: double, pvalue: double>

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

tv_distance

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

l_infinity_distance

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

js_distance

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

wasserstein_distance

ワッサーシュタイン距離メトリクスを使用した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 は、有意な人口変化を示します。