異常検出に関する妄想

IMG_2141.JPG
※去年の冬にいった渦潮で有名な鳴門大橋


今日、不正アクセスやウィルスなどを、変化点検出エンジンを用いて検出する方法について、ふと思いついた方法がある。
プログラムでシミュレーションもしていないし、理論的にも単純すぎて、説得力がないような方法だが、意外と効果があるんじゅないのかな、と妄想している。

では、その方法について、メモ程度に記載しておく。


まず、今自分が使っている変化点検出エンジンプログラムは、1次元の時系列データに対して、変化点を検出することができる。

しかし、不正アクセスやウィルスなどは、サーバーから見たとき、厳密には1次元の要素だけで判断できるわけではなくて、例えば、トラフィック量やアクセス頻度、接続ノード数、LoadAverage、など、複数の要素の複雑な絡み合いをマクロの視点から検証することで、判断することができる。

つまり、これらの複数の要素を多次元で扱い、その多次元の要素から得られたなんらかのマクロな値に対して変化点検出することで、異常状態を1次元のミクロな変化点検出のアルゴリズムから、多次元のデータによって絡み合い構成されるシステムの異常として、マクロの視点から検出することができるのではないかと考えた。

これを簡単に実現できる方法として、思いついたことを以下に紹介する。

まず、例えば3つの要素(トラフィック量、接続ノード数、LoadAverage)の時系列データを用意する。
そして、それぞれの要素を、変化点検出エンジンによって、ミクロに解析する。
それによって得られた3種類の変化点スコア時系列を、3次元ベクトルの時系列データとして扱う。
そして、そのベクトルの長さを計算し、その長さをシステムの変化量としてとらえ、そのシステム変化量の変化点検出を行う。

これによって得られた変化点スコアが、システム全体の変化点らしさとする。

単純に3次元のベクトルの長さに変換することが微妙ではあるが、単純な方法でもいい結果が得られることが多いので、結構期待してたりする。

それぞれの要素の変化点スコアを求めることによって、ベクトルの各次元のデータのスケールを統一することもできる。
正規化みたいなもんですね。

この方法を検証してみる価値はあるんじゃないかなーと思ってます。

後日、結果を公開します。

どうだろう・・・・・(‘A`)