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