統計的手法によるネットワーク監視データの異常の検出

観測されたメトリックが多すぎると、すべてのグラフを単独で追跡することができなくなります。 通常、この場合、重要度の低いテストは重要度の低いメトリックに使用されます。 しかし、値が適切に選択されていても、問題のいくつかは気付かれずに行きます。 これらの問題とそれらを検出する方法は何ですか-カットの下で。







免責事項

著者は数学的な背景を持っていますが、データマイニングや統計分析とは一切関係ありません。 この資料は、開発中の監視システム用に異常検索モジュール(脆弱なモジュールも含む)を作成する可能性を見つけるために実施された調査の結果です。


2つの写真で探しているもの



チャートの異常


ソースAnomaly.io



もちろん、実際には、すべてが必ずしもそれほど単純ではない:b)、e)、e)のみが明らかな異常である。



ソースcyberleninka.ru




現状



商用製品は、ほとんどの場合、統計と機械学習の両方を使用したサービスの形式で提供されます。 AIMSAnomaly.io (例のある優れたブログ)、 CoScale (Zabbixなどと統合する機能)、 DataDogGrokMetricly.comAzure (Microsoftから)。 Elasticには機械学習ベースのX-Packモジュールがあります。



自宅で展開できるオープンソース製品:





私の意見では、オープンソースは検索品質がはるかに劣っています。 異常の検索がどのように機能し、状況を修正できるかどうかを理解するには、統計を少し掘り下げる必要があります。 数学の詳細は簡略化され、ネタバレの下に隠されています。



モデルとそのコンポーネント



時系列を分析するために、シリーズの予想される機能(コンポーネント)を反映するモデルが使用されます。 通常、モデルは3つのコンポーネントで構成されます。





周期乗数などの追加コンポーネントをトレンド乗数として含めることができます。

異常(破局的イベント)または社会的(休日) 。 トレンドまたは季節性がデータに表示されない場合、モデルの対応するコンポーネントを除外できます。



モデルのコンポーネントの相互接続方法に応じて、そのタイプが決定されます。 したがって、すべてのコンポーネントが合計して観測シリーズを取得する場合、モデルは中毒性があり、乗算する場合は乗算型であり、乗算する場合は乗算し、追加する場合は混合すると言います。 通常、モデルのタイプは、データの予備分析に基づいて研究者によって選択されます。



分解



モデルのタイプとコンポーネントのセットを選択したら、時系列の分解に進むことができます。 コンポーネントへの分解。





ソースAnomaly.io



まず、ソースデータを平滑化することで傾向を強調します。 平滑化の方法と程度は、研究者が選択します。



シリーズ平滑化方法:移動平均、指数平滑化、および回帰
時系列を滑らかにする最も簡単な方法は、元の値の代わりに隣接する値の半分を使用することです





sn= fracxn+xn12







1つではなく複数の以前の値を使用する場合、つまり k近傍値の算術平均、この平滑化は、ウィンドウ幅kの単純な移動平均と呼ばれます





sn= fracxn+xn1+...+xnkk







以前の各値に対して、現在の係数への影響度を決定する独自の係数を使用する場合、 加重移動平均を取得します。



少し異なる方法は、指数平滑法です。 平滑化されたシリーズは次のように計算されます。最初の要素は元のシリーズの最初の要素と一致しますが、後続のものはフォーラムによって計算されます





sn= alphaxn+1 alphasn1







ここで、αは0から1までの平滑化係数です。αが1に近いほど、結果の系列が元の系列に似ていることがわかります。



線形トレンドを決定するには、線形回帰の計算方法を使用できます yt=a+bxt+ varepsilont 最小二乗法 hatb= frac overlinexy overlinex2 hata= baryb barx どこで  barx そして  bary -算術平均 x そして y



ソースウィキペディア




最初の系列から季節成分を決定するために、選択したモデルのタイプに応じてトレンドを減算するか、それで除算し、再び平滑化します。 次に、季節(期間)の長さ(通常は1週間)でデータを分割し、平均季節を見つけます。 シーズンの長さがわからない場合は、見つけることができます:



離散フーリエ変換または自己相関
私は、フーリエ変換がどのように機能するかを理解していなかったことを正直に認めます。 興味のある方は、次の記事をご覧ください。Rでのフーリエ変換を使用した季節性の検出、フーリエ変換に関する簡単な単語 。 私が理解するように、初期のシリーズ/関数は要素の無限の合計として表され、最初のいくつかの重要な係数が取られます。





