AnomalyDetection_SpikeAndDip (Azure Stream Analytics)

Mendeteksi anomali sementara dalam peristiwa rangkaian waktu.

Model pembelajaran mesin yang mendasarinya menggunakan algoritma estimasi kepadatan kernel adaptif.

Sintaks

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

Argumen

scalar_expression

Kolom peristiwa atau bidang komputasi tempat model melakukan deteksi anomali. Nilai yang diizinkan untuk parameter ini termasuk jenis data FLOAT atau BIGINT yang mengembalikan nilai tunggal (skalar).

Ekspresi kartubebas * tidak diperbolehkan. Selain itu, scalar_expression tidak dapat berisi fungsi analitik atau fungsi eksternal lainnya.

Kepercayaan

Angka persentase dari 1,00 hingga 100 (inklusif) yang menetapkan sensitivitas model pembelajaran mesin. Semakin rendah kepercayaan diri, semakin tinggi jumlah anomali yang terdeteksi, dan sebaliknya. Mulai dari angka arbitrer antara 70 dan 90 dan sesuaikan ini berdasarkan hasil yang diamati dalam pengembangan atau pengujian.

historySize

Jumlah peristiwa di jendela geser yang terus dipelajari model dan digunakan untuk menilai peristiwa berikutnya untuk anomali. Biasanya, ini harus mewakili periode waktu perilaku normal untuk memungkinkan model menandai anomali berikutnya. Mulailah dengan tebakan terdidik menggunakan log historis, dan sesuaikan berdasarkan hasil yang diamati dalam pengembangan atau pengujian.

mode

Parameter string yang nilainya adalah "lonjakan", "dips", atau "spikesanddips", untuk mendeteksi hanya lonjakan, hanya turunan, atau lonjakan dan turunan, masing-masing.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause] )

partition_by_clause

Digunakan untuk mempartisi pelatihan model berdasarkan kolom tertentu dalam peristiwa. Model menerapkan pengaturan parameter fungsi yang sama di semua partisi.

limit_duration_clause DURATION(unit, panjang)

Ukuran jendela geser dalam Azure Stream Analytics dalam hal waktu. Ukuran yang disarankan dari jendela waktu ini setara dengan waktu yang diperlukan untuk menghasilkan riwayatUkuran jumlah peristiwa dalam keadaan stabil.

when_clause

Menentukan kondisi boolean agar peristiwa diterima oleh model untuk melakukan deteksi anomali. when_clause bersifat opsional.

Jenis Pengembalian

Fungsi mengembalikan rekaman berlapis yang terdiri dari kolom berikut:

IsAnomaly

BIGINT (0 atau 1) menunjukkan apakah peristiwa itu anomali atau tidak.

Skor

Skor nilai p komputasi (float) yang menunjukkan seberapa anomali suatu peristiwa. Skor yang lebih rendah berarti probabilitas yang lebih rendah bahwa peristiwa tersebut adalah bagian dari distribusi yang sama, dan karenanya semakin anomali.

Contoh

Contoh berikut mengasumsikan tingkat input seragam 1 peristiwa per detik dalam jendela geser 2 menit dengan ukuran riwayat 120 peristiwa. Pernyataan SELECT akhir mengekstrak dan menghasilkan skor dan status anomali dengan tingkat keyakinan 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

Contoh dengan aliran input non-seragam yang dibuat seragam menggunakan jendela tumbling 1 detik:

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

Contoh dengan kueri yang dipartisi untuk melatih model terpisah 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