다음을 통해 공유


AnomalyDetection_ChangePoint(Azure Stream Analytics)

시계열 이벤트 스트림에서 영구 변칙을 검색합니다. 기본 기계 학습 모델은 Exchangeability Martingales 알고리즘을 사용합니다.

Syntax

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 내의 슬라이딩 윈도우 크기입니다. 이 시간 창의 권장 크기는 기록 생성에 걸리는 시간과 동일합니다. 일정한 상태의 이벤트 수 조정

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