AnomalyDetection_SpikeAndDip (Azure Stream Analytics)

시계열 이벤트에서 임시 예외를 검색 합니다.

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

구문

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

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

mode

각 값이 "스파이크", "dip" 또는 "spikesanddips" 인 문자열 매개 변수는 각각 급증, dip만 또는 둘 다를 검색 합니다.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause

이벤트의 특정 열을 기반으로 모델의 학습을 분할 하는 데 사용 됩니다. 모델은 모든 파티션에 동일한 함수 매개 변수 설정을 적용 합니다.

limit_duration_clause 기간 (단위, 길이)

시간을 기준으로 Stream Analytics 내의 슬라이딩 윈도우 크기입니다. 이 시간 창의 권장 크기는 historySize 이벤트 수를 안정 된 상태로 생성 하는 데 걸리는 시간과 동일 합니다.

when_clause

변칙 검색을 수행 하기 위해 모델에서 허용할 이벤트의 부울 조건을 지정 합니다. When_clause 은 선택적입니다.

반환 형식

함수는 다음 열로 구성 된 중첩 레코드를 반환 합니다.

IsAnomaly

이벤트가 비정상 인지 여부를 나타내는 BIGINT (0 또는 1)입니다.

점수

비정상적인 이벤트의 발생 방식을 나타내는 계산 된 p 값 점수 (float)입니다. 낮은 점수는 이벤트가 동일한 분포의 일부일 가능성이 낮은 확률을 의미 하므로 더 비정상입니다.

다음 예에서는 2 분 슬라이딩 윈도우에서 기록 크기가 120 인 이벤트의 초당 단일 이벤트를 단일 입력 속도로 가정 합니다. 최종 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