メインコンテンツまでスキップ

データプロファイリング メトリクス テーブル

このページでは、データプロファイリングによって作成されたメトリクス テーブルについて説明します。 プロファイルによって作成されたダッシュボードの詳細については、 「生成された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に 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の個別の値に基づいて自動的に作成されます。
  • 分類モデルの場合、 Boolean値を持つスライスに対して公平性とバイアスの統計が計算されます。

クエリ分析とドリフトメトリクステーブル

メトリクス テーブルに直接クエリを実行できます。 次の例はInferenceLog分析に基づいています。

SQL
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に設定されます。

プロファイル メトリクスでは、次のグループ化列が使用されます。

  • 時間枠
  • 粒度( TimeSeriesInferenceLog分析のみ)
  • ログタイプ - 入力テーブルまたはベースラインテーブル
  • スライスキーと値
  • モデル ID ( InferenceLog分析のみ)

ドリフト メトリクスの場合、次の追加のグループ化列が使用されます。

  • 比較時間枠
  • ドリフトの種類(前のウィンドウとの比較またはベースラインテーブルとの比較)

メトリクス テーブルのスキーマは以下に示されており、データプロファイリングAPIリファレンス ドキュメントにも示されています。

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

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

列名

Type

説明

列のグループ化

window

構造。下記[1]を参照。

時間ウィンドウ。

granularity

string

ウィンドウ期間。 granularitiesによって設定されます。 [2]

model_id_col

string

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

ログタイプ

string

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

スライスキー

string

スライス表現。デフォルトでは NULL で、すべてデータです。

スライス値

string

スライス式の値。

列名

string

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

データ型

string

column_nameのSparkデータ型です。

logging_table_commit_version

int

無視してください。

モニターバージョン

bigint

行のメトリクスを計算するために使用されるプロファイル構成のバージョン。 詳細は下記[3]を参照。

メトリクス列 - 概要統計

count

bigint

null 以外の値の数。

num_nulls

bigint

column_name内の null 値の数。

avg

double

列の算術平均(NULL を無視)。

quantiles

array<double>

1000 個の分位数の配列。下記[4]を参照。

個別カウント

bigint

column_name内の異なる値のおおよその数。これはapprox_count_distinct関数を使用するため、結果が正確ではない可能性があります。

min

double

column_name内の最小値。

max

double

column_name内の最大値。

stddev

double

column_nameの標準偏差。

ゼロの数

bigint

column_name内のゼロの数。

num_nan

bigint

column_name内の NaN 値の数。

最小サイズ

double

column_name内の配列または構造体の最小サイズ。

最大サイズ

double

column_name内の配列または構造体の最大サイズ。

平均サイズ

double

column_name内の配列または構造体の平均サイズ。

最小長さ

double

column_name内の文字列とバイナリ値の最小長。

最大長さ

double

column_name内の文字列とバイナリ値の最大長。

平均長さ

double

column_name内の文字列とバイナリ値の平均長。

frequent_items

構造。下記[1]を参照。

最も頻繁に発生する上位 100 件の項目。

非NULL列

array<string>

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

median

double

column_nameの中央値。

パーセント_null

double

column_name内の null 値の割合。

パーセントゼロ

double

column_name内のゼロの値の割合。

パーセント別

double

column_name内で異なる値の割合。

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

精度スコア

double

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

混乱マトリックス

構造。下記[1]を参照。

precision

構造。下記[1]を参照。

recall

構造。下記[1]を参照。

f1_スコア

構造。下記[1]を参照。

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

平均二乗誤差

double

prediction_collabel_colの間の平均二乗誤差。

二乗平均平方根誤差

double

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

mean_average_error

double

prediction_collabel_colの間の平均誤差。

平均絶対パーセント誤差

double

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

r2_スコア

double

R二乗スコアはprediction_collabel_colの間です。

メトリクスコラム - 公平性と偏り [6]

予測パリティ

double

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

予測平等

double

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

機会均等

double

2 つのグループがすべての予測クラスにわたって同等の再現率を持っているかどうかを測定します。label_colは必須です。

統計的パリティ

double

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

[1] confusion_matrixprecisionrecallf1_scoreの構造体のフォーマット:

列名

Type

window

struct<start: timestamp, end: timestamp>

frequent_items

array<struct<item: string, count: bigint>>

混乱マトリックス

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_スコア

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の場合にのみ表示されます。

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

次の表は、ドリフト メトリクス テーブルのスキーマを示しています。 ドリフト テーブルは、ベースライン テーブルが提供されている場合、または指定された粒度に従って集計された後に連続した時間ウィンドウが存在する場合にのみ生成されます。メトリクスが行に適用できない場合、対応するセルは null になります。

列名

Type

説明

列のグループ化

window

struct<start: timestamp, end: timestamp>

時間ウィンドウ。

ウィンドウcmp

struct<start: timestamp, end: timestamp>

drift_type CONSECUTIVEの比較ウィンドウ。

ドリフトタイプ

string

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

granularity

string

ウィンドウ期間。 granularitiesによって設定されます。 [7]

model_id_col

string

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

スライスキー

string

スライス表現。デフォルトでは NULL で、すべてデータです。

スライス値

string

スライス式の値。

列名

string

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

データ型

string

column_nameのSparkデータ型です。

モニターバージョン

bigint

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

メトリクス列 - ドリフト

差異は現在のウィンドウ - 比較ウィンドウとして計算されます。

カウントデルタ

double

countの変化。

平均デルタ

double

avgの変化。

percent_null_delta

double

percent_nullの変化。

パーセントゼロデルタ

double

percent_zerosの変化。

パーセント別差分

double

percent_distinctの変化。

非NULL列デルタ

struct<added: int, missing: int>

NULL 以外の値が増加または減少した列の数。

chi_squared_test

struct<statistic: double, pvalue: double>

分布のドリフトを調べるカイ二乗検定。カテゴリ列に対してのみ計算されます。数値列の場合はnullです。

ks_テスト

struct<statistic: double, pvalue: double>

分布のドリフトを検定する KS テスト。数値列のみ計算されます。カテゴリ列の場合はnull

テレビ距離

double

分布のドリフトの合計変動距離。カテゴリ列に対してのみ計算されます。数値列の場合はnullです。

l_infinity_distance

double

分布のドリフトの L 無限大距離。カテゴリ列に対してのみ計算されます。数値列の場合はnullです。

js_距離

double

分布のドリフトに関する Jensen–Shannon 距離。カテゴリ列に対してのみ計算されます。数値列の場合はnullです。

ワッサーシュタイン距離

double

Wasserstein 距離メトリクスを使用して、2 つの数値分布間のドリフトを計算します。 数値列のみ計算されます。カテゴリ列の場合はnull

人口安定指数

double

メトリクスは、母集団安定性指標メトリクスを使用して 2 つの数値分布間のドリフトを比較します。 詳細については下記[9]を参照。数値列のみ計算されます。カテゴリ列の場合はnull

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

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

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