AnomalyDetection_SpikeAndDip(Azure Stream Analytics)

시계열 이벤트에서 임시 변칙을 검색합니다.

기본 기계 학습 모델은 적응형 커널 밀도 예측 알고리즘을 사용합니다.

Syntax

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

슬라이딩 윈도우에서 모델이 지속적으로 학습하고 비정상으로 다음 이벤트의 점수를 매기는 데 사용하는 이벤트 수입니다. 일반적으로 모델이 후속 변칙에 플래그를 지정하는 데 사용할 수 있도록 정상적인 동작의 기간을 나타내야 합니다. 기록 로그를 사용하여 학습된 추측으로 시작하고 개발 또는 테스트에서 관찰된 결과에 따라 조정합니다.

mode

값이 "spikes", "dips" 또는 "spikesanddips"인 문자열 매개 변수로, 각각 스파이크, 급강하 또는 급강하만 감지합니다.

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)입니다.

점수

이벤트가 얼마나 비정상적인지를 나타내는 계산된 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