AnomalyDetection_SpikeAndDip (Azure Stream Analytics)
Wykrywa tymczasowe anomalie w zdarzeniu szeregów czasowych.
Podstawowy model uczenia maszynowego używa algorytmu szacowania gęstości jądra adaptacyjnego.
Składnia
AnomalyDetection_SpikeAndDip(
<scalar_expression>,
<confidence>,
<historySize>,
<mode>)
OVER ([PARTITION BY <partition key>]
LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
Argumenty
Scalar_expression
Kolumna zdarzeń lub obliczone pole, na którym model wykonuje wykrywanie anomalii. Dozwolone wartości tego parametru obejmują typy danych FLOAT lub BIGINT, które zwracają pojedynczą (skalarną) wartość.
Wyrażenie wieloznaczne * jest niedozwolone. Ponadto scalar_expression nie może zawierać innych funkcji analitycznych ani funkcji zewnętrznych.
Zaufania
Liczba procentowa z zakresu od 1,00 do 100 (włącznie), która określa wrażliwość modelu uczenia maszynowego. Im niższa pewność siebie, tym większa liczba wykrytych anomalii i odwrotnie. Zacznij od dowolnej liczby z zakresu od 70 do 90 i dostosuj tę wartość w oparciu o wyniki obserwowane podczas opracowywania lub testowania.
historySize
Liczba zdarzeń w oknie przewijania, z którego model stale uczy się i używa go do oceniania następnego zdarzenia w celu anomalii. Zazwyczaj powinno to reprezentować okres normalnego zachowania, aby umożliwić modelowi flagę kolejnej anomalii. Zacznij od wykształconego odgadnięcia przy użyciu dzienników historycznych i dostosuj się na podstawie wyników obserwowanych podczas opracowywania lub testowania.
tryb
Parametr ciągu, którego wartość to "skoki", "dips" lub "spikesanddips", aby wykryć tylko skoki, tylko spadki lub zarówno skoki, jak i spadki.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause
Służy do partycjonowania trenowania modelu na podstawie określonej kolumny w zdarzeniach. Model stosuje te same ustawienia parametrów funkcji we wszystkich partycjach.
limit_duration_clause DURATION(jednostka, długość)
Rozmiar okna przewijania w usłudze Stream Analytics pod względem czasu. Zalecany rozmiar tego przedziału czasu jest odpowiednikiem czasu generowania historiiLiczba zdarzeń w stanie stałym.
when_clause
Określa warunek logiczny dla zdarzeń, które mają zostać zaakceptowane przez model w celu przeprowadzenia wykrywania anomalii. When_clause jest opcjonalna.
Typy zwracane
Funkcja zwraca zagnieżdżony rekord składający się z następujących kolumn:
IsAnomaly
BIGINT (0 lub 1) wskazujący, czy zdarzenie było nietypowe, czy nie.
Ocena
Obliczony wynik p-value (float) wskazujący, jak nietypowe jest zdarzenie. Niższe wyniki oznaczają mniejsze prawdopodobieństwo, że zdarzenie jest częścią tego samego rozkładu, a tym bardziej nietypowe jest.
Przykłady
W poniższym przykładzie przyjęto założenie, że jednolita szybkość wprowadzania wynosząca 1 zdarzenie na sekundę w 2-minutowym oknie przesuwnym z historią o rozmiarze 120 zdarzeń. Końcowa instrukcja SELECT wyodrębnia i generuje wynik oraz stan anomalii z poziomem ufności 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
Przykładowy strumień wejściowy, który jest jednolity przy użyciu okna wirowania 1 sekundy:
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
Przykład z partycjonowaną kwerendą w celu wytrenowania oddzielnego modelu na czujnik:
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