Conceptos

En este artículo, analizaremos los conceptos comunes con los que trabajamos en la API de Timeseries Insights y trataremos de proporcionar una explicación intuitiva de lo que representan.

Event

Un evento es un dato y la entrada sin procesar con la que funciona la API de Timeseries Insights. Conceptualmente, representa una acción que realiza un agente (p.ej., una transacción de un cliente o la publicación de un artículo de noticias) o una observación (p.ej., las lecturas de un sensor de temperatura o el uso de la CPU en una máquina).

Un evento contiene lo siguiente:

  • Es un conjunto de valores en diferentes dimensiones que representan propiedades que describen el evento, como etiquetas o mediciones numéricas.
  • Una marca de tiempo que representa la hora en la que ocurrió el evento Esta marca de tiempo se usará cuando se agrupen eventos para formar una serie temporal.
  • Un ID de grupo

Dimensión

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

  • Categórica Una propiedad de evento en esta dimensión puede contener uno de los valores limitados o finitos, por lo general, cadenas. Algunos ejemplos son: el país o el nombre del publicador en un conjunto de datos con artículos de noticias, el nombre de la máquina en un conjunto de datos con datos de supervisión de producción.
  • Numérico. Es una medición o una propiedad numérica general de un evento. Ejemplos: cantidad de vistas de página para artículos de noticias, uso de la CPU o cantidad de errores para los datos de supervisión de producción.

Conjunto de datos

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

Grupo

Para agrupar eventos, especifica el mismo ID de grupo (consulta Event.groupId). El grupo es similar a una "sesión" de actividades de Internet.

Por lo general, a cada registro de Evento se le asigna un ID de grupo único. Los casos de uso del ID de grupo también incluyen, entre otros, los siguientes:

  • Un identificador de evento para el mismo evento (con las mismas marcas de tiempo o similares) de varios registros de Event, en especial, cuando diferentes propiedades del mismo evento provienen de diferentes fuentes y no se combinan antes de ingresar al sistema. Por ejemplo, varios sensores que supervisan el mismo dispositivo pueden producir un registro de evento independiente.
  • Es un identificador de sesión para una colección de eventos relacionados (por lo general, con marcas de tiempo en un período breve). Un ejemplo son las actividades de una sesión de navegación web. Otro ejemplo son las entradas de registro de un viaje en taxi.
  • Es un identificador de cuenta de usuario, por lo que todos los registros de Evento con el mismo ID de grupo pertenecen al mismo usuario.

El propósito del grupo es calcular las correlaciones entre los eventos (dimensiones) del mismo grupo. Por ejemplo, si tu conjunto de datos contiene datos de supervisión (como la CPU, la RAM, etcétera), un grupo podría contener todos los datos de supervisión de un proceso. Con el tiempo, eso nos permitiría detectar que un aumento en la CPU está correlacionado con otro evento, como una actualización de 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. Omitir groupId tiene un efecto similar, y se genera un groupId interno según el contenido y la marca de tiempo.

Porción

Un corte es el subconjunto de todos los eventos de un conjunto de datos que tienen algunos valores determinados en algunas dimensiones. Para una dimensión categórica, el valor determinado es un valor fijo único. Para una dimensión numérica, el valor determinado es un rango.

Por ejemplo, supongamos que tenemos un conjunto de datos con las ventas de un minorista internacional y cada evento es una venta que tiene estas dimensiones categóricas: el país en el que se realizó la venta, el nombre del producto y el nombre de la empresa que lo fabricó. Algunos ejemplos de divisiones en este caso son: todas las ventas de un producto determinado, todas las ventas de un país determinado para todos los productos de una empresa determinada.

Series temporales

Las series temporales con las que trabajamos son de tiempo discreto, compuestas por puntos en intervalos de tiempo iguales. La longitud de los intervalos de tiempo entre puntos de series temporales consecutivos se denomina nivel de detalle de las series temporales.

Para calcular una serie temporal, se hace lo siguiente:

  • Para un intervalo determinado, recopila todos los eventos en el intervalo de tiempo [detectionTime - TimeseriesParams.forecastHistory, detectionTime + granularity].
  • Agrupa estos eventos según su marca de tiempo y nivel de detalle. Un evento E se asigna a un punto que comienza en el tiempo T si E.eventTime está en el intervalo de tiempo [T, T + granularity].
  • Agrupa, para cada punto de la serie temporal, los eventos basados en la dimensión numérica especificada como métrica (TimeseriesParams.metric), que representa el valor de esos puntos. La agregación se puede realizar mediante el recuento (si no se especifica metric, por lo general, si todas las dimensiones del evento son categóricas), la suma o el promedio (si se especifica metric).

Punto de serie temporal

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

El tiempo es, en realidad, un intervalo de la 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 en la dimensión metric de todos los eventos dentro del período interno, con TimeseriesParams.metricAggregationMethod.

Si no se especifica ninguna métrica, el value del punto es la cantidad de eventos dentro del intervalo de tiempo.

Previsión

Es el proceso de predecir valores futuros para una serie temporal determinada. La previsión usa la parte inicial de la serie temporal como datos de entrenamiento para compilar un modelo.

Horizonte

Pronosticaremos los valores de una serie temporal a partir del período de detección hasta el horizonte temporal (que se proporciona en el campo ForecastParams.horizonTime).

De manera intuitiva, este campo nos indica cuánto en el futuro deberíamos hacer la previsión. Si bien nos interesa principalmente el valor del punto de detección cuando clasificamos un fragmento como una anomalía, permitimos que se prevean puntos adicionales, ya que pueden proporcionar información útil para el usuario.

Hora y punto de detección

El tiempo de detección (especificado por QueryDataSetRequest.detectionTime) es el punto en el que analizamos si hay posibles anomalías.

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

Desviación esperada

Según la estabilidad y la previsibilidad de una serie temporal, podemos tener más o menos confianza en nuestro pronóstico. El nivel de confianza se refleja en el campo EvaluatedSlice.expectedDeviation, que especifica cuál es una desviación absoluta aceptable del valor que pronosticamos para el tiempo de detección.

Anomalía

Un porció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.

Llamamos puntuación de anomalía a la distancia que existe entre la desviación real y la desviación esperada:

anomalyScore = (detectionPointActual - detectionPointForecast) / expectedDeviation

En general, las puntuaciones inferiores a 1.0 reflejan variaciones que son comunes teniendo en cuenta el historial de la porción, mientras que las puntuaciones superiores a 1.0 deben 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, como se definió anteriormente, muestra cuán significativa es una desviación de la normalidad en términos estadísticos. 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 una serie temporal tiene todos sus valores distribuidos de forma uniforme en el rango (9.9, 10.1), entonces expectedDeviation será de alrededor de 0.1. Si detectionPointForecast es 10.0 y detectionPointActual es 10.3, anomalyScore será 3.0.

Si los cambios que son mayores en valor absoluto son más importantes para ti, el umbral de ruido ofrece una forma de penalizar los segmentos con cambios inferiores a ese umbral disminuyendo la puntuación de anomalía:

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

¿Qué sigue?