Simple Log Service (SLS) は、異常検出機能を使用して、サービスシステムの異常状態とその根本原因を自動的に特定します。この機能は、機械学習とメトリックの現在のパターンを組み合わせ、正常な動作からの逸脱を検出します。多変量パターン識別機能は、相関のあるメトリックにまたがる多次元の異常検出をサポートします。
多変量パターン認識機能 一覧
|
関数名 |
構文 |
説明 |
戻り値のデータ型 |
|
指定されたサンプルとサンプルの重みに基づいて多変量パターンを識別し、返します。サンプルの重みは任意です。統計的パターンには、平均、標準偏差、共分散行列など、さまざまな統計量および結合統計量が含まれます。 |
varchar |
|
|
summarize 関数によって返された多変量パターンをマージします。多変量パターンは、同じデータセットの異なる段階での学習によって取得されたパターン、または 2 つの独立したデータセットからの学習によって取得されたパターンのいずれかです。詳細については、「summarize 関数」をご参照ください。 |
varchar |
|
|
normalize_vector(varchar summary, array(double) x_vector) |
summary パラメータで指定されたパターンに基づき、 |
array(double) |
|
|
standardize_vector(varchar summary, array(double) x_vector) |
summary パラメータで指定されたパターンに基づき、 |
array(double) |
|
|
mah_distance(varchar summary, array(double) x_vector) |
summary パラメータで指定されたパターンに基づき、 |
double |
|
|
standard_distance(varchar summary, double metric_value, int element_index) |
|
double |
|
|
summary パラメータで指定されたパターンに基づき、
|
array(double) |
summarize 関数
summarize 関数は、指定したサンプルとサンプル重みに基づいて、多変量パターンを識別して返します。サンプル重みは任意です。統計パターンには、平均値、標準偏差、共分散行列など、さまざまな統計量と結合統計が含まれます。
varchar summarize(array(array(double)) data_samples)
または
varchar summarize(array(array(double)) data_samples, array(double) weights)
|
パラメーター |
説明 |
|
|
2 次元配列です。この配列は 2 次元テーブルとして使用できます。各列は変数を指定します。各行はサンプルの変数値を指定します。 |
|
|
任意です。 |
例
-
クエリ文
* | 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 -
戻り値
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 }応答パラメーター
パラメーター
説明
sampleCountサンプル数です。
vectorSizeベクターの長さです。
meansすべてのベクターの各成分の平均値です。
stdDevsすべてのベクターの各成分の標準偏差です。
variancesすべてのベクターの各成分の分散です。
minsすべてのベクターの各成分の最小値です。
maxsすべてのベクターの各成分の最大値です。
covarianceすべてのベクターの成分間の共分散行列です。
correlationsすべてのベクターの成分間の相関係数行列です。
sumsすべてのベクターの各成分の合計です。
weightSumすべてのサンプルの重みの合計です。
sumProducts統計パターンのマージ時に使用される中間結果です。
isSummarized統計パターンの計算が正常に完了したかどうかを示します。
-
true:リクエストは成功です。
-
false:リクエストは失敗です。
-
merge_summary 関数
summarize 関数 を使用すると、異なる段階で学習したパターンをマージできます。たとえば、同じデータセットを異なるタイミングで学習して得られたパターンや、2 つの独立したデータセットから得られたパターンをマージできます。
varchar merge_summary(varchar summary1, varchar summary2)
または
varchar merge_summary(varchar summary1, double weight1, varchar summary2, double weight2)
|
パラメーター |
説明 |
|
|
|
|
|
summary1 パターンの全体の重みです。 |
|
|
summarize 関数 が返すパターンです。 |
|
|
summary2 パターンの全体の重みを指定します。 |
例
-
クエリ文
* | 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 -
クエリと分析の結果
statistical_summaryは集約パターンです。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 }戻り値:
パラメーター
説明
sampleCountサンプル数です。
vectorSizeベクターの長さです。
meansすべてのベクターの各成分の平均値です。
stdDevsすべてのベクターの各成分の標準偏差です。
variancesすべてのベクターの各成分の分散です。
minsすべてのベクターの各成分の最小値です。
maxsすべてのベクターの各成分の最大値です。
covarianceすべてのベクターの成分間の共分散行列です。
correlationsすべてのベクターの成分間の相関係数行列です。
sumsすべてのベクターの各成分の合計です。
weightSumすべてのサンプルの重みの合計です。
sumProducts統計パターンのマージ時に使用される中間結果です。
isSummarized統計パターンの計算が正常に完了したかどうかを示します。
-
true:リクエストは成功です。
-
false:リクエストは失敗です。
-
normalize_vector 関数
summarize 関数で取得した多変量パターンの要約を使用して、新しいサンプルベクトル x_vector を正規化し、各成分を区間 [0, 1] にマッピングします。
array(double) normalize_vector(varchar summary, array(double) x_vector)
|
パラメーター |
説明 |
|
|
summarize 関数の学習プロセスから得られた要約です。 |
|
|
新しいサンプルデータです。 |
例
-
クエリ文
* | 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 -
クエリと分析結果
normalized_featuresパラメーターは、x_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]
...
...
...
standardize_vector 関数
summarize 関数の多変量パターンのサマリーを使用して、各成分の平均が 0、標準偏差が 1 になるように新しいサンプルベクトル x_vector を標準化します。
array(double) standardize_vector(varchar summary, array(double) x_vector)
|
パラメーター |
説明 |
|
|
summarize 関数の学習プロセスから得られた要約です。 |
|
|
新しいサンプルデータです。 |
例
-
クエリ文
* | 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 -
クエリと分析結果
standardized_featuresは、x_vectorパラメーターで指定したサンプルベクトルの標準化結果です。エンティティ ID
エンティティグループ
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]
...
...
...
mah_distance 関数
mah_distance 関数は、summary パラメーターで指定されたパターンに基づき、 x_vector パラメーターで指定された新しいサンプルベクトルのマハラノビス距離を計算します。summary パラメーターには、summarize 関数が返すパターンを設定できます。詳細については、「summarize 関数」をご参照ください。マハラノビス距離は、変数間のスケールの違いを考慮し、標準化されたサンプルベクトルとセントロイドとの間の距離を測定します。マハラノビス距離が 1 の場合、サンプルベクトルが、全ベクトルにおけるセントロイドからの平均的な距離にあることを意味します。
double mah_distance(varchar summary, array(double) x_vector)
|
パラメーター |
説明 |
|
|
summarize 関数の学習プロセスから得られた要約です。 |
|
|
新しいサンプルデータです。 |
例
-
クエリ文
* | 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 -
戻り値
std_distance列は、x_vectorパラメーターで指定されたサンプルベクトルのマハラノビス距離です。entity_id
entity_group
std_distance
8
A
2.386927730244857
7
A
1.6809080087793125
1
A
1.5554594371997328
...
...
...
standard_distance 関数
standard_distance 関数は、summary パラメーターで指定したパターンに基づいて、metric_value パラメーターで指定したメトリックの標準化距離を計算します。summary パラメーターには、summarize 関数が返すパターンをセットできます。詳細については、「summarize 関数」をご参照ください。マハラノビス距離 (Mahalanobis distance) がマルチメトリックベクターとその重心の間の標準化距離を測定するのに対し、この関数が計算する標準化距離は、ベクター内の単一メトリックの距離を測定します。element_index パラメーターはメトリックのインデックス (0 から始まる) を指定します。metric_value パラメーターはメトリックの値を指定します。
double standard_distance(varchar summary, double metric_value, int element_index)
|
パラメーター |
説明 |
|
|
summarize 関数で学習したパターンです。 |
|
|
新しいサンプルデータです。 |
|
|
サマリー配列内の指定した要素のインデックスです。最初の要素のインデックスは 0 です。 |
例
-
クエリ文
* | 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 -
クエリと分析結果
std_distanceは、指定したインデックスにおけるmetric_valueの標準化距離です。entity_id
entity_group
std_distance
8
A
2.386927730244857
7
A
1.6809080087793125
1
A
1.5554594371997328
...
...
...
anomaly_level 関数
anomaly_level 関数は、サマリーパラメーターで指定されたパターンに基づき、x_vector パラメーターで指定された新しいサンプルベクトルのマハラノビス距離を計算し、その結果からアノマリーレベルを導き出します。サマリーパラメーターには、summarize 関数によって返されるパターンを設定できます。詳細については、「summarize 関数」をご参照ください。アノマリーレベルは、値が大きいほど、アノマリーである疑いが強くなることを示します。たとえば、特定のアノマリーレベルをしきい値として設定し、その値を超える結果のみを保持するようにフィルタリングできます。
element_index パラメーターを指定した場合、この関数は、そのインデックスにある要素のアノマリーレベルのみを計算します。指定しない場合は、ベクトル全体のアノマリーレベルを計算します。
double anomaly_level(varchar summary, array(double) x_vector)
または
double anomaly_level(varchar summary, array(double) x_vector, int element_index)
|
パラメーター |
説明 |
|
|
summarize 関数は、学習プロセスを使用してパターンを生成します。 |
|
|
新しいサンプルデータです。 |
|
|
オプション。 |
例
-
クエリ文
* | 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, -- (100, 5000) を中心に分布する2次元のランダムベクトルを1,000個生成します。2つのコンポーネントの標準偏差は、それぞれ20と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 -
クエリと分析結果
anomaly_levelは、x_vectorパラメーターで指定されたサンプルベクトルのアノマリーレベルを示します。group_id
object_id
anomaly_level
G1
1007
13.0
G1
1006
5.0
G1
1005
4.0
...
...
...