このページでは、データ プロファイルによって作成されたメトリック テーブルについて説明します。 プロファイルによって作成されたダッシュボードの詳細については、「 生成された SQL ダッシュボードを使用する」を参照してください。
Databricks テーブルでプロファイルを実行すると、プロファイル メトリック テーブルと誤差メトリック テーブルという 2 つのメトリック テーブルが作成または更新されます。
- プロファイル メトリック テーブルには、各列と、時間枠、スライス、およびグループ化列の各組み合わせに関する概要統計が含まれています。
InferenceLog分析の場合、分析テーブルにはモデルの精度メトリックも含まれています。 - 誤差メトリック テーブルには、メトリックの分布の変化を追跡する統計が含まれています。 ドリフト テーブルを使用すると、特定の値ではなく、データの変更を視覚化したり、アラートを生成したりできます。 次の種類のドリフトが計算されます。
- 連続するドリフトは、ウィンドウを以前のタイムウィンドウと比較します。 連続するドリフトは、指定された粒度に従って集計された後に連続する時間枠が存在する場合にのみ計算されます。
- ベースラインのドリフトは、ベースラインテーブルによって決定されたベースライン分布とウィンドウを比較します。 基準誤差は、ベースライン テーブルが提供された場合にのみ計算されます。
メトリック テーブルが配置されている場所
メトリック テーブルは {output_schema}.{table_name}_profile_metrics と {output_schema}.{table_name}_drift_metrics に保存されます。{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_colとprediction_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分析のみ)
誤差メトリックの場合は、次の追加のグループ化列が使用されます。
- 比較時間範囲
- ドリフトの種類 (前のウィンドウとの比較またはベースラインテーブルとの比較)
メトリック テーブルのスキーマを以下に示し、 データ プロファイル API リファレンス ドキュメントにも示します。
プロファイル メトリックテーブルスキーマ
次の表は、プロファイル メトリック テーブルのスキーマを示しています。 メトリックが行に適用されない場合、対応するセルは null です。
| 列名 | タイプ | Description |
|---|---|---|
| 列のグループ化 | ||
| ウィンドウ | 構造体。 以下の [1] を参照してください。 | 時間枠。 |
| 細分性 | 文字列 | ウィンドウの期間。 granularities パラメーターによって設定されます。 [2] |
| model_id_col | 文字列 | Optional.
InferenceLog 分析タイプにのみ使用されます。 |
| log_type | 文字列 | メトリックの計算に使用されるテーブル。 ベースラインまたは入力。 |
| slice_key | 文字列 | スライス式。 既定値の場合は NULL。これはすべてのデータです。 |
| slice_value | 文字列 | スライス式の値。 |
| column_name | 文字列 | 主テーブルの列の名前。
:table は、モデルの精度など、テーブル全体に適用されるメトリックの特別な名前です。 |
| データ型 | 文字列 |
column_name の Spark データ型。 |
| logging_table_commit_version | 整数 (int) | [無視]。 |
| monitor_version | bigint | 行のメトリックの計算に使用されるプロファイル構成のバージョン。 詳細については、以下の [3] を参照してください。 |
| メトリック列 - 統計情報の概要 | ||
| count | bigint | null 以外の値の数。 |
| num_nulls | bigint |
column_name内の null 値の数。 |
| avg | ダブル | null を無視する列の算術平均。 |
| 分位点 | array<double> |
1000 分位点の配列。 以下の [4] を参照してください。 |
| distinct_count | bigint |
column_name 内の重複しない値の概数。 これにより、 approx_count_distinct 関数が使用されるため、結果が正確ではない可能性があります。 |
| min | ダブル |
column_name の最小値。 |
| max | ダブル |
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 つ含まれた列の一覧。 |
| 中央値 | ダブル |
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] | ||
| 平均二乗誤差 | ダブル |
prediction_col と label_col の間の平均二乗誤差。 |
| root_mean_squared_error | ダブル |
prediction_col と label_col の間の二乗平均平方根誤差。 |
| mean_average_error | ダブル |
prediction_col と label_col の間の平均誤差。 |
| 平均絶対百分率誤差 | ダブル |
prediction_col と label_col の間の平均絶対パーセント誤差。 |
| r2_score | ダブル |
prediction_col と label_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> |
| 精度 | 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_col と prediction_col の両方が指定されている場合にのみ表示されます。
[6] プロファイルに InferenceLog 分析の種類があり、 problem_type が classificationされている場合にのみ表示されます。
ドリフトメトリックのテーブルスキーマ
次の表は、誤差メトリック テーブルのスキーマを示しています。 誤差テーブルは、基準テーブルが指定されている場合、または指定された粒度に従って集計後に連続する時間枠が存在する場合にのみ生成されます。 メトリックが行に適用されない場合、対応するセルは null です。
| 列名 | タイプ | Description |
|---|---|---|
| 列のグループ化 | ||
| ウィンドウ | struct<start: timestamp, end: timestamp> |
時間枠。 |
| window_cmp | struct<start: timestamp, end: timestamp> |
drift_type CONSECUTIVEの比較ウィンドウ。 |
| drift_type | 文字列 | ベースラインまたは連続。 ドリフトメトリックが以前のタイムウィンドウと比較されるか、ベースライン テーブルと比較されるか。 |
| 細分性 | 文字列 | ウィンドウの期間。 granularities パラメーターによって設定されます。 [7] |
| model_id_col | 文字列 | Optional.
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> |
分布のドリフトのカイ二乗検定。 カテゴリ列に対してのみ計算されます。
null 数値列の場合。 |
| ks_test | struct<statistic: double, pvalue: double> |
分布のドリフトに対する KS 検定。 数値列に対してのみ計算されます。
null カテゴリ列の場合。 |
| テレビ距離 | ダブル | 分布のドリフトの合計変動距離。 カテゴリ列に対してのみ計算されます。
null 数値列の場合。 |
| l_infinity_distance | ダブル | 分布のドリフトに対する L 無限距離。 カテゴリ列に対してのみ計算されます。
null 数値列の場合。 |
| js_distance | ダブル | 分布のドリフトに関する Jensen–Shannon 距離。 カテゴリ列に対してのみ計算されます。
null 数値列の場合。 |
| wasserstein_distance | ダブル | Wasserstein 距離メトリックを使用して、2 つの数値分布間のドリフトを計算します。 数値列に対してのみ計算されます。
null カテゴリ列の場合。 |
| 人口安定性指数 | ダブル | 母集団安定性指数メトリックを使用して 2 つの数値分布間のドリフトを比較するためのメトリック。 詳細については、以下の [9] を参照してください。 数値列に対してのみ計算されます。
null カテゴリ列の場合。 |
[7] 時系列プロファイルまたは推論プロファイルの場合、プロファイルはプロファイルが作成された時刻から 30 日を振り返ります。 このカットオフにより、最初の分析には部分的なウィンドウが含まれる場合があります。 たとえば、30 日の制限は、週または月の途中に当てはまる可能性があります。その場合、完全な週または月は計算に含まれません。 この問題は、最初のウィンドウにのみ影響します。
[8] この列に表示されるバージョンは、行の統計を計算するために使用されたバージョンであり、プロファイルの現在のバージョンではない可能性があります。 メトリックを更新するたびに、プロファイルは、現在のプロファイル構成を使用して、以前に計算されたメトリックの再計算を試みます。 現在のプロファイル バージョンは、API と Python クライアントによって返されるプロファイル情報に表示されます。
[9] 個体群安定性インデックスの出力は、2 つの分布の違いを表す数値です。 範囲は [0, inf) です。 PSI < 0.1 は、母集団に有意な変化がないことを意味します。 PSI < 0.2 は、中程度の母集団の変化を示します。 PSI >= 0.2 は、母集団の有意な変化を示します。