AnomalyDetection_SpikeAndDip (Analisi di flusso di Azure)

Rileva anomalie temporanee in un evento time series.

Il modello di Machine Learning sottostante usa l'algoritmo di stima della densità del kernel adattivo.

Sintassi

AnomalyDetection_SpikeAndDip(
    <scalar_expression>,
    <confidence>,
    <historySize>,
    <mode>)
OVER ([PARTITION BY <partition key>]
    LIMIT DURATION(<unit>, <length>)
    [WHEN boolean_expression])

Argomenti

scalar_expression

Colonna evento o campo calcolato su cui il modello esegue il rilevamento anomalie. I valori consentiti per questo parametro includono tipi di dati FLOAT o BIGINT che restituiscono un singolo valore (scalare).

L'espressione con caratteri jolly * non è consentita. Inoltre, scalar_expression non può contenere altre funzioni analitiche o funzioni esterne.

Fiducia

Numero percentuale compreso tra 1,00 e 100 (inclusi) che imposta la sensibilità del modello di Machine Learning. Minore è l'attendibilità, maggiore è il numero di anomalie rilevate e viceversa. Iniziare da un numero arbitrario compreso tra 70 e 90 e modificarlo in base ai risultati osservati in fase di sviluppo o test.

historySize

Numero di eventi in una finestra temporale scorrevole che il modello apprende continuamente da e usa per assegnare un punteggio all'evento successivo per un'anomalia. In genere, questo deve rappresentare il periodo di tempo del comportamento normale per consentire al modello di contrassegnare un'anomalia successiva. Iniziare con un'ipotesi educata usando i log cronologici e regolare in base ai risultati osservati nello sviluppo o nel test.

mode

Parametro stringa il cui valore è "spikes", "dips" o "spikesanddips", per rilevare solo picchi, solo i picchi o i picchi e le immersioni, rispettivamente.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause

Usato per partizionare il training di un modello in base a una determinata colonna negli eventi. Il modello applica le stesse impostazioni dei parametri di funzione in tutte le partizioni.

limit_duration_clause DURATION(unit, length)

Dimensioni della finestra scorrevole all'interno di Analisi di flusso in termini di tempo. La dimensione consigliata di questo intervallo di tempo è l'equivalente del tempo necessario per generare il numero di eventi historySize in stato stabile.

when_clause

Specifica una condizione booleana per gli eventi da accettare dal modello per eseguire il rilevamento anomalie. Il when_clause è facoltativo.

Tipi restituiti

La funzione restituisce un record annidato composto dalle colonne seguenti:

IsAnomaly

Valore BIGINT (0 o 1) che indica se l'evento è anomalo o meno.

Punteggio

Punteggio p-value calcolato (float) che indica l'anomalia di un evento. I punteggi inferiori indicano una probabilità inferiore che l'evento faccia parte della stessa distribuzione e quindi più anomalo è.

Esempio

Nell'esempio seguente si presuppone una frequenza di input uniforme di 1 evento al secondo in una finestra scorrevole di 2 minuti con una dimensione di cronologia di 120 eventi. L'istruzione SELECT finale estrae e restituisce il punteggio e lo stato dell'anomalia con un livello di attendibilità 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

Esempio con un flusso di input non uniforme reso uniforme usando una finestra a cascata di 1 secondo:

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

Esempio con una query partizionata per eseguire il training di un modello separato per sensore:

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