Condividi tramite


RilevamentoAnomalie_PuntoDiCambio

✅ Flusso di eventi dell'infrastruttura di Analisi ✅ di flusso di Azure

Rileva anomalie persistenti in un flusso di eventi time series. 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 è la probabilità, 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 scorrevole che il modello apprende continuamente da e usa per assegnare un punteggio all'evento successivo per l'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 temporale scorrevole all'interno di Analisi di flusso in termini di tempo. Le dimensioni consigliate di questo intervallo di tempo sono equivalenti al tempo necessario per generare historySize numero di eventi 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

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.

Esempi

Nell'esempio di query seguente la prima query presuppone un evento ogni 5 minuti e la seconda 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))

Esempio che si presuppone una frequenza di input uniforme di 1 evento al secondo in una finestra temporale scorrevole di 20 minuti con una dimensione della cronologia di 1200 eventi. L'istruzione SELECT finale estrae e restituisce il punteggio e lo stato delle anomalie con un livello di attendibilità pari a 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 tramite 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