✅ Azure Stream Analytics ✅ Fabric Eventstream
시계열 이벤트 스트림에서 영구 변칙을 검색합니다. 기본 기계 학습 모델은 Exchangeability Martingales 알고리즘을 사용합니다.
문법
AnomalyDetection_ChangePoint(
<scalar_expression>,
<confidence>,
<historySize>)
OVER ([PARTITION BY <partition key>]
LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
주장들
scalar_expression
모델이 변칙 검색을 수행하는 이벤트 열 또는 계산 필드입니다. 이 매개 변수에 허용되는 값에는 단일(스칼라) 값을 반환하는 FLOAT 또는 BIGINT 데이터 형식이 포함됩니다.
와일드카드 식 *은(는) 허용되지 않습니다. 또한 scalar_expression 다른 분석 함수 또는 외부 함수를 포함할 수 없습니다.
자신
기계 학습 모델의 민감도를 설정하는 1.00에서 100(포함)사이의 백분율 숫자입니다. 신뢰도가 낮을수록 검색된 변칙 수가 높아지고 그 반대의 경우도 마찬가지입니다. 70에서 90 사이의 임의의 숫자에서 시작하여 개발 또는 테스트에서 관찰된 결과에 따라 조정합니다.
historySize
슬라이딩 윈도우에서 모델에서 지속적으로 학습하고 비정상으로 다음 이벤트의 점수를 매기는 데 사용하는 이벤트 수입니다. 일반적으로 모델이 후속 변칙에 플래그를 지정하는 데 사용할 수 있도록 정상적인 동작의 기간을 나타내야 합니다. 기록 로그를 사용하여 교육된 추측으로 시작하고 개발 또는 테스트에서 관찰된 결과에 따라 조정합니다.
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)입니다.
점수
이벤트가 얼마나 비정상적인지 나타내는 계산된 Martingale 점수(float)입니다. 이 점수는 비정상적인 값으로 기하급수적으로 증가합니다.
예시
다음 쿼리 샘플에서 첫 번째 쿼리는 5분마다 이벤트를 가정하고 두 번째 쿼리는 매초마다 이벤트를 가정합니다. 신뢰도 수준은 두 모델 모두에 대해 75로 설정됩니다.
AnomalyDetection_ChangePoint(reading, 75, 72)
OVER (LIMIT DURATION(hour, 6))
AnomalyDetection_ChangePoint(temperature, 75, 120)
OVER ([PARTITION BY sensorId] LIMIT DURATION(second, 120))
기록 크기가 1200개인 20분 슬라이딩 윈도우에서 초당 1개 이벤트의 균일한 입력 속도를 가정하는 예제입니다. 최종 SELECT 문은 신뢰도 수준이 80%점수 및 변칙 상태를 추출하고 출력합니다.
WITH AnomalyDetectionStep AS
(
SELECT
EVENTENQUEUEDUTCTIME as time,
CAST(temperature as float) as temp,
AnomalyDetection_ChangePoint(CAST(temperature as float), 80, 1200)
OVER(LIMIT DURATION(minute, 20)) as ChangePointScores
FROM input
)
SELECT
time,
temp,
CAST(GetRecordPropertyValue(ChangePointScores, 'Score') as float) as
ChangePointScore,
CAST(GetRecordPropertyValue(ChangePointScores, 'IsAnomaly') as bigint) as
IsChangePointAnomaly
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_ChangePoint(temp, 80, 1200)
OVER(LIMIT DURATION(minute, 20)) as ChangePointScores
FROM SmootheningStep
)
SELECT
time,
temp,
CAST(GetRecordPropertyValue(ChangePointScores, 'Score') as float) as
ChangePointScore,
CAST(GetRecordPropertyValue(ChangePointScores, 'IsAnomaly') as bigint) as
IsChangePointAnomaly
INTO output
FROM AnomalyDetectionStep
센서당 별도의 모델을 학습하는 분할된 쿼리를 사용하는 예제:
WITH AnomalyDetectionStep AS
(
SELECT
sensorid,
System.Timestamp() as time,
CAST(temperature as float) as temp,
AnomalyDetection_ChangePoint(CAST(temperature as float), 80, 1200)
OVER(PARTITION BY sensorid
LIMIT DURATION(minute, 20)) as ChangePointScores
FROM input
)
SELECT
CAST (sensorid as nvarchar(max)) as sensoridstring,
time,
temp,
CAST(GetRecordPropertyValue(ChangePointScores, 'Score') as float) as
ChangePointScore,
CAST(GetRecordPropertyValue(ChangePointScores, 'IsAnomaly') as bigint) as
IsChangePointAnomaly
INTO output
FROM AnomalyDetectionStep