AnomalyDetection_SpikeAndDip (Azure Stream Analytics)
Identifierar tillfälliga avvikelser i en tidsseriehändelse.
Den underliggande maskininlärningsmodellen använder algoritmen för uppskattad anpassningsbar kerneldensitet.
Syntax
AnomalyDetection_SpikeAndDip(
<scalar_expression>,
<confidence>,
<historySize>,
<mode>)
OVER ([PARTITION BY <partition key>]
LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
Argument
scalar_expression
Händelsekolumnen eller det beräknade fältet som modellen utför avvikelseidentifiering över. Tillåtna värden för den här parametern är FLOAT- eller BIGINT-datatyper som returnerar ett enda värde (skalärt).
Jokertecknet * är inte tillåtet. Dessutom kan scalar_expression inte innehålla andra analysfunktioner eller externa funktioner.
Förtroende
Ett procenttal från 1,00 till 100 (inklusive) som anger maskininlärningsmodellens känslighet. Ju lägre konfidens, desto högre antal identifierade avvikelser och vice versa. Börja från ett godtyckligt tal mellan 70 och 90 och justera detta baserat på de resultat som observerats under utveckling eller testning.
historySize
Antalet händelser i ett skjutfönster som modellen kontinuerligt lär sig av och använder för att bedöma nästa händelse för avvikande. Detta bör vanligtvis representera tidsperioden för normalt beteende så att modellen kan flagga en efterföljande avvikelse. Börja med en kvalificerad gissning med hjälp av historiska loggar och justera baserat på de resultat som observerats i utveckling eller test.
läge
En strängparameter vars värde är "spikes", "dips" eller "spikesanddips", för att endast identifiera toppar, endast dalar eller både toppar respektive dalar.
ÖVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause
Används för att partitionera en modells träning baserat på en viss kolumn i händelserna. Modellen tillämpar samma funktionsparameterinställningar på alla partitioner.
limit_duration_clause DURATION(enhet, längd)
Storleken på skjutfönstret i Stream Analytics när det gäller tid. Den rekommenderade storleken för det här tidsfönstret motsvarar den tid det tar att generera historikStora antalet händelser i stabilt tillstånd.
when_clause
Anger booleskt villkor för de händelser som ska godkännas av modellen för att utföra avvikelseidentifiering. Den when_clause är valfri.
Returtyper
Funktionen returnerar en kapslad post som består av följande kolumner:
IsAnomaly
En BIGINT (0 eller 1) som anger om händelsen var avvikande eller inte.
Poäng
Den beräknade p-värdepoängen (float) som anger hur avvikande en händelse är. Lägre poäng innebär en lägre sannolikhet att händelsen ingår i samma fördelning, och därför är den mer avvikande.
Exempel
I följande exempel förutsätts en enhetlig indatafrekvens på 1 händelse per sekund i ett skjutfönster på 2 minuter med en historikstorlek på 120 händelser. Den slutliga SELECT-instruktionen extraherar och matar ut poäng- och avvikelsestatusen med en konfidensnivå på 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
Exempel med en icke-enhetlig indataström som görs enhetlig med ett rullande fönster på 1 sekund:
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
Exempel med en partitionerad fråga för att träna en separat modell per 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