Bagikan melalui


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 oleh output_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 <= 10setiap 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 dan prediction_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 dan InferenceLog 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_namestandar .
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, recalldan 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.