series_decompose_anomalies()
異常検出は、系列分解に基づいて行われます。 詳細については、series_decompose() を参照してください。
この関数は、系列 (動的な数値配列) を含む式を入力として受け取り、スコアを使用して異常なポイントを抽出します。
構文
series_decompose_anomalies (
シリーズ,
[ しきい値,
季節,
傾向,
,
Test_points,
AD_methodSeasonality_threshold ])
構文規則について詳しく知る。
パラメーター
名前 | 型 | 必須 | 説明 |
---|---|---|---|
系列 | dynamic |
✔️ | 数値の配列。通常は、 make-series 演算子または make_list 演算子の結果の出力です。 |
しきい値 | real |
異常しきい値。 マイルドまたはより強い異常を検出するための既定値は 1.5、k の値です。 | |
季節性 | int |
季節分析を制御します。 次の値を指定できます。 - -1 : series_periods_detectを使用して季節性を自動検出します。 これが既定値です。- 整数の期間: ビン数で予想される期間を指定する正の整数。たとえば、系列がビン内にある 1h 場合、週単位の期間は 168 ビンです。- 0 : 季節性はないため、このコンポーネントの抽出はスキップしてください。 |
|
傾向 | string |
傾向分析を制御します。 次の値を指定できます。 - avg : 傾向コンポーネントを として average(x) 定義します。 既定値です。- linefit : 線形回帰を使用して傾向コンポーネントを抽出します。- none : 傾向がないため、このコンポーネントの抽出をスキップします。 |
|
Test_points | int |
学習 (回帰) プロセスから除外する系列の末尾にあるポイントの数を指定する正の整数。 このパラメーターは、予測のために設定する必要があります。 既定値は 0 です。 | |
AD_method | string |
次のいずれかの値を含む、残差時系列の異常検出方法を制御します。 - ctukey : カスタム 10 ~ 90 パーセンタイル範囲を使用した Tukey のフェンス テスト 。 既定値です。- tukey :標準の25-75パーセンタイル範囲を持つ Tukeyのフェンステスト 。残差時系列の詳細については、「 series_outliers」を参照してください。 |
|
Seasonality_threshold | real |
季節性が自動検出に設定されている場合の 季節性 スコアのしきい値。 既定のスコアしきい値は 0.6 です。 詳細については、「series_periods_detect」を参照してください。 |
戻り値
この関数からは、次のそれぞれの系列が返されます。
ad_flag
: それぞれアップ/ダウン/異常なしをマークする (+1、-1、0) を含む三項系列ad_score
: 異常スコアbaseline
: 分解に従った、系列の予測値
アルゴリズム
この関数は、次のステップに従います。
- それぞれのパラメーターを使用して、series_decompose() を呼び出し、ベースラインと残差の系列を作成します。
- 残差系列に対して選択した異常検出方法と一緒に、series_outliers() を適用することにより、ad_score 系列を計算します。
- ad_score にしきい値を適用して、それぞれアップ/ダウン/異常なしをマークすることにより、ad_flag 系列を計算します。
例
週単位で季節性の異常を検出する
次の例では、週単位の季節性を持つ系列を生成し、それにいくつかの外れ値を追加します。 series_decompose_anomalies
では、季節性を自動検出し、反復パターンをキャプチャするベースラインを生成します。 追加した外れ値は、ad_score コンポーネントで明確に見つけることができます。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| render timechart
傾向を使用して週単位の季節性の異常を検出する
この例では、前の例からの系列に傾向を追加します。 まず、既定のパラメーターを使用して series_decompose_anomalies
を実行します。この場合は、傾向 avg
の既定値として平均のみが使用され、傾向が計算されません。 生成されたベースラインには傾向が含まれておらず、前の例と比較して精度が低くなっています。 その結果、変性が大きいため、データに挿入した外れ値の一部が検出されません。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
次に、同じ例を実行します。ただし、系列での傾向を期待しているため、傾向パラメーターには linefit
を指定します。 ベースラインが入力系列にはるかに近いことを確認できます。 挿入された外れ値はすべて検出され、一部の擬陽性も検出されます。 しきい値の調整に関する次の例を参照してください。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 1.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
異常検出のしきい値を調整する
前の例では、いくつかのノイズ ポイントが異常として検出されました。 次に、異常検出のしきい値を、既定値の 1.5 から 2.5 に増やします。 このパーセンタイル範囲を使用して、より重度の異常のみが検出されるようにします。 これで、データに挿入した外れ値だけが検出されます。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and onlgoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 2.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示