次の方法で共有


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

このページでは、Databricks Lakehouse Monitoring によって作成されたメトリック テーブルについて説明します。 モニターによって作成されるダッシュボードの詳細については、「生成された 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で指定された粒度と、timestamp_col引数で指定されたprofile_typeの値に基づいています。

メトリックは常にテーブル全体に対して計算されます。 さらに、スライス式を指定すると、式の値によって定義されたデータ スライスごとにメトリックが計算されます。

次に例を示します。

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) ひも ウィンドウの期間。 granularities パラメーターによって設定されます。 [2]
model_id_col ひも 省略可能。 InferenceLog 分析タイプにのみ使用されます。
log_type ひも メトリックの計算に使用されるテーブル。 ベースラインまたは入力。
slice_key ひも スライス式。 既定値の場合は NULL。これはすべてのデータです。
slice_value ひも スライス式の値。
column_name ひも 主テーブルの列の名前。 :table は、モデルの精度など、テーブル全体に適用されるメトリックの特別な名前です。
データ型 ひも column_name の Spark データ型。
logging_table_commit_version 整数 (int) [無視]。
monitor_version bigint(ビッグイント) 行のメトリックを計算するために使用されるモニター構成のバージョン。 詳細については、以下の [3] を参照してください。
メトリック列 - 統計情報の概要
数える bigint(ビッグイント) null 以外の値の数。
num_nulls bigint(ビッグイント) column_name内の null 値の数。
平均 倍精度浮動小数点 null を無視した、列の算術平均。
分位点 array<double> 1000 分位点の配列。 以下の [4] を参照してください。
distinct_count bigint(ビッグイント) column_name 内の重複しない値の概数。 これにより、 approx_count_distinct 関数が使用されるため、結果が正確ではない可能性があります。
最小 倍精度浮動小数点 column_name の最小値。
マックス / 最大 倍精度浮動小数点 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の文字列値とバイナリ値の平均長。
頻出アイテム 構造体。 以下の [1] を参照してください。 最も頻繁に発生する上位 100 項目。
non_null_columns array<string> null 以外の値が少なくとも 1 つ含まれた列の一覧。
中央値 (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]
平均二乗誤差 倍精度浮動小数点 prediction_collabel_col の間の平均二乗誤差。
root_mean_squared_error 倍精度浮動小数点 prediction_collabel_col の間の二乗平均平方根誤差。
mean_average_error 倍精度浮動小数点 prediction_collabel_col の間の平均誤差。
平均絶対百分率誤差 倍精度浮動小数点 prediction_collabel_col の間の平均絶対パーセント誤差。
r2_score 倍精度浮動小数点 prediction_collabel_col の間の R 二乗スコア。
メトリック列 - 公平性とバイアス [6]
予測パリティ 倍精度浮動小数点 2 つのグループの精度がすべての予測クラスにわたって等しいかどうかを測定します。 label_col は必須です。
predictive_equality 倍精度浮動小数点 2 つのグループの誤検出率がすべての予測クラスにわたって等しいかどうかを測定します。 label_col は必須です。
機会均等 倍精度浮動小数点 2 つのグループの再現率がすべての予測クラスにわたって等しいかどうかを測定します。 label_col は必須です。
統計的均等性 倍精度浮動小数点 2 つのグループの受け入れ率が等しいかどうかを測定します。 ここでの受け入れ率は、予測されたすべてのクラスにわたって、特定のクラスとして予測される経験的確率として定義されます。

[1] confusion_matrix, precision, recall, f1_score の構造体の形式:

列名 種類
ウィンドウ 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>
再現率 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 ひも ベースラインまたは連続。 ドリフトメトリックが以前のタイムウィンドウと比較されるか、ベースライン テーブルと比較されるか。
粒度 (granularity) ひも ウィンドウの期間。 granularities パラメーターによって設定されます。 [7]
model_id_col ひも 省略可能。 InferenceLog 分析タイプにのみ使用されます。
slice_key ひも スライス式。 既定値の場合は NULL。これはすべてのデータです。
slice_value ひも スライス式の値。
column_name ひも 主テーブルの列の名前。 :table は、モデルの精度など、テーブル全体に適用されるメトリックの特別な名前です。
データ型 ひも column_name の Spark データ型。
monitor_version bigint(ビッグイント) 行のメトリックを計算するために使用されるモニター構成のバージョン。 詳細については、以下の [8] を参照してください。
メトリック列 - 誤差 差分は、現在のウィンドウ (比較ウィンドウ) として計算されます。
count_delta 倍精度浮動小数点 count の違い。
avg_delta 倍精度浮動小数点 avg の違い。
パーセント_ヌル_デルタ 倍精度浮動小数点 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 検定。 数値列に対してのみ計算されます。
テレビ距離 倍精度浮動小数点 分布のドリフトの合計変動距離。
l_infinity_distance 倍精度浮動小数点 分布のドリフトに対する L 無限距離。
js_distance 倍精度浮動小数点 分布のドリフトに関する Jensen–Shannon 距離。 カテゴリ列に対してのみ計算されます。
wasserstein_distance 倍精度浮動小数点 Wasserstein 距離メトリックを使用して、2 つの数値分布間のドリフトを計算します。
人口安定性指数 倍精度浮動小数点 母集団安定性指数メトリックを使用して 2 つの数値分布間のドリフトを比較するためのメトリック。 詳細については、以下の [9] を参照してください。

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

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

[9] 個体群安定性インデックスの出力は、2 つの分布の違いを表す数値です。 範囲は [0, inf) です。 PSI < 0.1 は、母集団に有意な変化がないことを意味します。 PSI < 0.2 は、中程度の母集団の変化を示します。 PSI >= 0.2 は、母集団の有意な変化を示します。