メトリクステーブルを監視する
このページでは、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_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
に設定されます。
プロファイルメトリクスでは、次のグループ化列が使用されます。
時間枠
粒度 (
TimeSeries
およびInferenceLog
分析のみ)ログの種類 - 入力テーブルまたはベースライン テーブル
スライスキーと値
モデル ID (
InferenceLog
解析のみ)
ドリフトメトリクスでは、次の追加のグループ化列が使用されます。
比較時間枠
ドリフトタイプ(前のウィンドウとの比較またはベースラインテーブルとの比較)
メトリクス テーブルのスキーマを以下に示します。また、 Databricks レイクハウスモニタリング API リファレンス ドキュメントにも示されています。
プロファイルメトリクステーブルのスキーマ
次の表は、プロファイルメトリクステーブルのスキーマを示しています。 メトリクスが行に適用できない場合、対応するセルは null になります。
列名 |
タイプ |
説明 |
---|---|---|
列のグループ化 |
||
window |
構造 体。 以下の[1]を参照してください。 |
時間ウィンドウ。 |
granularity |
文字列 |
|
model_id_col |
文字列 |
オプション。 解析タイプにのみ使用されます |
log_type |
文字列 |
メトリクスの計算に使用されるテーブル。 ベースラインまたは入力。 |
slice_key |
文字列 |
スライス式。 デフォルトの場合は NULL で、すべてのデータです。 |
slice_value |
文字列 |
スライス式の値。 |
column_name |
文字列 |
プライマリ テーブルの列の名前。 |
data_type |
文字列 |
|
logging_table_commit_version |
整数 |
無視してください。 |
monitor_version |
bigint |
行のメトリクスを計算するために使用されるモニター構成のバージョン。 詳細については、以下の [3] を参照してください。 |
メトリクス 列 - 要約統計量 |
||
count |
bigint |
null 以外の値の数。 |
num_nulls |
bigint |
|
avg |
double |
列の算術平均、インゴリングヌル。 |
quantiles |
|
1000 個の分位数の配列。 下記の [4] を参照してください。 |
distinct_count |
bigint |
|
min |
double |
|
.max |
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 |
文字列とバイナリ値の平均の長さ ( |
frequent_items |
構造 体。 以下の[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 |
|
mean_average_error |
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 |
|
frequent_items |
|
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
の場合のみ表示されます。
ドリフトメトリクステーブルのスキーマ
次の表は、ドリフトメトリクステーブルのスキーマを示しています。 ドリフト テーブルは、ベースライン テーブルが指定されている場合、または指定された粒度に従って集計後に連続する時間枠が存在する場合にのみ生成されます。
列名 |
タイプ |
説明 |
---|---|---|
列のグループ化 |
||
window |
|
時間ウィンドウ。 |
window_cmp |
|
drift_type |
drift_type |
文字列 |
ベースラインまたは連続。 ドリフトメトリクスが前の時間枠と比較するか、ベースラインテーブルと比較するか。 |
granularity |
文字列 |
|
model_id_col |
文字列 |
オプション。 解析タイプにのみ使用されます |
slice_key |
文字列 |
スライス式。 デフォルトの場合は NULL で、すべてのデータです。 |
slice_value |
文字列 |
スライス式の値。 |
column_name |
文字列 |
プライマリ テーブルの列の名前。 |
data_type |
文字列 |
|
monitor_version |
bigint |
行のメトリクスを計算するために使用されるモニター構成のバージョン。 詳細については、以下の [8] を参照してください。 |
メトリクス コラム - ドリフト |
差異は、現在のウィンドウ - 比較ウィンドウとして計算されます。 |
|
count_delta |
double |
|
avg_delta |
double |
|
percent_null_delta |
double |
|
percent_zeros_delta |
double |
|
percent_distinct_delta |
double |
|
non_null_columns_delta |
|
null 以外の値が増減した列の数。 |
chi_squared_test |
|
分布のドリフトのカイ2乗検定。 |
ks_test |
|
分布のドリフトに関する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 は、有意な人口変化を示します。