Memantau tabel metrik
Halaman ini menjelaskan tabel metrik yang dibuat oleh Databricks Lakehouse Monitoring. Untuk informasi tentang dasbor yang dibuat oleh monitor, lihat Menggunakan dasbor SQL yang dihasilkan.
Saat monitor berjalan pada tabel Databricks, monitor membuat atau memperbarui dua tabel metrik: tabel metrik profil dan tabel metrik penyimpangan.
- Tabel metrik profil berisi statistik ringkasan untuk setiap kolom dan untuk setiap kombinasi jendela waktu, ikatan, dan kolom pengelompokan. Untuk
InferenceLog
analisis, tabel analisis juga berisi metrik akurasi model. - Tabel metrik drift berisi statistik yang melacak perubahan distribusi untuk metrik. Tabel penyimpangan dapat digunakan untuk memvisualisasikan atau memperingatkan perubahan dalam data, bukan nilai tertentu. Jenis penyimpangan berikut dihitung:
- Penyimpangan berturut-turut membandingkan jendela dengan jendela waktu sebelumnya. Penyimpangan berturut-turut hanya dihitung jika jendela waktu berturut-turut ada setelah agregasi sesuai dengan granularitas yang ditentukan.
- Penyimpangan garis besar membandingkan jendela dengan distribusi garis besar yang ditentukan oleh tabel garis besar. Penyimpangan garis besar hanya dihitung jika tabel garis besar disediakan.
Tempat tabel metrik berada
Memantau tabel metrik disimpan ke {output_schema}.{table_name}_profile_metrics
dan {output_schema}.{table_name}_drift_metrics
, di mana:
{output_schema}
adalah katalog dan skema yang ditentukan olehoutput_schema_name
.{table_name}
adalah nama tabel yang sedang dipantau.
Bagaimana statistik pemantauan dihitung
Setiap statistik dan metrik dalam tabel metrik dihitung untuk interval waktu tertentu (disebut "jendela"). Untuk Snapshot
analisis, jendela waktu adalah satu titik waktu yang sesuai dengan waktu metrik disegarkan. Untuk TimeSeries
dan InferenceLog
analisis, jendela waktu didasarkan pada granularitas yang ditentukan di create_monitor
dan nilai dalam timestamp_col
yang ditentukan dalam profile_type
argumen.
Metrik selalu dihitung untuk seluruh tabel. Selain itu, jika Anda memberikan ekspresi pemotongan, metrik dihitung untuk setiap irisan data yang ditentukan oleh nilai ekspresi.
Contohnya:
slicing_exprs=["col_1", "col_2 > 10"]
menghasilkan irisan berikut: satu untuk col_2 > 10
, satu untuk , dan satu untuk col_2 <= 10
setiap nilai unik di col1
.
Irisan diidentifikasi dalam tabel metrik dengan nama slice_key
kolom dan slice_value
. Dalam contoh ini, satu kunci ipotong adalah "col_2 > 10" dan nilai yang sesuai adalah "true" dan "false". Seluruh tabel setara dengan slice_key
= NULL dan slice_value
= NULL. Irisan didefinisikan oleh satu kunci irisan.
Metrik dihitung untuk semua grup yang mungkin ditentukan oleh jendela waktu dan ikatan kunci dan nilai. Selain itu, untuk InferenceLog
analisis, metrik dihitung untuk setiap id model. Untuk detailnya, lihat Skema kolom untuk tabel yang dihasilkan.
Statistik tambahan untuk pemantauan akurasi model (InferenceLog
hanya analisis)
Statistik tambahan dihitung untuk InferenceLog
analisis.
- Kualitas model dihitung jika keduanya
label_col
danprediction_col
disediakan. - Irisan secara otomatis dibuat berdasarkan nilai yang berbeda dari
model_id_col
. - Untuk model klasifikasi, statistik kewajaran dan bias dihitung untuk irisan yang memiliki nilai Boolean.
Analisis kueri dan tabel metrik penyimpangan
Anda bisa mengkueri tabel metrik secara langsung. Contoh berikut didasarkan pada InferenceLog
analisis:
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
Skema kolom untuk tabel yang dihasilkan
Untuk setiap kolom dalam tabel utama, tabel metrik berisi satu baris untuk setiap kombinasi kolom pengelompokan. Kolom yang terkait dengan setiap baris diperlihatkan dalam kolom column_name
.
Untuk metrik berdasarkan lebih dari satu kolom seperti metrik akurasi model, column_name
diatur ke :table
.
Untuk metrik profil, kolom pengelompokan berikut digunakan:
- jendela waktu
- granularitas (
TimeSeries
danInferenceLog
analisis saja) - jenis log - tabel input atau tabel garis besar
- iringan kunci dan nilai
- id model (
InferenceLog
hanya analisis)
Untuk metrik penyimpangan, kolom pengelompokan tambahan berikut digunakan:
- jendela waktu perbandingan
- jenis penyimpangan (perbandingan dengan jendela sebelumnya atau perbandingan dengan tabel garis besar)
Skema tabel metrik ditunjukkan di bawah ini, dan juga ditampilkan dalam dokumentasi referensi API Pemantauan Databricks Lakehouse.
Skema tabel metrik profil
Tabel berikut ini memperlihatkan skema tabel metrik profil. Jika metrik tidak berlaku untuk baris, sel yang sesuai adalah null.
Nama kolom | Tipe | Deskripsi |
---|---|---|
Mengelompokkan kolom | ||
window | Struct. Lihat [1] di bawah ini. | Jendela waktu. |
Granularity | string | Durasi jendela, diatur menurut granularities parameter. [2] |
model_id_col | string | Opsional. Hanya digunakan untuk InferenceLog jenis analisis. |
log_type | string | Tabel yang digunakan untuk menghitung metrik. GARIS BESAR atau INPUT. |
slice_key | string | Ekspresi ilis. NULL untuk default, yang merupakan semua data. |
slice_value | string | Nilai ekspresi pemotongan. |
column_name | string | Nama kolom dalam tabel utama. :table adalah nama khusus untuk metrik yang berlaku untuk seluruh tabel, seperti akurasi model. |
data_type | string | Jenis data Spark dari column_name . |
logging_table_commit_version | int | Abaikan. |
monitor_version | bigint | Versi konfigurasi monitor yang digunakan untuk menghitung metrik dalam baris. Lihat [3] di bawah ini untuk detailnya. |
Kolom metrik - statistik ringkasan | ||
jumlah | bigint | Jumlah nilai non-null. |
num_nulls | bigint | Jumlah nilai null dalam column_name . |
avg | ganda | Rata-rata aritmatika kolom, ingoring null. |
kuantil | array<double> |
Array 1000 kuantil. Lihat [4] di bawah ini. |
distinct_count | bigint | Jumlah nilai yang berbeda dalam column_name . |
mnt | ganda | Nilai minimum dalam column_name . |
maks | ganda | Nilai maksimum dalam column_name . |
stddev | ganda | Simpang siur column_name standar . |
num_zeros | bigint | Jumlah nol dalam column_name . |
num_nan | bigint | Jumlah nilai NaN dalam column_name . |
min_size | ganda | Ukuran minimum array atau struktur dalam column_name . |
max_size | ganda | Ukuran maksimum array atau struktur dalam column_name . |
avg_size | ganda | Ukuran rata-rata array atau struktur dalam column_name . |
min_len | ganda | Panjang minimum string dan nilai biner dalam column_name . |
max_len | ganda | Panjang maksimum string dan nilai biner dalam column_name . |
avg_len | ganda | Panjang rata-rata string dan nilai biner di column_name . |
frequent_items | Struct. Lihat [1] di bawah ini. | 100 item teratas yang paling sering terjadi. |
non_null_columns | array<string> |
Daftar kolom dengan setidaknya satu nilai non-null. |
median | ganda | Nilai median dari column_name . |
percent_null | ganda | Persentase nilai null dalam column_name . |
percent_zeros | ganda | Persentase nilai yang nol dalam column_name . |
percent_distinct | ganda | Persentase nilai yang berbeda dalam column_name . |
Kolom metrik - akurasi model klasifikasi [5] | ||
accuracy_score | ganda | Akurasi model, dihitung sebagai (jumlah prediksi yang benar/ jumlah total prediksi), mengabaikan nilai null. |
confusion_matrix | Struct. Lihat [1] di bawah ini. | |
presisi | Struct. Lihat [1] di bawah ini. | |
pengenalan | Struct. Lihat [1] di bawah ini. | |
f-measure | Struct. Lihat [1] di bawah ini. | |
Kolom metrik - akurasi model regresi [5] | ||
mean_squared_error | ganda | Rata-rata kesalahan kuadrat antara prediction_col dan label_col . |
root_mean_squared_error | ganda | Kesalahan kuadrat rata-rata akar antara prediction_col dan label_col . |
mean_average_error | ganda | Rata-rata kesalahan rata-rata antara prediction_col dan label_col . |
mean_absolute_percentage_error | ganda | Rata-rata kesalahan persentase absolut antara prediction_col dan label_col . |
r2_score | ganda | Skor R kuadrat antara prediction_col dan label_col . |
Kolom metrik - kewajaran dan bias [6] | ||
predictive_parity | ganda | Mengukur apakah kedua grup memiliki presisi yang sama di semua kelas yang diprediksi. label_col diperlukan. |
predictive_equality | ganda | Mengukur apakah kedua grup memiliki tingkat positif palsu yang sama di semua kelas yang diprediksi. label_col diperlukan. |
equal_opportunity | ganda | Mengukur apakah kedua grup memiliki pengenalan yang sama di semua kelas yang diprediksi. label_col diperlukan. |
statistical_parity | ganda | Mengukur apakah kedua grup memiliki tingkat penerimaan yang sama. Tingkat penerimaan di sini didefinisikan sebagai probabilitas empiris yang akan diprediksi sebagai kelas tertentu, di semua kelas yang diprediksi. |
[1] Format struktur untuk confusion_matrix
, , precision
, recall
dan f1_score
:
Nama kolom | Jenis |
---|---|
window | struct<start: timestamp, end: timestamp> |
frequent_items | array<struct<item: string, count: bigint>> |
confusion_matrix | struct<prediction: string, label: string, count: bigint> |
presisi | struct<one_vs_all: map<string,double>, macro: double, weighted: double> |
pengenalan | struct<one_vs_all: map<string,double>, macro: double, weighted: double> |
f-measure | struct<one_vs_all: map<string,double>, macro: double, weighted: double> |
[2] Untuk profil rangkaian waktu atau inferensi, monitor melihat kembali 30 hari sejak monitor dibuat. Karena cutoff ini, analisis pertama mungkin mencakup jendela parsial. Misalnya, batas 30 hari mungkin turun di pertengahan minggu atau bulan, dalam hal ini minggu atau bulan penuh tidak termasuk dalam perhitungan. Masalah ini hanya memengaruhi jendela pertama.
[3] Versi yang ditunjukkan dalam kolom ini adalah versi yang digunakan untuk menghitung statistik dalam baris dan mungkin bukan versi monitor saat ini. Setiap kali Anda me-refresh metrik, monitor mencoba untuk mengolah ulang metrik yang dihitung sebelumnya menggunakan konfigurasi monitor saat ini. Versi monitor saat ini muncul di informasi monitor yang dikembalikan oleh API dan Klien Python.
[4] Kode sampel untuk mengambil persentil ke-50: SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ...
atau SELECT quantiles[500] ...
.
[5] Hanya ditampilkan jika monitor memiliki InferenceLog
jenis analisis dan keduanya label_col
dan prediction_col
disediakan.
[6] Hanya ditampilkan jika monitor memiliki InferenceLog
jenis analisis dan problem_type
adalah classification
.
Skema tabel metrik drift
Tabel berikut ini memperlihatkan skema tabel metrik drift. Tabel penyimpangan hanya dihasilkan jika tabel garis besar disediakan, atau jika jendela waktu berturut-turut ada setelah agregasi sesuai dengan granularitas yang ditentukan.
Nama kolom | Tipe | Deskripsi |
---|---|---|
Mengelompokkan kolom | ||
window | struct<start: timestamp, end: timestamp> |
Jendela waktu. |
window_cmp | struct<start: timestamp, end: timestamp> |
Jendela perbandingan untuk drift_type CONSECUTIVE . |
drift_type | string | GARIS BESAR atau BERTURUT-TURUT. Apakah metrik penyimpangan dibandingkan dengan jendela waktu sebelumnya atau dengan tabel garis besar. |
Granularity | string | Durasi jendela, diatur menurut granularities parameter. [7] |
model_id_col | string | Opsional. Hanya digunakan untuk InferenceLog jenis analisis. |
slice_key | string | Ekspresi ilis. NULL untuk default, yang merupakan semua data. |
slice_value | string | Nilai ekspresi pemotongan. |
column_name | string | Nama kolom dalam tabel utama. :table adalah nama khusus untuk metrik yang berlaku untuk seluruh tabel, seperti akurasi model. |
data_type | string | Jenis data Spark dari column_name . |
monitor_version | bigint | Versi konfigurasi monitor yang digunakan untuk menghitung metrik dalam baris. Lihat [8] di bawah ini untuk detailnya. |
Kolom metrik - penyimpangan | Perbedaan dihitung sebagai jendela saat ini - jendela perbandingan. | |
count_delta | ganda | Perbedaan dalam count . |
avg_delta | ganda | Perbedaan dalam avg . |
percent_null_delta | ganda | Perbedaan dalam percent_null . |
percent_zeros_delta | ganda | Perbedaan dalam percent_zeros . |
percent_distinct_delta | ganda | Perbedaan dalam percent_distinct . |
non_null_columns_delta | struct<added: int, missing: int> |
Jumlah kolom dengan penambahan atau penurunan nilai non-null. |
chi_squared_test | struct<statistic: double, pvalue: double> |
Tes chi-square untuk penyimpangan dalam distribusi. |
ks_test | struct<statistic: double, pvalue: double> |
Pengujian KS untuk penyimpangan dalam distribusi. Dihitung hanya untuk kolom numerik. |
tv_distance | ganda | Total jarak variasi untuk penyimpangan dalam distribusi. |
l_infinity_distance | ganda | Jarak tak terbatas L untuk penyimpangan dalam distribusi. |
js_distance | ganda | Jarak Jensen-Shannon untuk penyimpangan dalam distribusi. Dihitung hanya untuk kolom kategoris. |
wasserstein_distance | ganda | Penyimpangan antara dua distribusi numerik menggunakan metrik jarak Wasserstein. |
population_stability_index | ganda | Metrik untuk membandingkan penyimpangan antara dua distribusi numerik menggunakan metrik indeks stabilitas populasi. Lihat [9] di bawah ini untuk detailnya. |
[7] Untuk rangkaian waktu atau profil inferensi, monitor melihat kembali 30 hari sejak monitor dibuat. Karena cutoff ini, analisis pertama mungkin mencakup jendela parsial. Misalnya, batas 30 hari mungkin turun di pertengahan minggu atau bulan, dalam hal ini minggu atau bulan penuh tidak termasuk dalam perhitungan. Masalah ini hanya memengaruhi jendela pertama.
[8] Versi yang ditunjukkan dalam kolom ini adalah versi yang digunakan untuk menghitung statistik dalam baris dan mungkin bukan versi monitor saat ini. Setiap kali Anda me-refresh metrik, monitor mencoba untuk mengolah ulang metrik yang dihitung sebelumnya menggunakan konfigurasi monitor saat ini. Versi monitor saat ini muncul di informasi monitor yang dikembalikan oleh API dan Klien Python.
[9] Output indeks stabilitas populasi adalah nilai numerik yang mewakili seberapa berbeda dua distribusi. Rentangnya adalah [0, inf). PSI < 0.1 berarti tidak ada perubahan populasi yang signifikan. PSI < 0.2 menunjukkan perubahan populasi sedang. PSI >= 0,2 menunjukkan perubahan populasi yang signifikan.