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