Condividi tramite


AnomalyDetection_ChangePoint (Analisi di flusso di Azure)

Rileva anomalie persistenti in un flusso di eventi di serie temporali. Il modello di Machine Learning sottostante usa l'algoritmo Exchangeability Martingales.

Sintassi

AnomalyDetection_ChangePoint(
        <scalar_expression>, 
        <confidence>, 
        <historySize>)
    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.

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 fornire al 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 Martingale calcolato (float) che indica come si verifica un evento anomalo. Questo punteggio cresce in modo esponenziale con valori anomali.

Esempio

Nell'esempio di query seguente, la prima query presuppone un evento ogni 5 minuti e la seconda query presuppone un evento ogni secondo. Il livello di confidenza è impostato su 75 per entrambi i modelli.

AnomalyDetection_ChangePoint(reading, 75, 72)
    OVER (LIMIT DURATION(hour, 6))

AnomalyDetection_ChangePoint(temperature, 75, 120)
    OVER ([PARTITION BY sensorId] LIMIT DURATION(second, 120))

Si supponga, ad esempio, una frequenza di input uniforme di 1 evento al secondo in una finestra scorrevole di 20 minuti con una dimensione di cronologia di 1200 eventi. L'istruzione SELECT finale estrae e restituisce il punteggio e lo stato dell'anomalia con un livello di attendibilità dell'80%.

WITH AnomalyDetectionStep AS
(
SELECT
EVENTENQUEUEDUTCTIME as time,
CAST(temperature as float) as temp,
AnomalyDetection_ChangePoint(CAST(temperature as float), 80, 1200) 
OVER(LIMIT DURATION(minute, 20)) as ChangePointScores
FROM input
)

SELECT
time,
temp,
CAST(GetRecordPropertyValue(ChangePointScores, 'Score') as float) as
ChangePointScore,
CAST(GetRecordPropertyValue(ChangePointScores, 'IsAnomaly') as bigint) as
IsChangePointAnomaly

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_ChangePoint(temp, 80, 1200) 
OVER(LIMIT DURATION(minute, 20)) as ChangePointScores
FROM SmootheningStep
)

SELECT
time,
temp,
CAST(GetRecordPropertyValue(ChangePointScores, 'Score') as float) as
ChangePointScore,
CAST(GetRecordPropertyValue(ChangePointScores, 'IsAnomaly') as bigint) as
IsChangePointAnomaly

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_ChangePoint(CAST(temperature as float), 80, 1200) 
OVER(PARTITION BY sensorid
LIMIT DURATION(minute, 20)) as ChangePointScores
FROM input
)

SELECT
CAST (sensorid as nvarchar(max)) as sensoridstring,
time,
temp,
CAST(GetRecordPropertyValue(ChangePointScores, 'Score') as float) as
ChangePointScore,
CAST(GetRecordPropertyValue(ChangePointScores, 'IsAnomaly') as bigint) as
IsChangePointAnomaly

INTO output
FROM AnomalyDetectionStep