Compartir a través de


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