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