Layanan Log Sederhana menggunakan fitur deteksi anomali untuk secara otomatis mengidentifikasi kondisi abnormal pada sistem layanan beserta akar penyebabnya. Fitur ini menggabungkan pembelajaran mesin dengan pola metrik saat ini guna mendeteksi penyimpangan dari perilaku normal. Fungsi identifikasi pola multivariat mendukung deteksi anomali multidimensi pada metrik yang saling berkorelasi.
Daftar fungsi pengenalan pola multivariat
|
Nama fungsi |
Sintaksis |
Deskripsi |
Tipe data nilai kembali |
|
Mengidentifikasi dan mengembalikan pola multivariat berdasarkan sampel dan bobot sampel yang ditentukan. Bobot sampel bersifat opsional. Pola statistik mencakup berbagai statistik dan statistik gabungan, seperti rata-rata, deviasi standar, dan matriks kovarians. |
varchar |
|
|
Menggabungkan pola multivariat yang dikembalikan oleh fungsi summarize. Pola multivariat tersebut dapat berupa pola yang diperoleh dari pembelajaran terhadap dataset yang sama pada tahap berbeda atau pola yang diperoleh dari dua dataset independen. Untuk informasi selengkapnya, lihat fungsi summarize. |
varchar |
|
|
normalize_vector(varchar summary, array(double) x_vector) |
Menormalisasi vektor sampel baru yang ditentukan oleh parameter |
array(double) |
|
|
standardize_vector(varchar summary, array(double) x_vector) |
Menstandarisasi vektor sampel baru yang ditentukan oleh parameter |
array(double) |
|
|
mah_distance(varchar summary, array(double) x_vector) |
Menghitung jarak Mahalanobis untuk vektor sampel baru yang ditentukan oleh parameter |
double |
|
|
standard_distance(varchar summary, double metric_value, int element_index) |
Menghitung jarak terstandarisasi untuk metrik yang ditentukan oleh parameter |
double |
|
|
Menghitung jarak Mahalanobis untuk vektor sampel baru yang ditentukan oleh parameter Jika |
array(double) |
Fungsi summarize
Fungsi summarize mengidentifikasi dan mengembalikan pola multivariat berdasarkan sampel dan bobot sampel yang ditentukan. Bobot sampel bersifat opsional. Pola statistik mencakup berbagai statistik dan statistik gabungan, seperti rata-rata, deviasi standar, dan matriks kovarians.
varchar summarize(array(array(double)) data_samples)
Atau
varchar summarize(array(array(double)) data_samples, array(double) weights)
|
Parameter |
Deskripsi |
|
|
Array dua dimensi. Array ini dapat digunakan sebagai tabel dua dimensi. Setiap kolom menentukan sebuah variabel. Setiap baris menentukan nilai variabel dari suatu sampel. |
|
|
Opsional. Array satu dimensi dengan panjang yang sama dengan dimensi pertama |
Contoh
-
Pernyataan kueri
* | with data_table as ( select 1 as entity_id, 'A' as entity_group, cast(array[1, 2, 3, 0] as array(double)) as features union all select 2 as entity_id, 'A' as entity_group, cast(array[4, 5, 6, 0] as array(double)) as features union all select 3 as entity_id, 'A' as entity_group, cast(array[7, 8, 9, 0] as array(double)) as features union all select 4 as entity_id, 'A' as entity_group, cast(array[10, 11, 1, 0] as array(double)) as features union all select 5 as entity_id, 'A' as entity_group, cast(array[13, 14, 15, 0] as array(double)) as features union all select 6 as entity_id, 'A' as entity_group, cast(array[16, 17, 18, 0] as array(double)) as features union all select 7 as entity_id, 'A' as entity_group, cast(array[19, 20, 21, 0] as array(double)) as features union all select 8 as entity_id, 'A' as entity_group, cast(array[22, 23, 1, 0] as array(double)) as features ) select entity_group, summarize(array_agg(features)) as statistical_summary from data_table group by entity_group -
Nilai kembali
entity_group
statistical_summary
A
{ "sampleCount": 8, "vectorSize": 4, "means": [ 11.5, 12.5, 9.25, 0.0 ], "stdDevs": [ 6.87386354243376, 6.87386354243376, 7.361215932167728, 0.0 ], "variances": [ 47.25, 47.25, 54.1875, 0.0 ], "mins": [ 1.0, 2.0, 1.0, 0.0 ], "maxs": [ 22.0, 23.0, 21.0, 0.0 ], "covariance": [ [ 47.25, 47.25, 19.125, 0.0 ], [ 47.25, 47.25, 19.125, 0.0 ], [ 19.125, 19.125, 54.1875, 0.0 ], [ 0.0, 0.0, 0.0, 0.0 ] ], "correlations": [ [ 1.0, 1.0, 0.37796447300922725, 0.0 ], [ 1.0, 1.0, 0.37796447300922725, 0.0 ], [ 0.37796447300922725, 0.37796447300922725, 1.0, 0.0 ], [ 0.0, 0.0, 0.0, 1.0 ] ], "sums": [ 92.0, 100.0, 74.0, 0.0 ], "weightSum": 8.0, "sumProducts": [ [ 1436.0, 1528.0, 1004.0, 0.0 ], [ 1528.0, 1628.0, 1078.0, 0.0 ], [ 1004.0, 1078.0, 1118.0, 0.0 ], [ 0.0, 0.0, 0.0, 0.0 ] ], "isSummarized": true }Parameter respons
Parameter
Deskripsi
sampleCountJumlah sampel.
vectorSizePanjang vektor.
meansNilai rata-rata setiap komponen di seluruh vektor.
stdDevsDeviasi standar setiap komponen di seluruh vektor.
variancesVariansi setiap komponen di seluruh vektor.
minsNilai minimum setiap komponen di seluruh vektor.
maxsNilai maksimum setiap komponen di seluruh vektor.
covarianceMatriks kovarians antar komponen semua vektor.
correlationsMatriks koefisien korelasi antar komponen semua vektor.
sumsJumlah setiap komponen di seluruh vektor.
weightSumJumlah semua bobot sampel.
sumProductsHasil antara yang digunakan saat menggabungkan pola statistik.
isSummarizedMenunjukkan apakah perhitungan pola statistik berhasil dilakukan.
-
true: Permintaan berhasil.
-
false: Permintaan gagal.
-
fungsi merge_summary
Anda dapat menggunakan fungsi summarize untuk menggabungkan pola yang dipelajari pada tahap berbeda, seperti pola yang dipelajari dari dataset yang sama pada waktu berbeda atau pola dari dua dataset independen.
varchar merge_summary(varchar summary1, varchar summary2)
Atau
varchar merge_summary(varchar summary1, double weight1, varchar summary2, double weight2)
|
Parameter |
Deskripsi |
|
|
Pola multivariat yang dikembalikan oleh fungsi summarize. Untuk informasi selengkapnya, lihat fungsi summarize. |
|
|
Bobot keseluruhan untuk pola summary1. |
|
|
Pola ini diperoleh dari fungsi summarize. |
|
|
Menentukan bobot keseluruhan untuk pola summary2. |
Contoh
-
Pernyataan kueri
* | with data_table_01 as ( select 1 as entity_id, 'A' as entity_group, cast(array[1, 2, 3, 0] as array(double)) as features union all select 2 as entity_id, 'A' as entity_group, cast(array[4, 5, 6, 0] as array(double)) as features union all select 3 as entity_id, 'A' as entity_group, cast(array[7, 8, 9, 0] as array(double)) as features union all select 4 as entity_id, 'A' as entity_group, cast(array[10, 11, 1, 0] as array(double)) as features ), summaries_01 as ( select entity_group, summarize(array_agg(features)) as statistical_summary from data_table_01 group by entity_group ), data_table_02 as ( select 5 as entity_id, 'A' as entity_group, cast(array[13, 14, 15, 0] as array(double)) as features union all select 6 as entity_id, 'A' as entity_group, cast(array[16, 17, 18, 0] as array(double)) as features union all select 7 as entity_id, 'A' as entity_group, cast(array[19, 20, 21, 0] as array(double)) as features union all select 8 as entity_id, 'A' as entity_group, cast(array[22, 23, 1, 0] as array(double)) as features ), summaries_02 as ( select entity_group, summarize(array_agg(features)) as statistical_summary from data_table_02 group by entity_group ) select s1.entity_group, merge_summary(s1.statistical_summary, s2.statistical_summary) as statistical_summary from summaries_01 as s1 join summaries_02 as s2 on s1.entity_group = s2.entity_group -
Hasil kueri dan analisis
statistical_summaryadalah pola agregasi.entity_group
statistical_summary
2
{ "sampleCount": 8, "vectorSize": 4, "means": [ 11.5, 12.5, 9.25, 0.0 ], "stdDevs": [ 6.87386354243376, 6.87386354243376, 7.361215932167728, 0.0 ], "variances": [ 47.25, 47.25, 54.1875, 0.0 ], "mins": [ 1.0, 2.0, 1.0, 0.0 ], "maxs": [ 22.0, 23.0, 21.0, 0.0 ], "covariance": [ [ 47.25, 47.25, 19.125, 0.0 ], [ 47.25, 47.25, 19.125, 0.0 ], [ 19.125, 19.125, 54.1875, 0.0 ], [ 0.0, 0.0, 0.0, 0.0 ] ], "correlations": [ [ 1.0, 1.0, 0.37796447300922725, 0.0 ], [ 1.0, 1.0, 0.37796447300922725, 0.0 ], [ 0.37796447300922725, 0.37796447300922725, 1.0, 0.0 ], [ 0.0, 0.0, 0.0, 1.0 ] ], "sums": [ 92.0, 100.0, 74.0, 0.0 ], "weightSum": 8.0, "sumProducts": [ [ 1436.0, 1528.0, 1004.0, 0.0 ], [ 1528.0, 1628.0, 1078.0, 0.0 ], [ 1004.0, 1078.0, 1118.0, 0.0 ], [ 0.0, 0.0, 0.0, 0.0 ] ], "isSummarized": true }Parameter kembali:
Parameter
Deskripsi
sampleCountJumlah sampel.
vectorSizePanjang vektor.
meansNilai rata-rata setiap komponen di seluruh vektor.
stdDevsDeviasi standar setiap komponen di seluruh vektor.
variancesVariansi setiap komponen di seluruh vektor.
minsNilai minimum setiap komponen di seluruh vektor.
maxsNilai maksimum setiap komponen di seluruh vektor.
covarianceMatriks kovarians antar komponen semua vektor.
correlationsMatriks koefisien korelasi antar komponen semua vektor.
sumsJumlah setiap komponen di seluruh vektor.
weightSumJumlah semua bobot sampel.
sumProductsHasil antara yang digunakan saat menggabungkan pola statistik.
isSummarizedMenunjukkan apakah perhitungan pola statistik berhasil dilakukan.
-
true: Permintaan berhasil.
-
false: Permintaan gagal.
-
fungsi normalize_vector
Anda dapat menggunakan ringkasan pola multivariat yang diperoleh dari fungsi summarize untuk menormalisasi vektor sampel baru x_vector, yang memetakan setiap komponennya ke interval [0, 1].
array(double) normalize_vector(varchar summary, array(double) x_vector)
|
Parameter |
Deskripsi |
|
|
Pola ini diperoleh dari proses pembelajaran fungsi summarize. |
|
|
Data sampel baru. |
Contoh
-
Pernyataan kueri
* | with data_table as ( select 1 as entity_id, 'A' as entity_group, cast(array[1, 2, 3, 0] as array(double)) as features union all select 2 as entity_id, 'A' as entity_group, cast(array[4, 5, 6, 0] as array(double)) as features union all select 3 as entity_id, 'A' as entity_group, cast(array[7, 8, 9, 0] as array(double)) as features union all select 4 as entity_id, 'A' as entity_group, cast(array[10, 11, 1, 0] as array(double)) as features union all select 5 as entity_id, 'A' as entity_group, cast(array[13, 14, 15, 0] as array(double)) as features union all select 6 as entity_id, 'A' as entity_group, cast(array[16, 17, 18, 0] as array(double)) as features union all select 7 as entity_id, 'A' as entity_group, cast(array[19, 20, 21, 0] as array(double)) as features union all select 8 as entity_id, 'A' as entity_group, cast(array[22, 23, 1, 0] as array(double)) as features ), summaries as ( select entity_group, summarize(array_agg(features)) as statistical_summary from data_table group by entity_group ) select t1.entity_id, t1.entity_group, normalize_vector(t2.statistical_summary, t1.features) as normalized_features from data_table as t1 join summaries as t2 on t1.entity_group = t2.entity_group -
Hasil kueri dan analisis
Parameter
normalized_featuresmenunjukkan hasil normalisasi vektor sampel yang ditentukan oleh parameterx_vector.entity_id
entity_group
normalized_features
2
A
[0.14285714285714286,0.14285714285714286,0.25,0.5]
4
A
[0.42857142857142857,0.42857142857142857,0.0,0.5]
3
A
[0.2857142857142857,0.2857142857142857,0.4,0.5]
...
...
...
fungsi standardize_vector
Gunakan ringkasan pola multivariat dari fungsi summarize untuk menstandarisasi vektor sampel baru x_vector sehingga komponen-komponennya memiliki rata-rata 0 dan deviasi standar 1.
array(double) standardize_vector(varchar summary, array(double) x_vector)
|
Parameter |
Deskripsi |
|
|
Pola ini diperoleh dari proses pembelajaran fungsi summarize. |
|
|
Data sampel baru. |
Contoh
-
Pernyataan kueri
* | with data_table as ( select 1 as entity_id, 'A' as entity_group, cast(array[1, 2, 3, 0] as array(double)) as features union all select 2 as entity_id, 'A' as entity_group, cast(array[4, 5, 6, 0] as array(double)) as features union all select 3 as entity_id, 'A' as entity_group, cast(array[7, 8, 9, 0] as array(double)) as features union all select 4 as entity_id, 'A' as entity_group, cast(array[10, 11, 1, 0] as array(double)) as features union all select 5 as entity_id, 'A' as entity_group, cast(array[13, 14, 15, 0] as array(double)) as features union all select 6 as entity_id, 'A' as entity_group, cast(array[16, 17, 18, 0] as array(double)) as features union all select 7 as entity_id, 'A' as entity_group, cast(array[19, 20, 21, 0] as array(double)) as features union all select 8 as entity_id, 'A' as entity_group, cast(array[22, 23, 1, 0] as array(double)) as features ), summaries as ( select entity_group, summarize(array_agg(features)) as statistical_summary from data_table group by entity_group ) select t1.entity_id, t1.entity_group, standardize_vector(t2.statistical_summary, t1.features) as standardized_features from data_table as t1 join summaries as t2 on t1.entity_group = t2.entity_group -
Hasil kueri dan analisis
Parameter
standardized_featuresmenunjukkan hasil standarisasi vektor sampel yang ditentukan oleh parameterx_vector.entity_id
entity_group
standardized_features
2
A
[-1.0910894511799619,-1.0910894511799619,-0.4415031470273609,0.0]
4
A
[-0.21821789023599237,-0.21821789023599237,-1.1207387578386854,0.0]
3
A
[-0.6546536707079771,-0.6546536707079771,-0.03396178054056622,0.0]
...
...
...
fungsi mah_distance
Fungsi mah_distance menghitung jarak Mahalanobis untuk vektor sampel baru yang ditentukan oleh parameter x_vector berdasarkan pola yang ditentukan oleh parameter summary. Anda dapat mengatur parameter summary ke pola yang dikembalikan oleh fungsi summarize. Untuk informasi selengkapnya, lihat fungsi summarize. Jarak Mahalanobis memperhitungkan perbedaan skala antar variabel dan mengukur jarak antara vektor sampel yang telah distandarisasi dan pusatnya. Jarak Mahalanobis sebesar 1 berarti vektor sampel berada pada jarak rata-rata dari pusat dibandingkan semua vektor.
double mah_distance(varchar summary, array(double) x_vector)
|
Parameter |
Deskripsi |
|
|
Pola ini diperoleh dari proses pembelajaran fungsi summarize. |
|
|
Data sampel baru. |
Contoh
-
Pernyataan kueri
* | with data_table as ( select 1 as entity_id, 'A' as entity_group, cast(array[1, 2, 3, 0] as array(double)) as features union all select 2 as entity_id, 'A' as entity_group, cast(array[4, 5, 6, 0] as array(double)) as features union all select 3 as entity_id, 'A' as entity_group, cast(array[7, 8, 9, 0] as array(double)) as features union all select 4 as entity_id, 'A' as entity_group, cast(array[10, 11, 1, 0] as array(double)) as features union all select 5 as entity_id, 'A' as entity_group, cast(array[13, 14, 15, 0] as array(double)) as features union all select 6 as entity_id, 'A' as entity_group, cast(array[16, 17, 18, 0] as array(double)) as features union all select 7 as entity_id, 'A' as entity_group, cast(array[19, 20, 21, 0] as array(double)) as features union all select 8 as entity_id, 'A' as entity_group, cast(array[22, 23, 1, 0] as array(double)) as features ), summaries as ( select entity_group, summarize(array_agg(features)) as statistical_summary from data_table group by entity_group ) select t1.entity_id, t1.entity_group, mah_distance(t2.statistical_summary, t1.features) as std_distance from data_table as t1 join summaries as t2 on t1.entity_group = t2.entity_group -
Nilai kembali
Parameter
std_distancemenunjukkan jarak Mahalanobis dari vektor sampel yang ditentukan oleh parameterx_vector.entity_id
entity_group
std_distance
8
A
2.386927730244857
7
A
1.6809080087793125
1
A
1.5554594371997328
...
...
...
fungsi standard_distance
Fungsi standard_distance menghitung jarak terstandarisasi untuk metrik yang ditentukan oleh parameter metric_value berdasarkan pola yang ditentukan oleh parameter summary. Anda dapat mengatur parameter summary ke pola yang dikembalikan oleh fungsi summarize. Untuk informasi selengkapnya, lihat fungsi summarize. Berbeda dengan jarak Mahalanobis yang mengukur jarak terstandarisasi antara vektor multi-metrik dan pusatnya, jarak terstandarisasi mengukur jarak untuk satu metrik tunggal dalam vektor tersebut. Parameter element_index menentukan indeks metrik (dimulai dari 0). Parameter metric_value menentukan nilai metrik tersebut.
double standard_distance(varchar summary, double metric_value, int element_index)
|
Parameter |
Deskripsi |
|
|
Pola yang dipelajari oleh fungsi summarize. |
|
|
Data sampel baru |
|
|
Indeks elemen tertentu dalam array |
Contoh
-
Pernyataan kueri
* | with data_table as ( select 1 as entity_id, 'A' as entity_group, cast(array[1, 2, 3, 0] as array(double)) as features union all select 2 as entity_id, 'A' as entity_group, cast(array[4, 5, 6, 0] as array(double)) as features union all select 3 as entity_id, 'A' as entity_group, cast(array[7, 8, 9, 0] as array(double)) as features union all select 4 as entity_id, 'A' as entity_group, cast(array[10, 11, 1, 0] as array(double)) as features union all select 5 as entity_id, 'A' as entity_group, cast(array[13, 14, 15, 0] as array(double)) as features union all select 6 as entity_id, 'A' as entity_group, cast(array[16, 17, 18, 0] as array(double)) as features union all select 7 as entity_id, 'A' as entity_group, cast(array[19, 20, 21, 0] as array(double)) as features union all select 8 as entity_id, 'A' as entity_group, cast(array[22, 23, 1, 0] as array(double)) as features ), summaries as ( select entity_group, summarize(array_agg(features)) as statistical_summary from data_table group by entity_group ) select t1.entity_id, t1.entity_group, standard_distance(t2.statistical_summary, 30, 1) as std_distance from data_table as t1 join summaries as t2 on t1.entity_group = t2.entity_group -
Hasil kueri dan analisis
std_distanceadalah jarak terstandarisasi dari sampel inputmetric_valuepada indeks yang ditentukan.entity_id
entity_group
std_distance
8
A
2.386927730244857
7
A
1.6809080087793125
1
A
1.5554594371997328
...
...
...
fungsi anomaly_level
Fungsi anomaly_level menghitung jarak Mahalanobis untuk vektor sampel baru yang ditentukan oleh parameter x_vector berdasarkan pola yang ditentukan oleh parameter summary, lalu membulatkan ke bawah setiap nilai jarak untuk memperoleh tingkat probabilitas anomali yang berbeda. Anda dapat mengatur parameter summary ke pola yang dikembalikan oleh fungsi summarize. Untuk informasi selengkapnya, lihat fungsi summarize. Nilai kembali 0,1 menunjukkan probabilitas abnormal 10% (anomali tingkat pertama). Nilai kembali 0,01 menunjukkan probabilitas 1% (tingkat kedua). Nilai kembali 0,001 menunjukkan 0,1% (tingkat ketiga). Nilai kembali 0,0001 menunjukkan 0,01% (tingkat keempat). Tingkat anomali yang lebih tinggi berarti probabilitas yang lebih rendah dan kecurigaan anomali yang lebih besar. Anda dapat mengonfigurasi ambang batas untuk menyaring hasil, misalnya hanya menyimpan anomali tingkat keempat dan di atasnya.
Jika Anda menentukan parameter element_index, fungsi hanya menghitung probabilitas anomali untuk komponen pada indeks tersebut. Jika tidak, fungsi menghitung probabilitas anomali untuk seluruh vektor.
double anomaly_level(varchar summary, array(double) x_vector)
Atau
double anomaly_level(varchar summary, array(double) x_vector, int element_index)
|
Parameter |
Deskripsi |
|
|
Fungsi summarize menggunakan proses pembelajaran untuk menghasilkan pola. |
|
|
Data sampel baru. |
|
|
Opsional. Elemen pada indeks tertentu dalam array |
Contoh
-
Pernyataan kueri
* | with dummy as ( select sequence(1, 1000) as seq_data, count(*) as record_count from log ), sample_data as ( select 'G1' as group_id, s.seq_num, -- Menghasilkan 1.000 vektor acak dua dimensi yang tersebar di sekitar rentang (100, 5000). Nilai deviasi standar kedua komponen adalah 20 dan 500. inverse_normal_cdf(100, 20, random()) as x1, inverse_normal_cdf(5000, 500, rand()) as x2 from dummy, unnest(seq_data) as s(seq_num) ), data_summary as ( select group_id, summarize(array_agg(array[x1, x2])) as metric_summary from sample_data group by group_id ), new_data as ( select 'G1' as group_id, 1001 as object_id, 100.0 as x1, 5000.0 as x2 union all select 'G1' as group_id, 1002 as object_id, 118.0 as x1, 5450.0 as x2 union all select 'G1' as group_id, 1003 as object_id, 138.0 as x1, 5950.0 as x2 union all select 'G1' as group_id, 1004 as object_id, 158.0 as x1, 6450.0 as x2 union all select 'G1' as group_id, 1005 as object_id, 178.0 as x1, 6950.0 as x2 union all select 'G1' as group_id, 1006 as object_id, 198.0 as x1, 7450.0 as x2 union all select 'G1' as group_id, 1007 as object_id, 318.0 as x1, 10000.0 as x2 ) select n.group_id, json_extract(s.metric_summary, '$.means') as metric_vector_mean, json_extract(s.metric_summary, '$.covariance') as metric_covariance, n.object_id, n.x1, n.x2, anomaly_level(s.metric_summary, array[x1, x2]) as anomaly_level from data_summary as s join new_data as n on s.group_id = n.group_id order by n.group_id, n.object_id limit 100000 -
Hasil kueri dan analisis
Parameter
anomaly_levelmenunjukkan probabilitas abnormal dari vektor sampel yang ditentukan oleh parameterx_vector.group_id
object_id
anomaly_level
G1
1007
13.0
G1
1006
5.0
G1
1005
4.0
...
...
...