(57)【特許請求の範囲】
【請求項１】
複数のベクトルのうちから異常ベクトルを検出する、異常ベクトル検出装置であって、
変数ｊ（ただしｊは２以上の整数）の、異なる複数の値について、
‐前記複数のベクトルを、ｊ個のクラスタに分類するステップと、
‐前記ｊ個のクラスタのうちから異常クラスタを検出する、異常クラスタ検出ステップと、
‐前記異常クラスタに属する各ベクトルについて異常度を決定する、異常度決定ステップと、
を実行する、異常度決定機能と、
各ベクトルの前記異常度に基づき、各ベクトルが異常ベクトルであるか否かを判定する、異常ベクトル判定機能と
を備える、異常ベクトル検出装置。
【請求項２】
前記異常度決定機能は、所定数のｊの値について、少なくとも１個の異常クラスタが検出され、かつ、少なくとも１個の異常クラスタに属する少なくとも１個のベクトルの前記異常度が、前記所定数のｊの値すべてにおいて同一となるまで実行される、請求項１に記載の異常ベクトル検出装置。
【請求項３】
前記異常度決定機能は、変数ｉ（ただしｉは１以上の整数）の、異なる複数の値について実行され、
前記異常クラスタ検出ステップは、各クラスタについて、そのクラスタに属するベクトルの数がｉ個以下である場合に、そのクラスタを異常クラスタとして検出するステップである、請求項１または２に記載の異常ベクトル検出装置。
【請求項４】
前記異常ベクトル判定機能は、変数ｉおよびｊについて算出された各ベクトルの暫定異常度に基づいて実行される、請求項３に記載の異常ベクトル検出装置。
【請求項５】
前記異常度決定ステップにおいて、各ベクトルの前記異常度は、そのベクトルと、ＳＶＭによって求められる他のクラスタに属する少なくとも１つの最近サポートベクトルとの距離に基づいて計算される、請求項１〜４のいずれか一項に記載の異常ベクトル検出装置。
【請求項６】
前記ベクトルは、それぞれ通信ネットワークを介した通信に関する値を表し、
前記異常ベクトルは、マルウェア等の影響による不審な通信に関する値である、
請求項１〜５のいずれか一項に記載の異常ベクトル検出装置。
【請求項７】
コンピュータを、請求項１〜６のいずれか一項に記載の異常ベクトル検出装置として機能させる、異常ベクトル検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、異常ベクトル検出装置および異常ベクトル検出プログラムに関する。
【背景技術】
【０００２】
大量のベクトルデータに含まれる正常なデータと異常なデータとを識別する方法として、様々な方法が公知である。たとえば特許文献１には、超球を用いた外れ値検出アルゴリズムが記載されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】安藤晋、鈴木英之進「情報理論的クラスタリングによる異常値クラスタの検出」、[online]、平成２０年１０月１２日、「５．２  外れ値検出と一クラス分類」、［平成２７年６月１７日検索］、インターネット＜URL:http:www.cs.gunma-u.ac.jp/~ando/jsai08_revised.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では、異常クラスタが複数存在する場合には、適切に異常ベクトルを検出することができないという問題があった。
【０００５】
たとえば非特許文献１のアルゴリズムでは、単一の超球しか扱うことができない。
【０００６】
この発明は、このような問題点を解決するためになされたものであり、異常クラスタが複数存在する場合に、より適切に異常ベクトルを検出できる、異常ベクトル検出装置および異常ベクトル検出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の問題点を解決するため、この発明に係る異常ベクトル検出装置は、複数のベクトルのうちから異常ベクトルを検出する、異常ベクトル検出装置であって、
変数ｊ（ただしｊは２以上の整数）の、異なる複数の値について、
‐前記複数のベクトルを、ｊ個のクラスタに分類するステップと、
‐前記ｊ個のクラスタのうちから異常クラスタを検出する、異常クラスタ検出ステップと、
‐前記異常クラスタに属する各ベクトルについて異常度を決定する、異常度決定ステップと、
を実行する、異常度決定機能と、
各ベクトルの前記異常度に基づき、各ベクトルが異常ベクトルであるか否かを判定する、異常ベクトル判定機能と
を備える。
【０００８】
前記異常度決定機能は、所定数のｊの値について、少なくとも１個の異常クラスタが検出され、かつ、少なくとも１個の異常クラスタに属する少なくとも１個のベクトルの前記異常度が、前記所定数のｊの値すべてにおいて同一となるまで実行されてもよい。
前記異常度決定機能は、変数ｉ（ただしｉは１以上の整数）の、異なる複数の値について実行され、
前記異常クラスタ検出ステップは、各クラスタについて、そのクラスタに属するベクトルの数がｉ個以下である場合に、そのクラスタを異常クラスタとして検出するステップであってもよい。
前記異常ベクトル判定機能は、変数ｉおよびｊについて算出された各ベクトルの暫定異常度に基づいて実行されてもよい。
前記異常度決定ステップにおいて、各ベクトルの前記異常度は、そのベクトルと、ＳＶＭによって求められる他のクラスタに属する少なくとも１つの最近サポートベクトルとの距離に基づいて計算されてもよい。
前記ベクトルは、それぞれ通信ネットワークを介した通信に関する値を表し、
前記異常ベクトルは、マルウェア等の影響による不審な通信に関する値であってもよい。
【０００９】
また、この発明に係る異常ベクトル検出プログラムは、コンピュータを、上述の異常ベクトル検出装置として機能させる。
【発明の効果】
【００１０】
この発明に係る異常ベクトル検出装置および異常ベクトル検出プログラムは、ベクトルを分類するクラスタの数を変化させつつ異常度を評価するので、異常クラスタが複数存在する場合に、より適切に異常ベクトルを検出することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態１に係る異常ベクトル検出装置の構成の例を示す図である。
【図２】異常ベクトル検出の対象となるベクトルの集合の例を示す図である。
【図３】図１の異常ベクトル検出装置の処理の流れを示すフローチャートである。
【図４】図１の異常ベクトル検出装置の動作の具体例を説明する図である。
【図５】図１の異常ベクトル検出装置の動作の具体例を説明する図である。
【図６】図１の異常ベクトル検出装置の動作の具体例を説明する図である。
【図７】図１の異常ベクトル検出装置の動作の具体例を説明する図である。
【図８】図１の異常ベクトル検出装置の動作の具体例を説明する図である。
【図９】図１の異常ベクトル検出装置の動作の具体例を説明する図である。
【発明を実施するための形態】
【００１２】
以下、この発明の実施の形態を添付図面に基づいて説明する。
実施の形態１．
図１に、本発明の実施の形態１に係る異常ベクトル検出装置１０の構成の例を示す。異常ベクトル検出装置１０は、複数のベクトルのうちから異常ベクトルを検出する装置である。
【００１３】
異常ベクトルとは、たとえば、複数のベクトルのうちで、他のベクトルとは異なる性質を持つ１個以上のベクトルを指す。たとえば、２次元のベクトルの集合において、ほとんどのベクトルがいずれの次元においても大きな値の要素を持っているときに、わずかな数のベクトルがいずれの次元においても小さな値の要素を持っている場合には、そのわずかな数のベクトルは異常ベクトルであると考えることができる。ただし、異常ベクトルの定義はこれに限らず、公知の定義を用いてもよいし、当業者が適宜決定してもよい。また、とくに異常ベクトルの数学的定義が明確に与えられなくとも、本発明の実施は可能である。
【００１４】
異常ベクトル検出装置１０はコンピュータとしての構成を含み、演算を行う演算手段２０と、情報を格納する記憶手段３０とを備える。たとえば、演算手段２０はＣＰＵ（中央処理装置）を含み、記憶手段３０は半導体メモリおよびＨＤＤ（ハードディスクドライブ）等の記憶媒体を含む。
【００１５】
記憶手段３０には異常ベクトル検出プログラムが格納されている。演算手段２０がこの異常ベクトル検出プログラムを実行することにより、演算手段２０を含むコンピュータは、本明細書に記載の異常ベクトル検出装置１０としての機能を実現する。すなわち、この異常ベクトル検出プログラムは、コンピュータを異常ベクトル検出装置１０として機能させる。
【００１６】
また、とくに図示しないが、異常ベクトル検出装置１０は、使用者の操作を受け付ける入力手段（キーボードおよび／またはマウス等）と、情報を出力する出力手段（ディスプレイおよび／またはプリンタ等）と、外部の通信ネットワークに対し情報の入出力を受け付けるネットワークインタフェースとを備える。
【００１７】
図２に、異常ベクトル検出の対象となるベクトルの集合の例を示す。ベクトルの集合は複数のベクトルを含み、図２の例では４２２９個のベクトルを含んでいる。本実施形態では、ベクトルの集合は各次元について最大値が１となるよう正規化されている。ベクトルの集合は、たとえば記憶手段３０に記憶される。
【００１８】
本実施形態では、ベクトルは、コンピュータによる、通信ネットワーク（インターネット等）を介した通信に関する値を表すデータである。通信に関する値は、たとえば通信の頻度およびデータサイズによって表される。具体例としては、ある次元（たとえば縦軸）が１時間あたりのＨＴＴＰリクエスト発行回数であり、別の次元（たとえば横軸）がＨＴＴＰリクエストの平均サイズである。
【００１９】
また、ベクトルの各要素を構成する数値は、通信やネットワークに関するものに限らず、連続的な数値データのベクトルなら汎用的に扱うことができる。言い換えると、回数やサイズなどの連続する数値に意味のあるデータなら扱うことができる。
【００２０】
また、本実施形態では、異常ベクトルは、マルウェア等の影響による不審な通信に関する値であるが、これに限定されない。たとえば、あるコンピュータにおいて通常の頻度およびデータサイズとは大きく異なる頻度やデータサイズの通信が発生した場合には、それは正常ではない通信である可能性が高いと考えることができる。正常でない通信とは、たとえば不審な通信であり、または、たとえばマルウェア等による通信である。ここでマルウェアとは、コンピュータウィルスその他の悪意のあるソフトウェアを含むが、これに限定されない。
【００２１】
以上のように構成される異常ベクトル検出装置１０の動作を、以下に説明する。
図３は、異常ベクトル検出装置１０の処理の流れの例を示すフローチャートである。
まず異常ベクトル検出装置１０の演算手段２０は、複数のベクトルからなる集合を取得する（ステップＳ１）。ここで、各ベクトルは記憶手段３０にあらかじめ記憶されていてもよいし、異常ベクトル検出装置１０の入力手段またはネットワークインタフェース等を介して入力されてもよい。
【００２２】
次に、演算手段２０は変数ｉを初期化する（ステップＳ２）。ここで、ｉは後述のステップＳ３からステップＳ７までの処理を繰り返し実行するためのループ変数である。また、ｉは異常クラスタの検出基準であり、異常クラスタに含まれるベクトル数を表す。すなわち、異常クラスタを検出する際（たとえば後述のステップＳ５）に、属するベクトルがｉ個以下であるようなクラスタが、異常クラスタであると判定されることになる。
【００２３】
ｉの初期値（ループ範囲の一方の限界）はたとえば１であるが、この値は１以上の整数であれば任意に設計可能である。また、ｉの終値（ループ範囲の他方の限界）はたとえば５であるが、この値は初期値以上の整数であれば任意に設計可能である。
【００２４】
次に、演算手段２０は変数ｊを初期化する（ステップＳ３）。ここで、ｊは後述のステップＳ４からステップＳ７までの処理を繰り返し実行するためのループ変数である。また、ｊはクラスタ分類を行う際（たとえば後述のステップＳ４）のクラスタ数を表す。
【００２５】
ｊの初期値（ループ範囲の一方の限界）はたとえば２であるが、この値は２以上の整数であれば任意に設計可能である。また、本実施形態では、ｊの終値（ループ範囲の他方の限界）は定義されない。ただしｊの終値を定義してもよく、たとえばベクトルの数と等しい値としてもよい。図２の例では４２２９個のベクトルが扱われるので、ｊの終値を４２２９としてもよい。
【００２６】
次に、演算手段２０は、すべてのベクトルをｊ個のクラスタに分類する（ステップＳ４）。ここで、複数のベクトルを複数のクラスタに分類する方法としては、たとえばｋ−ｍｅａｎｓ法を用いることができるが、他の任意の方法を用いてもよい。
【００２７】
次に、演算手段２０は、ステップＳ４で得られたｊ個のクラスタのうちから、異常クラスタを検出する（ステップＳ５、異常クラスタ検出ステップ）。たとえば、各クラスタについて、そのクラスタに属するベクトルの数がｉ個以下である場合に、そのクラスタを異常クラスタとして検出する。または、他の公知の基準を用いて異常クラスタを検出してもよい。ここで検出された異常クラスタに属するベクトルは、異常ベクトルの候補（異常候補ベクトル）であるということができる。
【００２８】
次に、演算手段２０は、異常クラスタに属する各ベクトルについて、暫定異常度を決定する（ステップＳ６、異常度決定ステップ）。ここで、各ベクトルの暫定異常度は、たとえば、そのベクトルと、他のクラスタに属する少なくとも１つのベクトルとの距離（たとえばユークリッド距離）に基づいて計算される。この「他のクラスタに属する少なくとも１つのベクトル」は、たとえば異常クラスタ（または異常クラスタに属するベクトルのいずれか）に最も近いベクトルとして選択することができる。
【００２９】
距離の計算には、たとえばＳＶＭ（Support Vector Machine)を用いることができる。ＳＶＭを用いると、あるクラスタ（異常クラスタ）と他の全クラスタとを隔てるのに適した超平面を求めることができる。また、ＳＶＭを用いると、あるクラスタ（異常クラスタ）と、他のクラスタに属するベクトルのうちこの超平面に最も近いもの（サポートベクトル）を、他の各クラスタについて求めることができる。この場合には、異常クラスタに属する各ベクトルの異常度は、そのベクトルと、そのベクトルに対するサポートベクトルのうちそのベクトルに最も近いもの（最近サポートベクトル）との距離として算出することができる。
【００３０】
異常クラスタに属するベクトル１つあたりの計算コストは、クラスタ数−１［回］となる。この計算コストは、ＳＶＭを用いない場合には全ベクトル数−１［回］となるが、ＳＶＭを用いることによりクラスタ数−１［回］に低減することができる。本実施形態では、たとえば異常クラスタに属するベクトル１つあたり４２２９−１＝４２２８［回］の計算ではなく、２８−１＝２７［回］の計算で済む場合がある。この計算量の低減効果は、３次元以上のデータでも得ることができる。
【００３１】
なお、異常クラスタに属さないベクトルについては、異常度を決定する必要はないが、０または他の定数または特定の値として決定してもよい。
【００３２】
次に、演算手段２０は、異常候補ベクトルの暫定異常度がｊの変化に対して安定しているか否かを判定する（ステップＳ７）。ここで、「安定している」とは、「収束した」と表現される状態であってもよい。
【００３３】
異常候補ベクトルの暫定異常度がｊの変化に対して安定しているか否かは、たとえば、所定数のｊの値について、少なくとも１個の異常クラスタが検出され、かつ、少なくとも１個の異常クラスタに属する少なくとも１個のベクトルとその暫定異常度がその所定数のｊの値すべてにおいて同一となったか否かによって判定される。
【００３４】
たとえば、この所定数を「１０」とすると、ある異常候補ベクトルの暫定異常度が１０個の異なるｊの値について同一となった場合に、暫定異常度はｊの変化に対して安定していると判定される。具体例として、各ベクトルＶ（ｐ）（ただしｐはベクトルのインデックスであり、値の範囲は１からベクトルの個数までとなる整数）の暫定異常度をＡ（ｐ，ｉ，ｊ）と表した場合において、ｐのある値ｐ１について、ベクトルＶ（ｐ１）が１≦ｊ≦１８のとき異常クラスタに属さず（したがって異常候補ベクトルではなく）、１９≦ｊ≦２８のとき異常クラスタに属して異常候補ベクトルとなり、Ａ（ｐ１，ｉ，ｊ）＝0.31となったとすると、異常候補ベクトルの暫定異常度は、ｊ＝２８のときにｊの変化に対して安定したと判定される。（なお、ステップＳ７の判定は、すべてのベクトルを考慮して総合的に行われる。上記から明らかなように、少なくとも１個の異常候補ベクトルの暫定異常度が安定していればよく、ベクトル単位で見たときに暫定異常度が安定しない異常候補ベクトルが存在しても、ステップＳ７の判定には影響しない。）
【００３５】
この例ではｊの値は連続であるが、ｊの値は連続でなくともよい。たとえばベクトルＶ（ｐ１）は１≦ｊ≦１８のとき異常クラスタに属さず、１９≦ｊ≦２３のとき異常クラスタに属してＡ（ｐ１，ｉ，ｊ）＝0.31となり、２４≦ｊ≦２６のとき異常クラスタに属さず、２７≦ｊ≦３１のとき異常クラスタに属してＡ（ｐ１，ｉ，ｊ）＝0.31となったとすると、異常候補ベクトルの暫定異常度はｊ＝３１のときにｊの変化に対して安定したと判定される。
【００３６】
言い換えると、同一の異常候補ベクトルとその暫定異常度が、ｊが１ずつ増加していく中で、断続または連続してｎ回（上記の例ではｎ＝１０）出現したら、安定もしくは収束したと判断される。
【００３７】
または、異常候補ベクトルの暫定異常度がｊの変化に対して安定しているか否かは、所定数の「連続する」ｊの値について、少なくとも１個の異常クラスタが検出され、かつ、少なくとも１個の異常クラスタに属する少なくとも１個のベクトルとその暫定異常度が、その所定数の連続するｊの値すべてにおいて同一となったか否かによって判定されてもよい。
【００３８】
異常候補ベクトルの暫定異常度がｊの変化に対して安定していないと判定された場合には、演算手段２０はｊの値を次の値に変更し（たとえば１だけ増加させ）、処理をステップＳ４に戻す。このようにして、演算手段２０は、ｊの異なる複数の値について、ステップＳ４〜Ｓ６の処理（異常度決定機能）を繰り返し実行する。
【００３９】
ステップＳ７において、異常候補ベクトルの暫定異常度がｊの変化に対して安定したと判定された場合には、演算手段２０はｉのループが終了したか否かを判定する（ステップＳ８）。たとえば、ｉが所定の終値に等しければｉのループが終了したと判定し、そうでなければ終了していないと判定する。
【００４０】
ｉのループが終了していないと判定された場合には、演算手段２０はｉの値を次の値に変更し（たとえば１だけ増加させ）、処理をステップＳ３に戻す。このようにして、演算手段２０は、ｉの異なる複数の値について、ステップＳ３〜Ｓ７の処理を繰り返し実行する。ここで、このループはステップＳ４〜Ｓ６の処理（異常度決定機能）を含むので、演算手段２０は、ｉの異なる複数の値について異常度決定機能を繰り返し実行するということができる。
【００４１】
ステップＳ８においてｉのループが終了したと判定された場合には、演算手段２０は、各ベクトルの最終異常度を決定する（ステップＳ９）。各ベクトルの最終異常度は、たとえば、ｉおよびｊについて算出された暫定異常度に基づいて決定される。
【００４２】
各ベクトルの最終異常度は、たとえば次のように算出することができる。まず、すべてのベクトルＶ（ｐ）のうち異常候補ベクトルとなったものと、その異常候補ベクトルが検知されたｉおよびｊについて、ｊを変化させた場合の暫定異常度Ａ（ｐ，ｉ，ｊ）の最頻値Ｌ（ｐ，ｉ）を求める。たとえば、あるｐおよびｉについて、暫定異常度Ａ（ｐ，ｉ，ｊ）＝0.2となるｊの値が５個あり、暫定異常度Ａ（ｐ，ｉ，ｊ）＝0.31となるｊの値が１０個あれば、最頻値Ｌ（ｐ，ｉ）＝0.31となる。最頻値が複数存在する場合には、それらに基づいて最終的なＬ（ｐ，ｉ）を決定してもよく、たとえばそれらのうち最も小さいものをＬ（ｐ，ｉ）としてもよい。次に、Ｌ（ｐ，ｉ）を最小とするｉの値およびそのときの暫定異常度Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝を決定する。次に、Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝を最大とするｐの値およびそのときの暫定異常度Ａｍ＝Ｍａｘｐ［Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝］を決定する。そして、各異常候補ベクトルＶ（ｐ）の最終異常度Ａｆ（ｐ）を、これらの比すなわちＡｆ（ｐ）＝Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝／Ａｍとして算出する。
【００４３】
次に、演算手段２０は、各ベクトルの最終異常度に基づき、各ベクトルが異常ベクトルであるか否かを判定する（ステップＳ１０、異常ベクトル判定機能）。ここで、最終異常度が所定の基準を満たすものを異常ベクトルと判定してもよい。所定の基準として、所定の閾値以上であるか否かを用いてもよい。たとえば、上記の最終異常度に基づき、Ａｆ（ｐ）≧０．８となるベクトルＶ（ｐ）は異常ベクトルであると判定し、そうでないベクトルＶ（ｐ）は異常ベクトルではないと判定してもよい。
【００４４】
以上のように動作する異常ベクトル検出装置１０および異常ベクトル検出プログラムによる動作の具体例を、図２の例を用いて以下に説明する。
以下の具体例では、変数ｉの初期値は１、終値は５である。変数ｊの初期値は２である。変数ｊの終値は定義されないが、４２２９と定義してもよい。異常度は各ベクトルと対応する最近サポートベクトルとの距離として算出される。異なる１０個のｊの値（連続であっても不連続であってもよい）について、少なくとも１個の異常候補ベクトルの暫定異常度が同一となった場合に、異常候補ベクトルとその暫定異常度がｊの変化に対して安定したと判定されるものとする。異常ベクトルの判定基準は０．８０とする。有効数字は２桁とする。
【００４５】
図２の例において、ベクトルＸ１〜Ｘ３が本来検出したい異常ベクトルであるとする。まずｉ＝１として異常クラスタの検出を行う（すなわち、単一のベクトルを含むクラスタのみが異常クラスタとなる）。ｊ＜１９（すなわち、クラスタの数が１９未満）の場合には、すべてのクラスタに複数のベクトルが分類され、異常クラスタは検出されない。
【００４６】
図４に示すように、ｊ＝１９の場合に、Ｘ１（0.02, 1.00）のみを含むクラスタＣ１が出現し、これが異常クラスタとなる。他のクラスタはすべて２個以上のベクトルを含んでおり、異常クラスタではない。異常クラスタＣ１に属するＸ１（0.02, 1.00）に対する最近サポートベクトルはＹ１（0.03, 0.69）であり、Ｘ１の暫定異常度すなわちＸ１とＹ１との距離は０．３１となる。なお、図４〜図７において、異常クラスタでないクラスタについてはとくに図示しない。
【００４７】
２０≦ｊ≦２８の場合についても同様の結果となる。すなわち、異常クラスタはＣ１のみであり、これに属するベクトルＸ１の暫定異常度は0.31である。ここで、ｊ＝２８の時に、１９から２８まで１０個の異なるｊの値（この例では連続する値であるが、断続であってもよい）についてベクトルＸ１の暫定異常度が同一であるので、異常候補ベクトルの暫定異常度がｊの変化に対して安定したと判定される。このようにしてｉ＝１のループが終了する。
【００４８】
次に、ｉ＝２について同様の処理が実行される（すなわち、２個以下のベクトルしか含まないクラスタが異常クラスタとなる）。ｊ＜１４（すなわち、クラスタの数が１４未満）の場合には、すべてのクラスタに３個以上のベクトルが分類され、異常クラスタは検出されない。
【００４９】
図５に示すように、ｊ＝１４の場合に、Ｘ２（1.00, 0.00）およびＸ３（0.98, 0.00）のみを含むクラスタＣ２が出現し、これが異常クラスタとなる。他のクラスタはすべて３個以上のベクトルを含んでおり、異常クラスタではない。異常クラスタＣ２に属するＸ２（1.00, 0.00）およびＸ３（0.98, 0.00）に対する最近サポートベクトルは、いずれもＹ５（0.65, 0.00）であり、Ｘ２およびＸ３の暫定異常度すなわちＹ５との距離はそれぞれ0.35および0.33となる。
【００５０】
１５≦ｊ≦１８の場合についても同様の結果となる。すなわち、異常クラスタはＣ２のみであり、これに属するベクトルＸ２およびＸ３の暫定異常度は、それぞれ、0.35および0.33となる。
【００５１】
その後、図６に示すように、ｊ＝１９の場合に、Ｘ１のみを含むクラスタＣ１が新たに出現し、これが異常クラスタとなる。また、Ｘ２およびＸ３のみを含むクラスタＣ２は依然として存在しており、異常クラスタのままである。他のクラスタはすべて３個以上のベクトルを含んでおり、異常クラスタではない。Ｘ１、Ｘ２およびＸ３の暫定異常度は、それぞれ、0.31、0.35および0.33となる。
【００５２】
２０≦ｊ≦２３の場合についても、ｊ＝１９の場合と同様の結果となる。ｊ＝２３の時に、異常候補ベクトルＸ２およびＸ３について、１４から２３まで１０個の異なるｊの値について暫定異常度が同一であるので、異常候補ベクトルの暫定異常度がｊの変化に対して安定したと判定される。このようにしてｉ＝２のループが終了する。なお、ベクトルＸ１の暫定異常度は、１９≦ｊ≦２３の５つのｊについてのみ同一であるが、ここでは異常候補ベクトルとして検出される。ただし、そのようなベクトルを異常候補ベクトルとして検出しないよう構成してもよい。
ｉ＝３のときは、ｉ＝２のときと同じ結果が得られるものとする。
【００５３】
ｉ＝４の場合には、図７に示すように、ｊ＝２３において異常候補ベクトルの暫定異常度が安定する。図７の例では、異常クラスタとしてＣ１〜Ｃ３が検出されている。Ｃ１はＸ１のみを含み、Ｃ２はＸ２およびＸ３のみを含み、Ｃ３はＹ１〜Ｙ４のみを含む。Ｘ１（0.02, 1.00）に対する最近サポートベクトルはＹ１（0.03, 0.69）である。Ｘ２（1.00, 0.00）およびＸ３（0.98, 0.00）に対する最近サポートベクトルはいずれもＹ５（0.65, 0.01）である。Ｙ１（0.03, 0.69），Ｙ２（0.03, 0.64），Ｙ３（0.03, 0.62），Ｙ４（0.03, 0.60）に対する最近サポートベクトルはいずれもＹ６（0.01, 0.43）である。
【００５４】
ｉ＝５の場合には、図８に示すように、ｊ＝９の場合に、Ｘ１およびＹ１〜Ｙ４のみを含むクラスタＣ４が出現し、これが異常クラスタとなる。他のクラスタはすべて６個以上のベクトルを含んでおり、異常クラスタではない。異常クラスタＣ４に属するＸ１およびＹ１〜Ｙ４に対する最近サポートベクトルはＹ６となる。なお、１≦ｉ≦４の場合には、Ｘ１の最近サポートベクトルはすべてＹ１であったが、ｉ＝５かつｊ＝９の場合には、Ｙ６となり、暫定異常度も0.57とこれまでより大きくなる。
【００５５】
１０≦ｊ≦１３の場合についても同様の結果となる。すなわち、異常クラスタはＣ４のみであり、これに属するベクトルＸ１およびＹ１〜Ｙ４の暫定異常度は、それぞれ、0.57、0.26、0.21、0.19および0.17となる。
【００５６】
その後、図９に示すように、ｊ＝１４の場合に、Ｘ１およびＹ１〜Ｙ４のみを含むクラスタＣ４と、Ｘ２およびＸ３のみを含むクラスタＣ２とが出現し、これらが異常クラスタとなる。他のクラスタはすべて６個以上のベクトルを含んでおり、異常クラスタではない。Ｘ１〜Ｘ３およびＹ１〜Ｙ４の暫定異常度は、それぞれ、0.57、0.35、0.33、0.26、0.21、0.19および0.17となる。
【００５７】
１５≦ｊ≦１８の場合についても、ｊ＝１４の場合と同様の結果となる。ｊ＝１８の時に、９から１８まで１０個の異なるｊの値についてＸ１およびＹ１〜Ｙ４のベクトルとその暫定異常度が同一であるので、異常候補ベクトルの暫定異常度がｊの変化に対して安定したと判定される。このようにしてｉ＝５のループが終了する。なお、Ｘ２およびＸ３のベクトルとその暫定異常度は、１４≦ｊ≦１８の５つのｊについてのみ同一であるが、ここでは異常候補ベクトルとして検出される。ただし、そのようなベクトルを異常候補ベクトルとして検出しないよう構成してもよい。
【００５８】
このとき、異常候補ベクトルごとに整理すると、
‐異常候補ベクトルのインデックスｐ
‐異常候補ベクトルＶ（ｐ）
‐ループ変数ｉ
‐Ｖ（ｐ）の最近サポートベクトルｗ（ｐ，ｉ，ｊ）のうち、ｊを変化させたときに最頻となるものＷ（ｐ，ｉ）
‐Ｖ（ｐ）の暫定異常度Ａ（ｐ，ｉ，ｊ）のうち、ｊを変化させたときの最頻値Ｌ（ｐ，ｉ）
をまとめると、たとえば次の通りになる。
【００５９】
ｐ          Ｖ（ｐ）  ｉ    Ｗ（ｐ，ｉ）  Ｌ（ｐ，ｉ）
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
２０６４      Ｘ１      １    Ｙ１          ０．３１
２０６４      Ｘ１      ２    Ｙ１          ０．３１
２０６４      Ｘ１      ３    Ｙ１          ０．３１
２０６４      Ｘ１      ４    Ｙ１          ０．３１
２０６４      Ｘ１      ５    Ｙ６          ０．５７
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
９２３      Ｘ２      ２    Ｙ５          ０．３５
９２３      Ｘ２      ３    Ｙ５          ０．３５
９２３      Ｘ２      ４    Ｙ５          ０．３５
９２３      Ｘ２      ５    Ｙ５          ０．３５
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
８９９      Ｘ３      ２    Ｙ５          ０．３３
８９９      Ｘ３      ３    Ｙ５          ０．３３
８９９      Ｘ３      ４    Ｙ５          ０．３３
８９９      Ｘ３      ５    Ｙ５          ０．３３
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
３２７４      Ｙ１      ４    Ｙ６          ０．２６
３２７４      Ｙ１      ５    Ｙ６          ０．２６
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
３７２６      Ｙ２      ４    Ｙ６          ０．２１
３７２６      Ｙ２      ５    Ｙ６          ０．２１
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
２３１７      Ｙ３      ４    Ｙ６          ０．１９
２３１７      Ｙ３      ５    Ｙ６          ０．１９
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
３７３０      Ｙ４      ４    Ｙ６          ０．１７
３７３０      Ｙ４      ５    Ｙ６          ０．１７
【００６０】
このようにしてｉのループが終了し、各ベクトルの暫定異常度が決定される。最終異常度は、Ｘ１〜Ｘ３およびＹ１〜Ｙ４についてのみ計算される。
【００６１】
最終異常度の計算のため、同一の異常候補ベクトルについてまとめると、
‐異常候補ベクトルのインデックスｐ
‐異常候補ベクトルＶ（ｐ）
‐暫定異常度Ａ（ｐ，ｉ，ｊ）のうち、ｊを変化させたときの最頻値Ｌ（ｐ，ｉ）を求め、さらにこれにおいてｉを変化させたときの最小値Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝
は、たとえば次の通りになる。
ｐ          Ｖ（ｐ）  Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝
２０６４    Ｘ１      ０．３１
９２３    Ｘ２      ０．３５
８９９    Ｘ３      ０．３３
３２７４    Ｙ１      ０．２６
３７２６    Ｙ２      ０．２１
２３１７    Ｙ３      ０．１９
３７３０    Ｙ４      ０．１７
【００６２】
Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝を最大とする異常候補ベクトルはＸ２すなわちｐ＝９２３であり、そのときの暫定異常度Ａｍ＝Ｍａｘｐ［Ｍｉｎｉ｛Ｌ（ｐ，ｉ）｝］＝０．３５である。これらより、Ｘ１〜Ｘ３およびＹ１〜Ｙ４の最終異常度は次のようになる。
Ｘ１（0.02, 1.00）  …  0.31/0.35 ≒ 0.89 ≧ 0.80
Ｘ２（1.00, 0.00）  …  0.35/0.35 ≒ 1.00 ≧ 0.80
Ｘ３（0.98, 0.00）  …  0.33/0.35 ≒ 0.94 ≧ 0.80
Ｙ１（0.03, 0.69）  …  0.26/0.35 ≒ 0.74 ＜ 0.80
Ｙ２（0.03, 0.64）  …  0.21/0.35 ≒ 0.60 ＜ 0.80
Ｙ３（0.02, 0.62）  …  0.19/0.35 ≒ 0.54 ＜ 0.80
Ｙ４（0.03, 0.60）  …  0.17/0.35 ≒ 0.49 ＜ 0.80
【００６３】
以上より、最終異常度が異常ベクトルの判定基準以上となったＸ１〜Ｘ３が異常ベクトル（真の異常ベクトル）であると判定され、最終異常度が異常ベクトルの判定基準未満となるＹ１〜Ｙ４は異常ベクトルではない（または偽の異常ベクトルである）と判定される。
【００６４】
このようにして、本発明の実施の形態１に係る異常ベクトル検出装置１０および異常ベクトル検出プログラムは、複数のベクトルのうちから異常ベクトルを検出する。ここで、異常ベクトル検出装置１０および異常ベクトル検出プログラムは、ベクトルを分類するクラスタの数を変化させつつ異常度を評価するので、異常クラスタが複数存在する場合（異常クラスタの数が不明である場合を含む）に、より適切に異常ベクトルを検出することができる。
【００６５】
たとえば、コンピュータによる通信の頻度およびデータサイズを値として持つベクトルのうちから、異常ベクトルを検出することにより、マルウェア等の影響による不審な通信を発見することが容易になる。
【００６６】
また、変数ｉにより、異常クラスタの検出基準を変更しながら暫定異常度を評価するので、異常ベクトルの分布の粗密によらずより適切な検出が可能である。たとえば図２の例では、ｉ＝１の場合にはまず異常クラスタＣ１が検出され、ｉ＝２の場合にはまず異常クラスタＣ２が検出されるので、安定の判断基準が緩い場合等には、安定する異常クラスタが異なる場合がある。実施の形態１によれば、異なるｉの値についての結果を総合的に考慮できるので、このような場合により適切な検出を行うことができる。
【００６７】
上述の実施の形態１において、次のような変形を施すことができる。
変数ｉのループは省略してもよい。すなわち、異常クラスタを検出する基準となるベクトルの個数を固定してもよい。
【００６８】
実施の形態１では、変数ｊの終値は定義されないが、変数ｊの終値を定義してもよい。その場合には、たとえばステップＳ６とステップＳ７との間にｊが終値に達したか否かの判定ステップを設け、ｊが終値に達した場合にはステップＳ８に進んでもよい。なお、ｊの終値を適宜設定してもよい。設定可能な終値の最大値はベクトルの数となる。
【００６９】
実施の形態１では、ステップＳ７のように暫定異常度の安定を待つが、安定を待たないようにしてもよい。たとえば、ｊについてもｉと同様に終値までループさせてもよい。
【００７０】
実施の形態１では、図２に示すようにベクトルは２次元のものであるが、３次元以上のベクトルの集合についても、同様に異常ベクトルを検出することができる。
【００７１】
実施の形態１では、ベクトルはそれぞれ通信ネットワークを介した通信に関する値を表すものであるが、他の値を表すものであってもよい。たとえばスポーツに関するものであってもよく、野球選手（たとえば投手）の奪三振数、打ち取り数、失点、防御率、等の値を表すものであってもよい。このようにすると、異常ベクトルを検出することにより、各選手の次年度の起用を決定する際に有用な情報を得ることができる。その他、様々なデータについて汎用的に扱うことが可能である。
【００７２】
実施の形態１では、図２に示すようにベクトルの集合は正規化されているが、正規化されていない集合を用いてもよい。また、その場合には、異常ベクトル検出装置１０はベクトルの集合を正規化する機能を備えてもよい。集合を正規化した場合には各次元について等しい重みをもって異常度を評価することができるが、そのような評価が不要である場合や、いずれかの次元をとくに重視したい場合等では、正規化されない集合を用いてもよい。
【符号の説明】
【００７３】
１０  異常ベクトル検出装置、Ｘ１〜Ｘ３，Ｙ１〜Ｙ６  ベクトル（Ｘ１〜Ｘ３  異常候補ベクトルおよび異常ベクトル、Ｙ１〜Ｙ４  異常候補ベクトル）、Ｃ１〜Ｃ４  クラスタ（異常クラスタ）。
【要約】      （修正有）【課題】ベクトルのクラスタ分類に基づいて異常ベクトルを検出する、異常ベクトル検出装置および異常ベクトルプログラムにおいて、異常クラスタが複数存在する場合に、より適切に異常ベクトルを検出できるものを提供する。【解決手段】異常ベクトル検出装置は、変数ｊ（ただしｊは２以上の整数）の、異なる複数の値について、複数のベクトルを、ｊ個のクラスタに分類するステップS4と、ｊ個のクラスタのうちから異常クラスタを検出する、異常クラスタ検出ステップＳ５と、異常クラスタに属する各ベクトルについて異常度を決定する、異常度決定ステップＳ６とを実行し、各ベクトルの異常度に基づき、各ベクトルが異常ベクトルであるか否かを判定するＳ１０。【選択図】図３【図１】
0005973636.tif 000002
【図２】
0005973636.tif 000003
【図３】
0005973636.tif 000004
【図４】
0005973636.tif 000005
【図５】
0005973636.tif 000006
【図６】
0005973636.tif 000007
【図７】
0005973636.tif 000008
【図８】
0005973636.tif 000009
【図９】
0005973636.tif 000010