Bagikan melalui


Menggunakan metrik kustom dengan Databricks Lakehouse Monitoring

Halaman ini menjelaskan cara membuat metrik kustom di Databricks Lakehouse Monitoring. Selain analisis dan statistik penyimpangan yang dihitung secara otomatis, Anda dapat membuat metrik kustom. Misalnya, Anda mungkin ingin melacak rata-rata tertimbang yang menangkap beberapa aspek logika bisnis atau menggunakan skor kualitas model kustom. Anda juga dapat membuat metrik penyimpangan kustom yang melacak perubahan pada nilai dalam tabel utama (dibandingkan dengan garis besar atau jendela waktu sebelumnya).

Untuk detail selengkapnya tentang cara menggunakan MonitorMetric API, lihat referensi API.

Jenis metrik kustom

Databricks Lakehouse Monitoring mencakup jenis metrik kustom berikut:

  • Metrik agregat, yang dihitung berdasarkan kolom dalam tabel utama. Metrik agregat disimpan dalam tabel metrik profil.
  • Metrik turunan, yang dihitung berdasarkan metrik agregat yang dihitung sebelumnya dan tidak secara langsung menggunakan data dari tabel utama. Metrik turunan disimpan dalam tabel metrik profil.
  • Metrik penyimpangan, yang membandingkan metrik agregat atau turunan yang dihitung sebelumnya dari dua jendela waktu yang berbeda, atau antara tabel utama dan tabel garis besar. Metrik penyimpangan disimpan dalam tabel metrik drift.

Menggunakan metrik turunan dan drift jika memungkinkan meminimalkan komputasi ulang atas tabel utama penuh. Hanya metrik agregat yang mengakses data dari tabel utama. Metrik turunan dan penyimpangan kemudian dapat dihitung langsung dari nilai metrik agregat.

Parameter metrik kustom

Untuk menentukan metrik kustom, Anda membuat templat Jinja untuk ekspresi kolom SQL. Tabel di bagian ini menjelaskan parameter yang menentukan metrik, dan parameter yang digunakan dalam templat Jinja.

Parameter Deskripsi
type Salah satu dari MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED, atau MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.
name Nama kolom untuk metrik kustom dalam tabel metrik.
input_columns Daftar nama kolom dalam tabel input yang harus dihitung metriknya. Untuk menunjukkan bahwa lebih dari satu kolom digunakan dalam perhitungan, gunakan :table. Lihat contoh dalam artikel ini.
definition Templat Jinja untuk ekspresi SQL yang menentukan cara menghitung metrik. Lihat Membuat definisi.
output_data_type Jenis data Spark dari output metrik dalam format string JSON.

Menciptakan definition

Parameter definition harus berupa ekspresi string tunggal dalam bentuk templat Jinja. Ini tidak boleh berisi gabungan atau subkueri.

Tabel berikut mencantumkan parameter yang bisa Anda gunakan untuk membuat Templat Jinja SQL untuk menentukan cara menghitung metrik.

Parameter Deskripsi
{{input_column}} Kolom yang digunakan untuk menghitung metrik kustom.
{{prediction_col}} Kolom yang menyimpan prediksi model ML. Digunakan dengan InferenceLog analisis.
{{label_col}} Kolom yang memegang label kebenaran dasar model ML. Digunakan dengan InferenceLog analisis.
{{current_df}} Untuk penyimpangan dibandingkan dengan jendela waktu sebelumnya. Data dari jendela waktu sebelumnya.
{{base_df}} Untuk penyimpangan dibandingkan dengan tabel garis besar. Data garis besar.

Contoh metrik agregat

Contoh berikut menghitung rata-rata kuadrat nilai dalam kolom, dan diterapkan ke kolom f1 dan f2. Output disimpan sebagai kolom baru dalam tabel metrik profil dan diperlihatkan dalam baris analisis yang sesuai dengan kolom f1 dan f2. Nama kolom yang berlaku digantikan untuk parameter {{input_column}}Jinja .

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="squared_avg",
    input_columns=["f1", "f2"],
    definition="avg(`{{input_column}}`*`{{input_column}}`)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Kode berikut menentukan metrik kustom yang menghitung rata-rata perbedaan antara kolom f1 dan f2. Contoh ini memperlihatkan penggunaan [":table"] dalam input_columns parameter untuk menunjukkan bahwa lebih dari satu kolom dari tabel digunakan dalam perhitungan.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="avg_diff_f1_f2",
    input_columns=[":table"],
    definition="avg(f1 - f2)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Contoh ini menghitung skor kualitas model tertimbang. Untuk pengamatan di mana critical kolom adalah True, penalti yang lebih berat ditetapkan ketika nilai yang diprediksi untuk baris tersebut tidak cocok dengan kebenaran dasar. Karena didefinisikan pada kolom mentah (prediction dan label), itu didefinisikan sebagai metrik agregat. Kolom :table menunjukkan bahwa metrik ini dihitung dari beberapa kolom. Parameter {{prediction_col}} Jinja dan {{label_col}} diganti dengan nama kolom prediksi dan label kebenaran dasar untuk monitor.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="weighted_error",
    input_columns=[":table"],
    definition="""avg(CASE
      WHEN {{prediction_col}} = {{label_col}} THEN 0
      WHEN {{prediction_col}} != {{label_col}} AND critical=TRUE THEN 2
      ELSE 1 END)""",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Contoh metrik turunan

Kode berikut menentukan metrik kustom yang menghitung akar kuadrat metrik yang squared_avg ditentukan sebelumnya di bagian ini. Karena ini adalah metrik turunan, metrik tersebut tidak mereferensikan data tabel utama dan sebaliknya didefinisikan dalam hal squared_avg metrik agregat. Output disimpan sebagai kolom baru dalam tabel metrik profil.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED,
    name="root_mean_square",
    input_columns=["f1", "f2"],
    definition="sqrt(squared_avg)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Contoh metrik penyimpangan

Kode berikut mendefinisikan metrik penyimpangan yang melacak perubahan metrik yang weighted_error ditentukan sebelumnya di bagian ini. Parameter {{current_df}} dan {{base_df}} memungkinkan metrik mereferensikan weighted_error nilai dari jendela saat ini dan jendela perbandingan. Jendela perbandingan dapat berupa data garis besar atau data dari jendela waktu sebelumnya. Metrik penyimpangan disimpan dalam tabel metrik drift.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT,
    name="error_rate_delta",
    input_columns=[":table"],
    definition="{{current_df}}.weighted_error - {{base_df}}.weighted_error",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)