Conceptos

En este artículo, repasaremos los conceptos comunes con los que trabajamos en la API Timeseries Insights e intentaremos ofrecer una explicación intuitiva de lo que representan.

Evento

Un evento es un punto de datos y la entrada sin procesar con la que trabaja la API Timeseries Insights. Conceptualmente, representa una acción llevada a cabo por algún agente (por ejemplo, una transacción de un cliente o la publicación de un artículo de noticias) o una observación (por ejemplo, las lecturas de un sensor de temperatura o el uso de la CPU en una máquina).

Un evento contiene lo siguiente:

  • Conjunto de valores de diferentes dimensiones que representan propiedades que describen el evento, como etiquetas o mediciones numéricas.
  • Marca de tiempo que representa la hora en la que se produjo el evento. Esta marca de tiempo se usará al agregar eventos para formar una serie temporal.
  • ID de grupo.

Dimensión

Una dimensión representa un tipo de propiedad de los eventos de un conjunto de datos y el dominio de valores que puede adoptar. Una dimensión puede ser:

  • Categórica. Una propiedad de evento de esta dimensión puede tener uno de los valores limitados o finitos, normalmente cadenas. Por ejemplo, el nombre del país o del editor en un conjunto de datos con artículos de noticias, o el nombre de la máquina en un conjunto de datos con datos de monitorización de la producción.
  • Numérico. Una medición o una propiedad numérica general de un evento. Por ejemplo, el número de vistas de páginas de artículos de noticias, el uso de CPU o el número de errores de los datos de monitorización de producción.

Conjunto de datos

Un conjunto de datos es una colección de eventos con un nombre único en un proyecto. Las consultas se realizan en el mismo conjunto de datos.

Grupo

Los eventos se pueden agrupar especificando el mismo ID de grupo (consulte Event.groupId). El grupo es similar a una "sesión" de actividades de Internet.

Lo más habitual es que a cada registro de Event se le asigne un ID de grupo único. Entre otros casos prácticos del ID de grupo, se incluyen los siguientes:

  • Identificador de evento del mismo evento (con marcas de tiempo iguales o similares) de varios registros de Event, sobre todo cuando diferentes propiedades del mismo evento proceden de distintas fuentes y no se han combinado antes de introducirse en el sistema. Por ejemplo, varios sensores que monitorizan el mismo dispositivo pueden generar cada uno un registro de evento independiente.
  • Identificador de sesión de una colección de eventos relacionados (normalmente con marcas de tiempo en un periodo breve). Por ejemplo, las actividades de una sesión de navegación web. Otro ejemplo son las entradas de registro de un viaje en taxi.
  • Un identificador de cuenta de usuario, de modo que todos los registros de Event con el mismo ID de grupo pertenezcan al mismo usuario.

El objetivo del grupo es calcular las correlaciones entre las dimensiones de los eventos del mismo grupo. Por ejemplo, si tu conjunto de datos contiene datos de monitorización (como CPU, RAM, etc.), un grupo podría contener todos los datos de monitorización de un proceso. Esto nos permitiría detectar que un aumento de la CPU está correlacionado con otro evento, como una actualización de la versión binaria en un momento anterior.

Si no lo tienes claro o no te interesa calcular este tipo de correlaciones, cada evento debe tener un ID de grupo único a nivel global. Si se omite groupId, se produce un efecto similar y se genera un groupId interno en función del contenido y de la marca de tiempo.

Segmento

Una porción es el subconjunto de todos los eventos de un conjunto de datos que tienen determinados valores en algunas dimensiones. En el caso de una dimensión categórica, el valor proporcionado es un valor fijo único. En el caso de una dimensión numérica, el valor proporcionado es un intervalo.

Por ejemplo, supongamos que tenemos un conjunto de datos con las ventas de una tienda internacional y que cada evento es una venta que tiene estas dimensiones categóricas: el país en el que se ha producido la venta, el nombre del producto y el nombre de la empresa que ha fabricado el producto. En este caso, algunos ejemplos de segmentos son: todas las ventas de un producto concreto, todas las ventas de un país concreto de todos los productos fabricados por una empresa concreta.

Series temporales

