メトリクステーブルのモニター
このページでは、 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_key
と slice_value
で識別されます。 この例では、1 つのスライス キーは "col_2 > 10" で、対応する値は "true" と "false" になります。 テーブル全体は、 slice_key
= NULL および slice_value
= NULL に相当します。 スライスは、1 つのスライスキーで定義されます。
メトリクスは、タイム ウィンドウとスライス キーと値によって定義されるすべての可能なグループに対してコンピュートです。 また、 InferenceLog
分析については、モデルIDごとにメトリクスはコンピュートです。 詳細については、「 生成されたテーブルの列スキーマ」を参照してください。
モデル精度モニタリングの追加統計量 (InferenceLog
分析のみ)
InferenceLog
分析では、追加の統計量が計算されます。
- モデルの品質は、
label_col
とprediction_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
に設定されます。
profile メトリクスでは、次のグループ化列が使用されます。
- 時間枠
- 粒度 (
TimeSeries
およびInferenceLog
分析のみ) - ログの種類 - 入力テーブルまたはベースラインテーブル
- スライスのキーと値
- モデル ID (
InferenceLog
解析のみ)
ドリフト メトリクスでは、次の追加のグループ化列が使用されます。
- 比較時間枠
- ドリフト・タイプ(前のウィンドウとの比較またはベースライン・テーブルとの比較)
メトリクス テーブルのスキーマを以下に示します。また、 Databricks レイクハウスモニタリング API リファレンス ドキュメントにも示されています。
Profile メトリクス table schema
次の表は、プロファイルメトリクステーブルのスキーマを示しています。 メトリクスが行に適用できない場合、対応するセルは null です。
列名 | タイプ | 説明 |
---|---|---|
列のグループ化 | ||
window | 構造 体。 以下の[1]を参照してください。 | 時間ウィンドウ。 |
granularity | string |
|
モデル_id_col | string | オプション。解析タイプにのみ使用されます |
ログタイプ | string | メトリクスの計算に使用されるテーブル。 BASELINE または INPUT。 |
slice_key | string | スライス式。 デフォルトは NULL で、すべてのデータです。 |
slice_value | string | スライス式の値。 |
column_name | string | プライマリ テーブルの列の名前。 |
data_type | string | Spark データ型は [ |
ロギング_テーブル_コミット_バージョン | int | 無視してください。 |
monitor_version | bigint | 行内のメトリクスの計算に使用されるモニター構成のバージョン。 詳細は下記[3]をご覧ください。 |
メトリクス列 - 統計サマリー | ||
count | bigint | null 以外の値の数。 |
num_nulls | bigint |
|
avg | double | 列の算術平均、ヌルを含む。 |
quantiles |
| 1000 個の分位数の配列。 以下の[4]を参照してください。 |
distinct_count | bigint |
|
min | double |
|
最大 | double | 最大値 ( |
stddev | double |
|
num_zeros | bigint |
|
num_nan | bigint |
|
min_size | double |
|
max_size | double |
|
avg_size | double |
|
min_len | double | 文字列とバイナリ値の最小長 ( |
max_len | double | 文字列とバイナリ値の最大長 ( |
avg_len | double | 文字列とバイナリ値の平均長 ( |
よく使うアイテム | 構造 体。 以下の[1]を参照してください。 | 最も頻繁に発生する上位 100 のアイテム。 |
non_null_columns |
| 少なくとも 1 つの null 以外の値を持つ列のリスト。 |
median | double |
|
percent_null | double |
|
percent_zeros | double |
|
percent_distinct | double |
|
メトリクス列 - 分類モデルの精度 [5] | ||
accuracy_score | double | モデルの精度は、(正しい予測の数/予測の合計数)として計算され、null値を無視します。 |
confusion_matrix | 構造 体。 以下の[1]を参照してください。 | |
precision | 構造 体。 以下の[1]を参照してください。 | |
recall | 構造 体。 以下の[1]を参照してください。 | |
f1_score | 構造 体。 以下の[1]を参照してください。 | |
メトリクス列 - 回帰モデルの精度 [5] | ||
mean_squared_error | double |
|
root_mean_squared_error | double |
|
平均_エラー_平均値 | double |
|
mean_absolute_percentage_error | double |
|
r2_score | double |
|
メトリクス列 - 公平性とバイアス [6] | ||
predictive_parity | double | 2 つのグループの精度がすべての予測クラスで等しいかどうかを測定します。 |
predictive_equality | double | 2 つのグループの偽陽性率が、予測されたすべてのクラスで等しいかどうかを測定します。 |
equal_opportunity | double | 2つのグループの再現率がすべての予測クラスで等しいかどうかを測定します。 |
statistical_parity | double | 2つのグループの合格率が等しいかどうかを測定します。 ここでの合格率は、すべての予測クラスで特定のクラスとして予測される経験的確率として定義されます。 |
[1] confusion_matrix
、 precision
、 recall
、 f1_score
の構造体の形式:
列名 | タイプ |
---|---|
window |
|
よく使うアイテム |
|
confusion_matrix |
|
precision |
|
recall |
|
f1_score |
|
[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_col
と prediction_col
の両方が提供されている場合にのみ表示されます。
[6] モニターに分析タイプ InferenceLog
、 problem_type
が classification
の場合にのみ表示されます。
Drift メトリクス テーブル スキーマ
次の表は、drift メトリクス テーブルのスキーマを示しています。 ドリフト テーブルは、ベースライン テーブルが指定されている場合、または指定された粒度に従って集計後に連続するタイム ウィンドウが存在する場合にのみ生成されます。
列名 | タイプ | 説明 |
---|---|---|
列のグループ化 | ||
window |
| 時間ウィンドウ。 |
window_cmp |
| drift_type |
drift_type | string | BASELINEまたはCONSECUTIVE。 ドリフト メトリクスを前の時間枠と比較するか、ベースライン テーブルと比較するか。 |
granularity | string |
|
モデル_id_col | string | オプション。解析タイプにのみ使用されます |
slice_key | string | スライス式。 デフォルトは NULL で、すべてのデータです。 |
slice_value | string | スライス式の値。 |
column_name | string | プライマリ テーブルの列の名前。 |
data_type | string | Spark データ型は [ |
monitor_version | bigint | 行内のメトリクスの計算に使用されるモニター構成のバージョン。 詳細については、以下の[8]を参照してください。 |
メトリクス列 - ドリフト | 差額は、現在のウィンドウ - 比較ウィンドウとして計算されます。 | |
count_delta | double |
|
avg_delta | double |
|
パーセント_ゼロ_デルタ | double |
|
percent_zeros_delta | double |
|
percent_distinct_delta | double |
|
non_null_columns_delta |
| null以外の値が増減する列の数。 |
カイ・スクエア・テスト |
| 分布のドリフトのカイ二乗検定。 |
ks_test |
| 分布のドリフトの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 は、人口の大幅な変化を示します。