Partilhar via


DeteçãoDeAnomalias_PicoEDip

✅ Azure Stream Analytics ✅ Fabric Eventstream

Deteta anomalias temporárias em um evento de série temporal.

O modelo de aprendizado de máquina subjacente usa o algoritmo de estimativa de densidade do kernel adaptativo.

Sintaxe

AnomalyDetection_SpikeAndDip(
    <scalar_expression>,
    <confidence>,
    <historySize>,
    <mode>)
OVER ([PARTITION BY <partition key>]
    LIMIT DURATION(<unit>, <length>)
    [WHEN boolean_expression])

Argumentos

scalar_expression

A coluna de evento ou campo computado sobre o qual o modelo executa a deteção de anomalias. Os valores permitidos para este parâmetro incluem tipos de dados FLOAT ou BIGINT que retornam um único valor (escalar).

A expressão curinga * não é permitida. Além disso, scalar_expression não pode conter outras funções analíticas ou funções externas.

confiança

Um número percentual de 1,00 a 100 (inclusive) que define a sensibilidade do modelo de aprendizado de máquina. Quanto menor a confiança, maior o número de anomalias detetadas e vice-versa. Parta de um número arbitrário entre 70 e 90 e ajuste isso com base nos resultados observados no desenvolvimento ou teste.

históriaTamanho

O número de eventos em uma janela deslizante que o modelo aprende continuamente e usa para marcar o próximo evento para anomalia. Normalmente, isso deve representar o período de tempo de comportamento normal para permitir que o modelo sinalize uma anomalia subsequente. Comece com um palpite educado usando logs históricos e ajuste com base nos resultados observados no desenvolvimento ou teste.

modo

Um parâmetro string cujo valor é "spikes", "dips" ou "spikesanddips", para detetar apenas picos, apenas mergulhos ou ambos os picos e mergulhos, respectivamente.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause

Usado para particionar o treinamento de um modelo com base em uma coluna específica nos eventos. O modelo aplica as mesmas configurações de parâmetro de função em todas as partições.

limit_duration_clause DURAÇÃO (unidade, comprimento)

O tamanho da janela deslizante no Stream Analytics em termos de tempo. O tamanho recomendado desta janela de tempo é o equivalente ao tempo necessário para gerar historySize number de eventos em estado estacionário.

when_clause

Especifica a condição booleana para que os eventos sejam aceitos pelo modelo para executar a deteção de anomalias. O when_clause é opcional.

Tipos de devolução

A função retorna um registro aninhado composto pelas seguintes colunas:

IsAnomalia

Um BIGINT (0 ou 1) indicando se o evento foi anômalo ou não.

Pontuação

A pontuação calculada do valor p (float) indica o quão anômalo é um evento. Pontuações mais baixas significam uma menor probabilidade de que o evento faça parte da mesma distribuição e, portanto, mais anômalo ele é.

Exemplos

O exemplo a seguir assume uma taxa de entrada uniforme de 1 evento por segundo em uma janela deslizante de 2 minutos com um tamanho de histórico de 120 eventos. A instrução final SELECT extrai e produz a pontuação e o estado de anomalia com um nível de confiança de 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

Exemplo com um fluxo de entrada não uniforme que é uniformizado usando uma janela de queda de 1 segundo:

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

Exemplo com uma consulta particionada para treinar um modelo separado por 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