Detección de anomalías y previsión

Los servicios en la nube y los dispositivos IoT generan datos de telemetría que se pueden usar para obtener información, como supervisar el estado del servicio, los procesos de producción físicos y las tendencias de uso. Realizar análisis de series temporales es una manera de identificar las desviaciones en el patrón de estas métricas en comparación con su patrón de línea de base típico.

Lenguaje de consulta Kusto (KQL) contiene compatibilidad nativa para la creación, manipulación y análisis de varias series temporales. Con KQL, puede crear y analizar miles de series temporales en segundos, lo que permite soluciones y flujos de trabajo de supervisión casi en tiempo real.

En este artículo se detallan las funcionalidades de detección y previsión de anomalías de series temporales de KQL. Las funciones de serie temporal aplicables se basan en un modelo de descomposición conocido sólido, en el que cada serie temporal original se descompone en los componentes estacional, residual y de tendencia. Las anomalías se detectan mediante los valores atípicos en el componente residual, mientras que la previsión se realiza mediante la extrapolación de los componentes estacional y de tendencia. La implementación de KQL mejora significativamente el modelo de descomposición básico mediante la detección automática de estacionalidad, el análisis de valores atípicos sólidos y la implementación vectorizada para procesar miles de series temporales en segundos.

Requisitos previos

  • Una cuenta de Microsoft o una identidad de usuario Microsoft Entra. No se necesita una suscripción a Azure.
  • Lea Análisis de series temporales para obtener información general sobre las funcionalidades de serie temporal.

Modelo de descomposición de series temporales

La implementación nativa de KQL para la predicción de series temporales y la detección de anomalías usa un modelo de descomposición conocido. Este modelo se aplica a series temporales de métricas que se espera que manifiesten un comportamiento periódico y de tendencia, como el tráfico del servicio, latidos del componente y medidas periódicas de IoT para predecir valores de métrica futuros y detectar los valores anómalos. La suposición de este proceso de regresión es que, con la excepción del comportamiento estacional y de tendencia anteriormente conocido, la serie temporal se distribuye de forma aleatoria. Por consiguiente, puede predecir los valores de métrica futuros a partir de los componentes estacional y de tendencia, denominados colectivamente como línea de base, y omitir la parte residual. También puede detectar valores anómalos según el análisis de valores atípicos utilizando solo la parte residual. Para crear un modelo de descomposición, use la función series_decompose(). La función series_decompose() toma un conjunto de series temporales y descompone automáticamente cada serie temporal en sus componentes estacional, de tendencia, residual y de línea de base.

Por ejemplo, puede descomponer el tráfico de un servicio web interno utilizando la consulta siguiente:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (baseline, seasonal, trend, residual) = series_decompose(num, -1, 'linefit')  //  decomposition of a set of time series to seasonal, trend, residual, and baseline (seasonal+trend)
| render timechart with(title='Web app. traffic of a month, decomposition', ysplit=panels)

Descomposición de series temporales.

  • La serie temporal original se denomina num (en rojo).
  • El proceso empieza por la detección automática de la estacionalidad mediante la función series_periods_detect() y extrae el patrón estacional (en púrpura).
  • El patrón estacional se resta de la serie temporal original y se ejecuta una regresión lineal con la función series_fit_line() para encontrar el componente de tendencia (en azul claro).
  • La función resta la tendencia y lo que queda es el componente residual (en verde).
  • Por último, la función agrega los componentes estacional y de tendencia para generar la línea de base (en azul).

Detección de anomalías en una serie temporal

La función series_decompose_anomalies() busca puntos anómalos en un conjunto de series temporales. Esta función llama a series_decompose() para generar el modelo de descomposición y, a continuación, ejecuta series_outliers() en el componente residual. series_outliers() calcula las puntuaciones de anomalía para cada punto del componente residual mediante la prueba de la barrera de Tukey. Las puntuaciones de anomalía por encima de 1,5 o por debajo de -1,5 indican un aumento o una disminución leves de las anomalías, respectivamente. Las puntuaciones de anomalía por encima de 3,0 o por debajo de -3,0 indican una anomalía segura.

La siguiente consulta le permite detectar anomalías en el tráfico de un servicio web interno:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| render anomalychart with(anomalycolumns=anomalies, title='Web app. traffic of a month, anomalies') //use "| render anomalychart with anomalycolumns=anomalies" to render the anomalies as bold points on the series charts.

Detección de anomalías de series temporales.

  • La serie temporal original (en rojo).
  • El componente de línea de base (estacional + tendencia) (en azul).
  • Los puntos anómalos (en púrpura) encima de la serie temporal original. Los puntos anómalos se desvían significativamente de los valores esperados de la línea de base.

Previsión de series temporales

La función series_decompose_forecast() predice valores futuros de un conjunto de series temporales. Esta función llama a series_decompose() para generar el modelo de descomposición y, a continuación, para cada serie temporal, extrapola el componente de línea de base al futuro.

La consulta siguiente le permite predecir el tráfico del servicio web de la próxima semana:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week by Time Series Decomposition')

Previsión de series temporales.

  • Métrica original (en rojo). Faltan los valores futuros, que se establecen en 0 de manera predeterminada.
  • Extrapole el componente de línea de base (en azul) para predecir los valores de la próxima semana.

Escalabilidad

Lenguaje de consulta Kusto sintaxis habilita una sola llamada para procesar varias series temporales. Su implementación optimizada única permite un rendimiento rápido, lo que es vital para una previsión y detección de anomalías eficaz si se supervisan miles de contadores en escenarios casi en tiempo real.

La consulta siguiente muestra el procesamiento simultáneo de tres series temporales:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend offset=case(sid=='TS3', 4000000, sid=='TS2', 2000000, 0)   //  add artificial offset for easy visualization of multiple time series
| extend num=series_add(num, offset)
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week for 3 time series')

Escalabilidad de las series temporales.

Resumen

En este documento se detallan las funciones nativas de KQL para la detección y previsión de anomalías de series temporales. Cada serie temporal original se descompone en los componentes estacional, de tendencia y residual para detectar anomalías y/o realizar previsiones. Estas funcionalidades se pueden usar para escenarios de supervisión casi en tiempo real, como la detección de errores, el mantenimiento predictivo y la previsión de cargas y peticiones.