Dela via


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