AnomalyDetection_SpikeAndDip (Azure Stream Analytics)
Detecta anomalías temporales en un evento de serie temporal.
El modelo de aprendizaje automático subyacente usa el algoritmo de estimación de densidad del kernel adaptable.
Sintaxis
AnomalyDetection_SpikeAndDip(
<scalar_expression>,
<confidence>,
<historySize>,
<mode>)
OVER ([PARTITION BY <partition key>]
LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
Argumentos
scalar_expression
Columna de evento o campo calculado sobre el que el modelo realiza la detección de anomalías. Los valores permitidos para este parámetro incluyen tipos de datos FLOAT o BIGINT que devuelven un valor único (escalar).
No se permite la expresión comodín * . Además, scalar_expression no pueden contener otras funciones analíticas ni funciones externas.
Confianza
Un número porcentual entre 1,00 y 100 (ambos incluidos) que establece la sensibilidad del modelo de aprendizaje automático. Cuanto menor sea la confianza, mayor será el número de anomalías detectadas y viceversa. Comience desde un número arbitrario entre 70 y 90 y ajuste esto en función de los resultados observados en desarrollo o pruebas.
historySize
Número de eventos en una ventana deslizante de la que el modelo aprende continuamente y usa para puntuar el siguiente evento para la anómala. Normalmente, esto debe representar el período de tiempo de comportamiento normal para permitir que el modelo marque una anomalía posterior. Comience con una estimación educada mediante registros históricos y ajuste en función de los resultados observados en desarrollo o pruebas.
mode
Parámetro de cadena cuyo valor es "picos", "dips" o "spikesanddips", para detectar solo picos, solo caídas o tanto picos como caídas, respectivamente.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause
Se usa para particionar el entrenamiento de un modelo en función de una columna determinada de los eventos. El modelo aplica la misma configuración de parámetros de función en todas las particiones.
limit_duration_clause DURATION(unit, length)
Tamaño de la ventana deslizante dentro de Stream Analytics en términos de tiempo. El tamaño recomendado de este período de tiempo es el equivalente al tiempo que se tarda en generar historialSize número de eventos en estado estable.
when_clause
Especifica la condición booleana para que el modelo acepte los eventos que va a aceptar el modelo para realizar la detección de anomalías. El when_clause es opcional.
Tipos de valor devuelto
La función devuelve un registro anidado compuesto por las columnas siguientes:
IsAnomaly
BIGINT (0 o 1) que indica si el evento era anómalo o no.
Puntuación
Puntuación de valor p calculado (float) que indica cómo es un evento anómalo. Las puntuaciones más bajas significan una probabilidad menor de que el evento forme parte de la misma distribución y, por tanto, más anómalo es.
Ejemplos
En el ejemplo siguiente se supone una velocidad de entrada uniforme de 1 evento por segundo en una ventana deslizante de 2 minutos con un tamaño de historial de 120 eventos. La instrucción SELECT final extrae y produce la puntuación y el estado de anomalía con un nivel de confianza del 95 %.
WITH AnomalyDetectionStep AS
(
SELECT
EVENTENQUEUEDUTCTIME as time,
CAST(temperature AS FLOAT) as temp,
AnomalyDetection_SpikeAndDip(CAST(temperature AS FLOAT), 95, 120, 'spikesanddips')
OVER(LIMIT DURATION(second, 120)) AS SpikeAndDipScores
FROM input
)
SELECT
time,
temp,
CAST(GetRecordPropertyValue(SpikeAndDipScores, 'Score') as FLOAT) AS
SpikeAndDipScore,
CAST(GetRecordPropertyValue(SpikeAndDipScores, 'IsAnomaly') AS BIGINT) AS
IsSpikeAndDipAnomaly
INTO output
FROM AnomalyDetectionStep
Ejemplo con un flujo de entrada no uniforme que se hace uniforme mediante una ventana de saltos de tamaño constante de 1 segundo:
WITH SmootheningStep AS
(
SELECT
System.Timestamp() as time,
AVG(CAST(temperature as float)) as temp
FROM input
GROUP BY TUMBLINGWINDOW(second, 1)
),
AnomalyDetectionStep AS
(
SELECT
time,
temp,
AnomalyDetection_SpikeAndDip(temp, 95, 120, 'spikesanddips')
OVER(LIMIT DURATION(second, 120)) as SpikeAndDipScores
FROM SmootheningStep
)
SELECT
time,
temp,
CAST(GetRecordPropertyValue(SpikeAndDipScores, 'Score') AS FLOAT) As
SpikeAndDipScore,
CAST(GetRecordPropertyValue(SpikeAndDipScores, 'IsAnomaly') AS BIGINT) AS
IsSpikeAndDipAnomaly
INTO output
FROM AnomalyDetectionStep
Ejemplo con una consulta con particiones para entrenar un modelo independiente por sensor:
WITH AnomalyDetectionStep AS
(
SELECT
sensorid,
System.Timestamp() AS time,
CAST(temperature AS FLOAT) AS temp,
AnomalyDetection_SpikeAndDip(CAST(temperature AS FLOAT), 95, 120, 'spikesanddips')
OVER(PARTITION BY sensorid LIMIT DURATION(second, 120)) AS SpikeAndDipScores
FROM input
)
SELECT
CAST (sensorid AS NVARCHAR(max)) AS sensoridstring,
time,
temp,
CAST(GetRecordPropertyValue(SpikeAndDipScores, 'Score') as float) AS
SpikeAndDipScore,
CAST(GetRecordPropertyValue(SpikeAndDipScores, 'IsAnomaly') AS BIGINT) AS
IsSpikeAndDipAnomaly
INTO output
FROM AnomalyDetectionStep