共用方式為


AnomalyDetection_SpikeAndDip (Azure 串流分析)

偵測時間序列事件中的暫時異常。

基礎機器學習模型會使用調適型核心密度估計演算法。

語法

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 (單位,長度)

根據時間,串流分析內的滑動視窗大小。 此時間範圍的建議大小相當於產生 歷程記錄 所花費的時間,將事件數目調整為穩定狀態。

when_clause

指定模型要接受之事件的布林條件,以執行異常偵測。 when_clause是選擇性的。

傳回型別

函式會傳回由下列資料行組成的巢狀記錄:

IsAnomaly

BIGINT (0 或 1) 指出事件是否異常。

分數

計算的 p 值分數 (浮點數) 指出事件異常程度。 較低的分數表示事件屬於相同分佈的機率較低,因此其異常程度愈高。

範例

下列範例假設 2 分鐘滑動視窗中每秒 1 個事件的統一輸入速率,且歷程記錄大小為 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