AnomalyDetection_SpikeAndDip (Azure Stream Analytics)
Detecteert tijdelijke afwijkingen in een tijdreeks-gebeurtenis.
Het onderliggende machine learning-model maakt gebruik van het algoritme voor het schatten van de adaptieve kerneldichtheid.
Syntaxis
AnomalyDetection_SpikeAndDip(
<scalar_expression>,
<confidence>,
<historySize>,
<mode>)
OVER ([PARTITION BY <partition key>]
LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
Argumenten
scalar_expression
De gebeurteniskolom of het berekende veld waarop het model anomaliedetectie uitvoert. Toegestane waarden voor deze parameter omvatten float- of BIGINT-gegevenstypen die één (scalaire) waarde retourneren.
De jokertekenexpressie * is niet toegestaan. Bovendien kunnen scalar_expression geen andere analytische functies of externe functies bevatten.
Vertrouwen
Een percentage van 1,00 tot 100 (inclusief) waarmee de gevoeligheid van het machine learning-model wordt ingesteld. Hoe lager de betrouwbaarheid, hoe hoger het aantal gedetecteerde afwijkingen en vice versa. Begin met een willekeurig getal tussen 70 en 90 en pas dit aan op basis van de resultaten die tijdens de ontwikkeling of testen zijn waargenomen.
historySize
Het aantal gebeurtenissen in een sliding window waarvan het model continu leert en gebruikt om de volgende gebeurtenis te scoren op afwijkende gebeurtenissen. Normaal gesproken moet dit de periode van normaal gedrag vertegenwoordigen om het model in staat te stellen een volgende anomalie te markeren. Begin met een gefundeerde schatting met behulp van historische logboeken en pas deze aan op basis van de resultaten die tijdens de ontwikkeling of test zijn waargenomen.
modus
Een tekenreeksparameter waarvan de waarde 'spikes', 'dips' of 'spikesanddips' is, om alleen pieken, alleen dips of zowel pieken als dips te detecteren.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause
Wordt gebruikt om de training van een model te partitioneren op basis van een bepaalde kolom in de gebeurtenissen. Het model past dezelfde functieparameterinstellingen toe op alle partities.
limit_duration_clause DUUR(eenheid; lengte)
De grootte van het schuifvenster binnen Stream Analytics in termen van tijd. De aanbevolen grootte van dit tijdvenster is het equivalent van de tijd die nodig is om geschiedenis te genererenGrootte aantal gebeurtenissen in een stabiele status.
when_clause
Hiermee geeft u de booleaanse voorwaarde op voor de gebeurtenissen die moeten worden geaccepteerd door het model om anomaliedetectie uit te voeren. De when_clause is optioneel.
Retourtypen
De functie retourneert een geneste record die bestaat uit de volgende kolommen:
IsAnomaly
Een BIGINT (0 of 1) die aangeeft of de gebeurtenis afwijkend was of niet.
Score
De berekende p-waardescore (float) die aangeeft hoe afwijkend een gebeurtenis is. Lagere scores betekenen een lagere kans dat de gebeurtenis deel uitmaakt van dezelfde verdeling, en dus hoe afwijkender deze is.
Voorbeelden
In het volgende voorbeeld wordt uitgegaan van een uniforme invoersnelheid van 1 gebeurtenis per seconde in een schuifvenster van 2 minuten met een geschiedenisgrootte van 120 gebeurtenissen. De laatste SELECT-instructie extraheert en voert de score en anomaliestatus uit met een betrouwbaarheidsniveau van 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
Voorbeeld met een niet-uniforme invoerstroom die uniform wordt gemaakt met behulp van een tumblingvenster van 1 seconde:
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
Voorbeeld met een gepartitioneerde query voor het trainen van een afzonderlijk model 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