次の方法で共有


異常検出_スパイクとディップ (AnomalyDetection_SpikeAndDip)

✅ Azure Stream Analytics ✅ Fabric Eventstream

時系列イベントの一時的な異常を検出します。

基になる機械学習モデルでは、アダプティブ カーネル密度推定アルゴリズムが使用されます。

構文

AnomalyDetection_SpikeAndDip(
    <scalar_expression>,
    <confidence>,
    <historySize>,
    <mode>)
OVER ([PARTITION BY <partition key>]
    LIMIT DURATION(<unit>, <length>)
    [WHEN boolean_expression])

論争

scalar_expression

モデルが異常検出を実行するイベント列または計算フィールド。 このパラメーターに使用できる値には、1 つの (スカラー) 値を返す FLOAT または BIGINT データ型が含まれます。

ワイルドカード式 * は使用できません。 また、 scalar_expression に他の分析関数や外部関数を含めることはできません。

信任

機械学習モデルの感度を設定する 1.00 から 100 (両端を含む) までの割合の数値。 信頼度が低いほど、検出される異常の数が多くなり、その逆も同様です。 70 から 90 までの任意の数から開始し、開発またはテストで観察された結果に基づいてこれを調整します。

historySize

モデルが継続的に学習し、異常のために次のイベントのスコア付けに使用するスライディング ウィンドウ内のイベントの数。 通常、これは、モデルが後続の異常にフラグを設定できるようにするための通常の動作の期間を表す必要があります。 履歴ログを使用して、教育を受けた推測から始め、開発またはテストで観察された結果に基づいて調整します。

モードの

値が "spikes"、"dips"、または "spikesanddips" である文字列パラメーター。それぞれ、スパイク、dip、またはスパイクと dip の両方のみを検出します。

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause

イベント内の特定の列に基づいてモデルのトレーニングをパーティション分割するために使用されます。 このモデルでは、すべてのパーティションに同じ関数パラメーター設定が適用されます。

limit_duration_clause DURATION(単位,長さ)

時間の観点から見た Stream Analytics 内のスライディング ウィンドウのサイズ。 この時間枠の推奨サイズは、 historySize のイベント数を安定状態で生成するのにかかる時間に相当します。

when_clause

異常検出を実行するためにモデルによって受け入れられるイベントのブール条件を指定します。 when_clauseは省略可能です。

戻り値の型

この関数は、次の列で構成される入れ子になったレコードを返します。

IsAnomaly

イベントが異常かどうかを示す BIGINT (0 または 1)。

スコア

イベントの異常を示す計算された p 値スコア (float)。 スコアが低いほど、イベントが同じ分布の一部である確率が低いため、異常度が高くなります。

例示

次の例では、履歴サイズが 120 イベントの 2 分間のスライディング ウィンドウで、1 秒あたり 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