Simple Log Serviceは、サービスシステムの異常と異常の根本原因を特定する異常検出機能を提供します。 異常検出機能は、メトリックの現在のパターンおよび機械学習に基づいて、異常なメトリック変化を自動的に識別することができる。 多変量パターン識別関数を使用して、メトリックパターンを識別できます。 このトピックでは、多変量パターン識別関数について説明します。
関数
関数 | 構文 | 説明 | 戻り値のデータ型 |
| 指定されたサンプルとサンプルの重みに基づいて、多変量パターンを識別して返します。 サンプルの重みはオプションです。 統計パターンは、平均、標準偏差、共分散行列など、さまざまな統計と共同統計をカバーします。 | varchar | |
| summarize関数によって返される多変量パターンをマージします。 多変量パターンは、異なる段階の同じデータセットから学習することによって得られるパターン、または2つの独立したデータセットから学習することによって得られるパターンであり得る。 詳細については、「summarize function」をご参照ください。 | varchar | |
normalize_vector(varchar summary, array(double) x_vector) | サマリーパラメーターで指定されたパターンに基づいて、 | 配列 (ダブル) | |
standardize_vector(varchar summary, array(double) x_vector) | サマリーパラメーターで指定されたパターンに基づいて、 | 配列 (ダブル) | |
mah_distance(varchar summary, array(double) x_vector) | サマリーパラメーターで指定されたパターンに基づいて、 | double | |
standard_distance(varchar summary, double metric_value, int element_index) |
| double | |
| サマリーパラメータで指定されたパターンに基づいて、
| 配列 (ダブル) |
要約関数
summal関数は、指定されたサンプルとサンプルの重みに基づいて多変量パターンを識別して返します。 サンプルの重みはオプションです。 統計パターンは、平均、標準偏差、共分散行列など、さまざまな統計と共同統計をカバーします。
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
ベクトルの長さ。
手段
すべてのベクトル成分の平均値。
stdDevs
すべてのベクトル成分の標準偏差値。
分散
すべてのベクトル成分の分散値。
mins
すべてのベクトル成分の最小値。
maxs
すべてのベクトル成分の最大値。
共分散
すべてのベクトル成分の共分散行列。
相関
すべてのベクトル成分の相関係数行列。
合計
すべてのベクトル成分の合計。
weightSum
すべてのサンプルの重みの合計。
sumProducts
統計パターンをマージするために使用される中間結果。
isSummarized
通常の多変量パターンが返されるかどうかを示します。 有効な値:
true
false
merge_summary関数
merge_summary関数は、summarize関数によって返される多変量パターンをマージします。 多変量パターンは、異なる段階の同じデータセットから学習することによって得られるパターン、または2つの独立したデータセットから学習することによって得られるパターンであり得る。 詳細については、「summarize function」をご参照ください。
varchar merge_summary(varchar summary1, varchar summary2)
または
varchar merge_summary(varchar summary1, double weight1, varchar summary2, double weight2)
パラメーター | 説明 |
| 要约関数によって返される多変量パターン。 詳細については、「summarize function」をご参照ください。 |
| summary1パラメーターで指定された多変量パターンの重み。 |
| 要约関数によって返される多変量パターン。 詳細については、「summarize function」をご参照ください。 |
| 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
クエリおよび分析の結果
statistic_summary
パラメーターは、マージ操作後に取得される多変量パターンを示します。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 }
クエリおよび分析結果のパラメーター
パラメーター
説明
sampleCount
サンプルの数。
vectorSize
ベクトルの長さ。
means
すべてのベクトル成分の平均値。
stdDevs
すべてのベクトル成分の標準偏差値。
variances
すべてのベクトル成分の分散値。
mins
すべてのベクトル成分の最小値。
maxs
すべてのベクトル成分の最大値。
covariance
すべてのベクトル成分の共分散行列。
correlations
すべてのベクトル成分の相関係数行列。
sums
すべてのベクトル成分の合計。
weightSum
すべてのサンプルの重みの合計。
sumProducts
統計パターンをマージするために使用される中間結果。
isSummarized
通常の多変量パターンが返されるかどうかを示します。 有効な値:
true
false
normalize_vector関数
normalize_vector関数は、サマリーパラメーターで指定されたパターンに基づいて、x_vector
パラメーターで指定された新しいサンプルベクトルを正規化します。 ベクトルの各コンポーネントが [0,1] 間隔にマップされていることを確認します。 summaryパラメーターは、summary関数によって返されるパターンに設定できます。 詳細については、「summarize function」をご参照ください。
array(double) normalize_vector(varchar summary, array(double) x_vector)
パラメーター | 説明 |
| 要约関数によって返される多変量パターン。 詳細については、「summarize function」をご参照ください。 |
| 新しいサンプルデータ。 |
例
クエリ文
* | 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関数
standardize_vector関数は、サマリーパラメーターで指定されたパターンに基づいて、x_vector
パラメーターで指定された新しいサンプルベクトルを標準化します。 ベクトルの成分が0の平均および1の標準偏差を有することを確認する。 summaryパラメーターは、summary関数によって返されるパターンに設定できます。 詳細については、「summarize function」をご参照ください。
array(double) standardize_vector(varchar summary, array(double) x_vector)
パラメーター | 説明 |
| 要约関数によって返される多変量パターン。 詳細については、「summarize function」をご参照ください。 |
| 新しいサンプルデータ。 |
例
クエリ文
* | 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
パラメーターで指定されたサンプルベクトルの標準化結果を示します。entity_id
entity_group
標準化された_機能
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関数は、サマリーパラメータで指定されたパターンに基づいて、x_vector
パラメータで指定された新しいサンプルベクトルのマハラノビス距離を計算します。 summaryパラメーターは、summary関数によって返されるパターンに設定できます。 詳細については、「summarize function」をご参照ください。 マハラノビス距離を使用して、さまざまな変数間のスケールの違いを効果的に処理できます。 マハラノビス距離は、ベクトルが標準化された後のx_vector
パラメータによって指定されたサンプルベクトルとベクトルの重心との間の距離を測定する。 マハラノビス距離が1である場合、サンプルベクトルとベクトルの重心との間の距離は、すべてのベクトルとベクトルの重心との間の平均距離に等しい。
double mah_distance(varchar summary, array(double) x_vector)
パラメーター | 説明 |
| 要约関数によって返される多変量パターン。 詳細については、「summarize function」をご参照ください。 |
| 新しいサンプルデータ。 |
例
クエリ文
* | 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パラメーターは、summary関数によって返されるパターンに設定できます。 詳細については、「summarize function」をご参照ください。 要約関数標準化された距離は、マハラノビス距離に似ています。 マハラノビス距離は、複数のメトリックからなるベクトルとベクトルの重心との間の標準化された距離を測定する。 標準化された距離は、ベクトルのメトリックとベクトルの重心との間の距離を測定する。 element_index
パラメーターは、メトリックのインデックスを指定します。 インデックスは0から始まります。 metric_value
パラメーターは、メトリックの値を指定します。
double standard_distance(varchar summary, double metric_value, int element_index)
パラメーター | 説明 |
| 要约関数によって返される多変量パターン。 詳細については、「summarize function」をご参照ください。 |
| メトリック。 |
|
|
例
クエリ文
* | 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
パラメータによって指定された新しいサンプルベクトルのマハラノビス距離を計算し、各距離値を切り捨てて、異なるレベルの異常確率を取得します。 summaryパラメーターは、summary関数によって返されるパターンに設定できます。 詳細については、「summarize function」をご参照ください。 戻り値が0.1の場合、新しいサンプルベクトルが異常である確率が10% されます。 この値は、第1レベルの異常を示す。 戻り値が0.01の場合、新しいサンプルベクトルが異常である確率が1% されます。 この値は、第2レベルの異常を示す。 戻り値が0.001の場合、新しいサンプルベクトルが異常である確率が0.1% されます。 この値は、第3レベルの異常を示す。 戻り値が0.0001の場合、新しいサンプルベクトルが異常である確率が0.01% されます。 この値は、第4レベルの異常を示す。 異常のレベルの増加は、新しいサンプルベクトルの異常な確率の減少およびベクトルの疑わしい可能性の減少を示す。 ほとんどの場合、異常検出結果に基づいて異常をフィルタリングするためのしきい値を設定できます。 たとえば、第4レベル以上の異常のみを保持するようにしきい値を設定できます。
element_index
パラメーターに値を指定した場合、関数は指定されたベクトルの指定されたインデックスを持つメトリックに対してのみ確率を返します。 element_indexパラメーターを設定しない場合、関数は指定されたベクトルの各メトリックの確率を返します。
double anomaly_level(varchar summary, array(double) x_vector)
または
double anomaly_level(varchar summary, array(double) x_vector, int element_index)
パラメーター | 説明 |
| 要约関数によって返される多変量パターン。 詳細については、「summarize function」をご参照ください。 |
| 新しいサンプルデータ。 |
| 必要に応じて、 インデックス。 |
例
クエリ文
* | 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, -- Generate 1,000 two-dimensional random vectors that are distributed around the (100, 5000) range. The standard deviation values of two components are 20 and 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
パラメーターで指定されたサンプルベクトルの異常確率を示します。グループ_id
オブジェクト_id
anomality_level
G1
1007
13.0
G1
1006
5.0
G1
1005
4.0
...
...
...