自己相関を検索するには、関数を右にシフトし、元の関数とシフトされた関数(赤で強調表示)の間の距離/面積が最小になるような位置を探します。 明らかに、アルゴリズムにシフトステップと最大制限を設定する必要があります。到達すると、期間検索が失敗したと考えられます。




モデルと分解の詳細については、「 季節とトレンドの抽出:Rでの分解の使用 および「時系列データのパターンを識別する方法」を参照してください。



最初のシリーズからトレンドと季節要因を削除して、ランダムなコンポーネントを取得します。



異常の種類



ランダムなコンポーネントのみを分析する場合、多くの異常を次のいずれかのケースに減らすことができます。





おわりに



もちろん、異常を検出するための多くのアルゴリズムは、統計データ処理を目的としたR言語で既に実装されています。パッケージの形式: tsoutliersstrucchangeTwitter Anomaly Detection など 。 記事でRの詳細を読んでください。すでにビジネスでRを使用していますか? Rでの私の導入経験 パッケージを接続して使用しているようです。 ただし、問題があります。統計チェックのパラメーターの設定は、重要な値とは異なり、ほとんど明白ではなく、普遍的な値を持ちません。 この状況から抜け出す方法は、メトリックごとに独立した、まれな定期的な改良を伴う徹底的な(リソース集約型)による選択です。 一方、季節性に関係しない異常のほとんどは視覚的に明確に定義されており、レンダリングされたグラフィックスにニューラルネットワークを使用することを示唆しています。



アプリ



以下に、結果別のTwitter Breakoutと同等に機能し、Java Scriptで実装した場合の速度がいくぶん速い独自のアルゴリズムを示します。



区分的線形時系列近似アルゴリズム
近似

  1. 行が非常にノイズが多い場合、たとえば平均化されます。 5つの要素。
  2. 結果には、シリーズの最初と最後のポイントが含まれます。
  3. 現在のポリラインから行の最も離れた点を見つけて、セットに追加します。
  4. 折れ線から元の系列への平均偏差が元の系列の平均偏差より小さくなるか、折れ線の頂点の最大数に達するまで繰り返します(この場合、近似はおそらく失敗しました)。


データのシフトを見つけるためのアルゴリズム
シフト検出

  1. 元の破線を近似します
  2. 最初と最後を除いて、ポリラインの各セグメントに対して:

    • その高さを見つける h 開始と終了のy座標の差として。 高さが無視された間隔より小さい場合、そのようなセグメントは無視されます
    • 両方の隣接セグメント L そして R 各プロットを2で割る L1L2R1R2 行を近似し、行から行までの平均距離を見つけます- dL1dL2dR1dR2
    • もし |dL1dL2| そして |dR1dR2| より大幅に少ない h 、その後、シフトが検出されたと考えています


分布の変化を見つけるためのアルゴリズム
分布変更検出

  1. 最初のシリーズは、データの数に応じて3つ以上の長いセグメントに分割されます。
  2. 各セグメントでは、最小値と最大値が求められます。 各セグメントをその中心に置き換えると、2つの行(最小値と最大値)が形成されます。 次に、行は個別に処理されます。
  3. 系列は線形近似され、最初と最後を除く各頂点について、折れ線の隣接する頂点の左右にある最初の系列のデータが、 コルモゴロフ-スミルノフ検定を使用して比較されます。 違いが見つかった場合、ポイントが結果に追加されます。


コルモゴロフ-スミルノフ検定
させる x1x2...xn1 そして y1y2...yn2 2組の数値で、それらの差の重要性を評価する必要があります。



最初に、両方のシリーズの値はいくつかの(約12個の)カテゴリに分割されます。 次に、各カテゴリについて、数が計算されます fx シリーズに含まれる値 x 、および行の長さで除算されます n1 。 シリーズについても同様 y 。 各カテゴリについて |fxfy| そして、合計最大 dmax すべてのカテゴリで。 基準のチェック値は、式によって計算されます  lambda=dmax fracn1n2n1+n2



選択された有意水準  alpha (0.01、0.05、0.1のいずれか)、およびに従ってクリティカル値を決定します 。 もし \ラ 臨界値以上に、グループは大きく異なると考えられています。






All Articles