AnomalyDetection_SpikeAndDip (Azure Stream Analytics)
Detekuje dočasné anomálie v události časové řady.
Základní model strojového učení používá algoritmus odhadu adaptivní hustoty jádra.
Syntaxe
AnomalyDetection_SpikeAndDip(
<scalar_expression>,
<confidence>,
<historySize>,
<mode>)
OVER ([PARTITION BY <partition key>]
LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
Argumenty
Scalar_expression
Sloupec události nebo počítané pole, ve kterém model provádí detekci anomálií. Povolené hodnoty pro tento parametr zahrnují datové typy FLOAT nebo BIGINT, které vracejí jednu (skalární) hodnotu.
Zástupný výraz * není povolen. Scalar_expression také nemůže obsahovat jiné analytické funkce nebo externí funkce.
Důvěru
Procentuální číslo od 1,00 do 100 (včetně), které nastavuje citlivost modelu strojového učení. Čím nižší je spolehlivost, tím vyšší je počet zjištěných anomálií a naopak. Začněte od libovolného čísla mezi 70 a 90 a upravte ho na základě výsledků při vývoji nebo testování.
historySize
Počet událostí v posuvném okně, ze kterého se model průběžně učí, a používá k vyhodnocení další události z hlediska anomálií. Obvykle by to mělo představovat časové období normálního chování, aby model mohl označit následnou anomálii. Začněte se poučeným odhadem pomocí historických protokolů a upravte je na základě výsledků zaznamenaných ve vývoji nebo testu.
režim
Řetězcový parametr, jehož hodnota je "špičky", "dips" nebo "spikesanddips", který detekuje pouze špičky, pouze poklesy nebo špičky i poklesy v uvedeném pořadí.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause
Slouží k rozdělení trénování modelu na základě konkrétního sloupce v událostech. Model použije stejné nastavení parametru funkce ve všech oddílech.
limit_duration_clause DURATION(jednotka, délka)
Velikost posuvného okna v rámci Stream Analytics z hlediska času. Doporučená velikost tohoto časového intervalu je ekvivalentem času, který trvá k vygenerování historieSize počtu událostí v ustáleném stavu.
when_clause
Určuje logickou podmínku pro události, které má model přijmout za účelem detekce anomálií. When_clause je nepovinný.
Návratové typy
Funkce vrátí vnořený záznam složený z následujících sloupců:
IsAnomaly
BIGINT (0 nebo 1) označující, jestli byla událost neobvyklá, nebo ne.
Skóre
Vypočítané skóre p-hodnoty (float) označující, jak neobvyklá je událost. Nižší skóre znamenají nižší pravděpodobnost, že událost je součástí stejného rozdělení, a tím je tím neobvyklejší.
Příklady
Následující příklad předpokládá jednotnou vstupní rychlost 1 události za sekundu v 2minutovém posuvném okně s velikostí historie 120 událostí. Konečný příkaz SELECT extrahuje a vypíše skóre a stav anomálií s úrovní spolehlivosti 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
Příklad s nerovnoměrným vstupním datovým proudem, který je jednotný pomocí přeskakujícího okna 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
Příklad s děleným dotazem pro trénování samostatného modelu na senzor:
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