Simple Log Service utiliza la función de detección de anomalías para identificar automáticamente estados anómalos en los sistemas de servicio y sus causas raíz. Esta función combina el aprendizaje automático con el patrón actual de una métrica para detectar desviaciones del comportamiento normal. Las funciones de identificación de patrones multivariados admiten la detección de anomalías multidimensionales en métricas correlacionadas.
Lista de funciones de reconocimiento de patrones multivariados
|
Nombre de la función |
Sintaxis |
Descripción |
Tipo de dato del valor de retorno |
|
Identifica y devuelve un patrón multivariado basado en las muestras y los pesos de muestra especificados. Los pesos de muestra son opcionales. Los patrones estadísticos abarcan diversas estadísticas y estadísticas conjuntas, como la media, la desviación estándar y la matriz de covarianza. |
varchar |
|
|
Combina patrones multivariados devueltos por la función summarize. Estos patrones pueden provenir del aprendizaje sobre el mismo conjunto de datos en diferentes etapas o del aprendizaje sobre dos conjuntos de datos independientes. Para obtener más información, consulte summarize function. |
varchar |
|
|
normalize_vector(varchar summary, array(double) x_vector) |
Normaliza un nuevo vector de muestra especificado por el parámetro |
array(double) |
|
|
standardize_vector(varchar summary, array(double) x_vector) |
Estandariza un nuevo vector de muestra especificado por el parámetro |
array(double) |
|
|
mah_distance(varchar summary, array(double) x_vector) |
Calcula la distancia de Mahalanobis para un nuevo vector de muestra especificado por el parámetro |
double |
|
|
standard_distance(varchar summary, double metric_value, int element_index) |
Calcula la distancia estandarizada para una métrica especificada por el parámetro |
double |
|
|
Calcula la distancia de Mahalanobis para un nuevo vector de muestra especificado por el parámetro Si se especifica |
array(double) |
Función summarize
La función summarize identifica y devuelve un patrón multivariado basado en las muestras y los pesos de muestra especificados. Los pesos de muestra son opcionales. Los patrones estadísticos abarcan diversas estadísticas y estadísticas conjuntas, como la media, la desviación estándar y la matriz de covarianza.
varchar summarize(array(array(double)) data_samples)
O bien
varchar summarize(array(array(double)) data_samples, array(double) weights)
|
Parámetro |
Descripción |
|
|
Arreglo bidimensional que puede utilizarse como una tabla de dos dimensiones. Cada columna especifica una variable y cada fila especifica los valores de dicha variable para una muestra. |
|
|
Opcional. Arreglo unidimensional con la misma longitud que la primera dimensión de |
Ejemplo
-
Instrucción de consulta
* | 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 -
Valor de retorno
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 }Parámetros de respuesta
Parámetro
Descripción
sampleCountNúmero de muestras.
vectorSizeLongitud del vector.
meansValor promedio de cada componente en todos los vectores.
stdDevsDesviación estándar de cada componente en todos los vectores.
variancesVarianza de cada componente en todos los vectores.
minsValor mínimo de cada componente en todos los vectores.
maxsValor máximo de cada componente en todos los vectores.
covarianceMatriz de covarianza entre los componentes de todos los vectores.
correlationsMatriz de coeficientes de correlación entre los componentes de todos los vectores.
sumsSuma de cada componente en todos los vectores.
weightSumSuma de todos los pesos de las muestras.
sumProductsResultado intermedio utilizado al combinar patrones estadísticos.
isSummarizedIndica si el cálculo del patrón estadístico se completó correctamente.
-
true: La solicitud fue exitosa.
-
false: La solicitud falló.
-
Función merge_summary
Puede utilizar summarize function para combinar patrones aprendidos en diferentes etapas, como patrones obtenidos del mismo conjunto de datos en distintos momentos o patrones provenientes de dos conjuntos de datos independientes.
varchar merge_summary(varchar summary1, varchar summary2)
O bien
varchar merge_summary(varchar summary1, double weight1, varchar summary2, double weight2)
|
Parámetro |
Descripción |
|
|
Patrón multivariado devuelto por la función summarize. Para obtener más información, consulte summarize function. |
|
|
Peso global del patrón summary1. |
|
|
Patrón derivado de summarize function. |
|
|
Especifica el peso global del patrón summary2. |
Ejemplo
-
Instrucción de consulta
* | 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 -
Resultados de la consulta y el análisis
statistical_summaryrepresenta el patrón agregado.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 }Parámetros de retorno:
Parámetro
Descripción
sampleCountNúmero de muestras.
vectorSizeLongitud del vector.
meansValor promedio de cada componente en todos los vectores.
stdDevsDesviación estándar de cada componente en todos los vectores.
variancesVarianza de cada componente en todos los vectores.
minsValor mínimo de cada componente en todos los vectores.
maxsValor máximo de cada componente en todos los vectores.
covarianceMatriz de covarianza entre los componentes de todos los vectores.
correlationsMatriz de coeficientes de correlación entre los componentes de todos los vectores.
sumsSuma de cada componente en todos los vectores.
weightSumSuma de todos los pesos de las muestras.
sumProductsResultado intermedio utilizado al combinar patrones estadísticos.
isSummarizedIndica si el cálculo del patrón estadístico se completó correctamente.
-
true: La solicitud fue exitosa.
-
false: La solicitud falló.
-
Función normalize_vector
Puede utilizar el resumen de patrón multivariado obtenido mediante summarize function para normalizar el nuevo vector de muestra x_vector, lo cual asigna cada uno de sus componentes al intervalo [0, 1].
array(double) normalize_vector(varchar summary, array(double) x_vector)
|
Parámetro |
Descripción |
|
|
Patrón derivado del proceso de aprendizaje de summarize function. |
|
|
Nuevos datos de muestra. |
Ejemplo
-
Instrucción de consulta
* | 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 -
Resultados de la consulta y el análisis
El parámetro
normalized_featuresindica los resultados de la normalización del vector de muestra especificado por el parámetrox_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]
...
...
...
Función standardize_vector
Utilice el resumen de patrón multivariado de summarize function para estandarizar el nuevo vector de muestra x_vector de modo que sus componentes tengan una media de 0 y una desviación estándar de 1.
array(double) standardize_vector(varchar summary, array(double) x_vector)
|
Parámetro |
Descripción |
|
|
Patrón derivado del proceso de aprendizaje de summarize function. |
|
|
Nuevos datos de muestra. |
Ejemplo
-
Instrucción de consulta
* | 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 -
Resultados de la consulta y el análisis
El parámetro
standardized_featuresindica los resultados de la estandarización del vector de muestra especificado por el parámetrox_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]
...
...
...
Función mah_distance
La función mah_distance calcula la distancia de Mahalanobis para un nuevo vector de muestra especificado por el parámetro x_vector con base en un patrón definido por el parámetro summary. Puede establecer el parámetro summary en un patrón devuelto por la función summarize. Para obtener más información, consulte summarize function. La distancia de Mahalanobis considera las diferencias de escala entre variables y mide la distancia entre el vector de muestra estandarizado y el centroide. Una distancia de Mahalanobis igual a 1 significa que el vector de muestra se encuentra a la distancia promedio del centroide respecto a todos los vectores.
double mah_distance(varchar summary, array(double) x_vector)
|
Parámetro |
Descripción |
|
|
Patrón derivado del proceso de aprendizaje de summarize function. |
|
|
Nuevos datos de muestra. |
Ejemplo
-
Instrucción de consulta
* | 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 -
Valor de retorno
El parámetro
std_distanceindica la distancia de Mahalanobis del vector de muestra especificado por el parámetrox_vector.entity_id
entity_group
std_distance
8
A
2.386927730244857
7
A
1.6809080087793125
1
A
1.5554594371997328
...
...
...
Función standard_distance
La función standard_distance calcula la distancia estandarizada para una métrica especificada por el parámetro metric_value con base en un patrón definido por el parámetro summary. Puede establecer el parámetro summary en un patrón devuelto por la función summarize. Para obtener más información, consulte summarize function. A diferencia de la distancia de Mahalanobis, que mide la distancia estandarizada entre un vector multimétrico y su centroide, la distancia estandarizada mide la distancia correspondiente a una sola métrica dentro del vector. El parámetro element_index especifica el índice de la métrica (comenzando desde 0). El parámetro metric_value especifica el valor de la métrica.
double standard_distance(varchar summary, double metric_value, int element_index)
|
Parámetro |
Descripción |
|
|
Patrón aprendido mediante summarize function. |
|
|
Nuevos datos de muestra |
|
|
Índice de un elemento específico en el arreglo |
Ejemplo
-
Instrucción de consulta
* | 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 -
Resultados de la consulta y el análisis
std_distancees la distancia estandarizada de la muestra de entradametric_valueen el índice especificado.entity_id
entity_group
std_distance
8
A
2.386927730244857
7
A
1.6809080087793125
1
A
1.5554594371997328
...
...
...
Función anomaly_level
La función anomaly_level calcula la distancia de Mahalanobis para un nuevo vector de muestra especificado por el parámetro x_vector, con base en un patrón definido por el parámetro summary, y redondea hacia abajo cada valor de distancia para obtener distintos niveles de probabilidad de anomalía. El parámetro summary se puede establecer con un patrón devuelto por la función summarize. Para más información, consulte summarize function. Un valor de retorno de 0.1 indica una probabilidad de anomalía del 10 % (anomalía de primer nivel). Un valor de 0.01 indica una probabilidad del 1 % (segundo nivel). Un valor de 0.001 indica un 0.1 % (tercer nivel). Un valor de 0.0001 indica un 0.01 % (cuarto nivel). Los niveles de anomalía más altos corresponden a probabilidades menores y a una mayor sospecha de anomalías. Configure un umbral para filtrar los resultados; por ejemplo, conserve solo las anomalías de cuarto nivel en adelante.
Si especifica el parámetro element_index, la función calcula la probabilidad de anomalía únicamente para el componente en ese índice. De lo contrario, calcula la probabilidad de anomalía para todo el vector.
double anomaly_level(varchar summary, array(double) x_vector)
O bien
double anomaly_level(varchar summary, array(double) x_vector, int element_index)
|
Parámetro |
Descripción |
|
|
The summarize function utiliza un proceso de aprendizaje para generar un patrón. |
|
|
Los nuevos datos de muestra. |
|
|
Opcional. El elemento en el índice especificado dentro del arreglo |
Ejemplo
-
Instrucción de consulta
* | 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 -
Resultados de la consulta y el análisis
El parámetro
anomaly_levelindica la probabilidad de anomalía del vector de muestra especificado por el parámetrox_vector.group_id
object_id
anomaly_level
G1
1007
13.0
G1
1006
5.0
G1
1005
4.0
...
...
...