✅ Azure Stream Analytics ✅ Fabric Eventstream
시계열 이벤트에서 임시 변칙을 검색합니다.
기본 기계 학습 모델은 적응 커널 밀도 추정 알고리즘을 사용합니다.
문법
AnomalyDetection_SpikeAndDip(
<scalar_expression>,
<confidence>,
<historySize>,
<mode>)
OVER ([PARTITION BY <partition key>]
LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
주장들
scalar_expression
모델이 변칙 검색을 수행하는 이벤트 열 또는 계산 필드입니다. 이 매개 변수에 허용되는 값에는 단일(스칼라) 값을 반환하는 FLOAT 또는 BIGINT 데이터 형식이 포함됩니다.
와일드카드 식 *은(는) 허용되지 않습니다. 또한 scalar_expression 다른 분석 함수 또는 외부 함수를 포함할 수 없습니다.
자신
기계 학습 모델의 민감도를 설정하는 1.00에서 100(포함)사이의 백분율 숫자입니다. 신뢰도가 낮을수록 검색된 변칙 수가 높아지고 그 반대의 경우도 마찬가지입니다. 70에서 90 사이의 임의의 숫자에서 시작하여 개발 또는 테스트에서 관찰된 결과에 따라 조정합니다.
historySize
슬라이딩 윈도우에서 모델에서 지속적으로 학습하고 비정상으로 다음 이벤트의 점수를 매기는 데 사용하는 이벤트 수입니다. 일반적으로 모델이 후속 변칙에 플래그를 지정하는 데 사용할 수 있도록 정상적인 동작의 기간을 나타내야 합니다. 기록 로그를 사용하여 교육된 추측으로 시작하고 개발 또는 테스트에서 관찰된 결과에 따라 조정합니다.
모드
값이 "spikes", "dips" 또는 "spikesanddips"인 문자열 매개 변수로, 스파이크만 감지하거나, 급강하하거나, 스파이크와 딥을 모두 검색합니다.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause
이벤트의 특정 열을 기반으로 모델의 학습을 분할하는 데 사용됩니다. 모델은 모든 파티션에 동일한 함수 매개 변수 설정을 적용합니다.
limit_duration_clause DURATION(unit, length)
시간 측면에서 Stream Analytics 내의 슬라이딩 윈도우 크기입니다. 이 시간 범위의 권장 크기는 historySize 이벤트 수를 안정적인 상태로 생성하는 데 걸리는 시간과 동일합니다.
when_clause
모델에서 변칙 검색을 수행하기 위해 수락할 이벤트에 대한 부울 조건을 지정합니다. when_clause 선택 사항입니다.
반환 형식
함수는 다음 열로 구성된 중첩된 레코드를 반환합니다.
IsAnomaly
이벤트가 비정상적인지 여부를 나타내는 BIGINT(0 또는 1)입니다.
점수
이벤트가 얼마나 비정상적인지를 나타내는 계산된 p-값 점수(float)입니다. 점수가 낮을수록 이벤트가 동일한 분포의 일부일 확률이 낮아지므로 더 이상적입니다.
예시
다음 예제에서는 기록 크기가 120개인 2분 슬라이딩 윈도우에서 초당 1개 이벤트의 균일한 입력 속도를 가정합니다. 최종 SELECT 문은 신뢰도 수준이 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
연속 창이 1초인 경우 균일하게 만들어지는 균일하지 않은 입력 스트림이 있는 예제:
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
센서당 별도의 모델을 학습하는 분할된 쿼리를 사용하는 예제:
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