Las series temporales con las que trabajamos son de tiempo discreto y están compuestas por puntos a intervalos de tiempo iguales. La duración de los intervalos de tiempo entre puntos de series temporales consecutivos se denomina granularidad de la serie temporal.

Una serie temporal se calcula de la siguiente manera:

  • En una porción determinada, recoge todos los eventos del intervalo de tiempo [detectionTime - TimeseriesParams.forecastHistory, detectionTime + granularity].
  • Agrupa estos eventos en función de su marca de tiempo y granularidad. Se asigna un evento E a un punto que empieza en el momento T si E.eventTime está en el intervalo de tiempo [T, T + granularity].
  • Agrega, en cada punto de la serie temporal, los eventos en función de la dimensión numérica especificada como métrica (TimeseriesParams.metric), que representa el valor de esos puntos. La agregación se puede hacer contando (si no se especifica metric, normalmente si todas las dimensiones del evento son categóricas), sumando o calculando la media (si se especifica metric).

Punto de serie temporal

Cada punto de la serie temporal tiene un tiempo y un valor asociados.

El tiempo es en realidad un intervalo de longitud granularity con time como hora de inicio.

Si se especifica metric (TimeseriesParams.metric), debe ser una dimensión numérica. El value del punto se agrega a partir de los valores de la dimensión metric de todos los eventos del intervalo de tiempo, mediante TimeseriesParams.metricAggregationMethod.

Si no se especifica ninguna métrica, el value del punto es el número de eventos que se han producido en el intervalo de tiempo.

Previsión

Proceso de predicción de valores futuros de una serie temporal determinada. La previsión usa la parte inicial de la serie temporal como datos de entrenamiento para crear un modelo.

Horizon

Predeciremos los valores de una serie temporal a partir de la hora de detección hasta el horizonte temporal (indicado en el campo ForecastParams.horizonTime).

De forma intuitiva, este campo nos indica cuánto tiempo en el futuro debemos predecir. Aunque nos interesa principalmente el valor del punto de detección a la hora de clasificar un segmento como anomalía, permitimos que se pronostiquen puntos adicionales, ya que pueden proporcionar información útil al usuario.

Hora y punto de detección

La hora de detección (especificada por QueryDataSetRequest.detectionTime) es el momento en el que analizamos si hay anomalías.

El punto de detección es el punto de la serie temporal en el momento de la detección.

Desviación esperada

En función de la estabilidad y la predictibilidad de una serie temporal, podemos tener más o menos confianza en nuestra previsión. El nivel de confianza se refleja en el campo EvaluatedSlice.expectedDeviation, que especifica cuál es la desviación absoluta aceptable del valor que hemos previsto para el tiempo de detección.

Anomalía

Una sección se puede considerar una anomalía si la desviación entre sus valores previstos y reales durante el tiempo de detección es mayor de lo que esperamos que sea.

Llamamos puntuación de anomalía a la diferencia entre la desviación real y la desviación esperada:

anomalyScore = (detectionPointActual - detectionPointForecast) / expectedDeviation

En general, las puntuaciones inferiores a 1,0 reflejan variaciones habituales teniendo en cuenta el historial del segmento, mientras que las puntuaciones superiores a 1,0 deberían requerir atención, ya que las puntuaciones más altas representan anomalías más graves.

Umbral de ruido

La puntuación de anomalía, tal como se ha definido anteriormente, muestra la significación estadística de una desviación respecto a la normalidad. Sin embargo, en muchos casos, esta desviación puede no ser importante porque el cambio en el valor absoluto puede no ser de interés.

Por ejemplo, si todos los valores de una serie temporal están distribuidos de forma uniforme en el intervalo (9,9, 10,1), la expectedDeviation será de aproximadamente 0,1. Si la detectionPointForecast es 10.0 y la detectionPointActual es 10.3, la anomalyScore será 3.0.

Si los cambios con un valor absoluto mayor son más importantes para ti, el umbral de ruido te permite penalizar las porciones con cambios inferiores a ese umbral reduciendo la importancia de la puntuación de anomalía:

anomalyScore = (detectionPointActual - detectionPointForecast) / (expectedDeviation + noiseThreshold)

Siguientes pasos