(57)【要約】  異常要因推定装置において、多次元数値ベクトルで表される入力データに対する出力データの誤差に基づいて異常検知を行うための異常検知モデルを学習する学習部と、前記異常検知モデルにテストデータを入力し、当該異常検知モデルから出力される出力データと、前記テストデータとに基づいて当該テストデータが異常か否かを判断するテスト部と、前記テスト部により前記テストデータが異常であると判断された場合に、前記テストデータの各次元の異常に対する寄与度を、各次元の尤度に基づいて計算する要因推定部とを備える。
2020039610.tif 000002
【特許請求の範囲】
【請求項１】
多次元数値ベクトルで表される入力データに対する出力データの誤差に基づいて異常検知を行うための異常検知モデルを学習する学習部と、
前記異常検知モデルにテストデータを入力し、当該異常検知モデルから出力される出力データと、前記テストデータとに基づいて当該テストデータが異常か否かを判断するテスト部と、
前記テスト部により前記テストデータが異常であると判断された場合に、前記テストデータの各次元の異常に対する寄与度を、各次元の尤度に基づいて計算する要因推定部と
を備えることを特徴とする異常要因推定装置。
【請求項２】
前記学習部は、予めノイズを付与した入力データからノイズを除去したデータが出力されるように前記異常検知モデルを学習する
ことを特徴とする請求項１に記載の異常要因推定装置。
【請求項３】
前記要因推定部は、前記テストデータの異常度を小さくするように前記テストデータの各次元の値を変更するベクトルを探索し、当該ベクトルを用いて前記寄与度を計算する
ことを特徴とする請求項１又は２に記載の異常要因推定装置。
【請求項４】
前記要因推定部は、前記テストデータの異常度を小さくするように前記テストデータの各次元の値を変更するベクトルを探索し、各次元の尤度に基づいて前記寄与度を計算することに代えて、前記ベクトルを前記寄与度とする
ことを特徴とする請求項１又は２に記載の異常要因推定装置。
【請求項５】
前記要因推定部は、前記探索における各繰り返し処理の中で、その時点における探索点のベクトルを用いて計算した各次元の尤度に基づいて前記探索における目的関数を与える
ことを特徴とする請求項３又は４に記載の異常要因推定装置。
【請求項６】
前記学習部は、潜在変数を用いる学習を行うものであり、当該潜在変数が所定の分布に近くなるように学習を行う
ことを特徴とする請求項１ないし５のうちいずれか１項に記載の異常要因推定装置。
【請求項７】
異常要因推定装置が実行する異常原因推定方法であって、
多次元数値ベクトルで表される入力データに対する出力データの誤差に基づいて異常検知を行うための異常検知モデルを学習する学習ステップと、
前記異常検知モデルにテストデータを入力し、当該異常検知モデルから出力される出力データと、前記テストデータとに基づいて当該テストデータが異常か否かを判断するテストステップと、
前記テストステップにより前記テストデータが異常であると判断された場合に、前記テストデータの各次元の異常に対する寄与度を、各次元の尤度に基づいて計算する要因推定ステップと
を備えることを特徴とする異常原因推定方法。
【請求項８】
コンピュータを、請求項１ないし６のうちいずれか１項に記載の異常要因推定装置における各部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムからリアルタイムで収集した数値データを分析し、システムの異常を検知する技術に関するものである。
【背景技術】
【０００２】
様々なデータをリアルタイムで観測する機能が存在するシステムにおいて、正常時のデータを用いて正常時におけるメトリック間の相関関係を学習し、正常時におけるメトリック間の相関関係がテストデータにおいて崩れていた場合に、そのテストデータの「異常度」を出力するようなアルゴリズムが提案されている（非特許文献１、非特許文献２）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Hodge, Victoria J., and Jim Austin. "A survey of outlier detection methodologies." Artificial intelligence review 22.2 (2004): 85-126.
【非特許文献２】櫻田 麻由 ・ 矢入 健久，"オートエンコーダを用いた次元削減による宇宙機の異常検知"， 人工知能学会全国大会論文集 28, 1-3, 2014
【非特許文献３】池田，石橋，中野，渡辺，川原，"オートエンコーダを用いた異常検知におけるスパース最適化を用いた要因推定手法"，信学技報, vol. 117, no. 89, IN2017-18, pp. 61-66, 2017年6月.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このようなアルゴリズムでは、観測するデータが大量にあるような場合でも、一次元の「異常度」というメトリックで異常の有無を判断できるというメリットがあるが、異常と判断された場合に、どの観測データが要因で異常と判断されたかについてまでは分からない。この課題に対し、要因である観測データを推定する方法として、異常度が小さくなるような入力データをスパース最適化によって探索し、探索したベクトルとテストデータのベクトルの誤差が非ゼロとなる次元を要因として判断する方法が提案されている（非特許文献３）。【０００５】
図１、２は、このような方法による異常検知を示しており、図１は要因次元が一部である場合を示し、図２は要因が多くの次元に渡る場合を示している。この方法では、異常の要因である次元が全体の一部であるというスパース性の仮定を必要とするため、図２に示すように、多くの次元に渡って異常の要因が存在する場合に、スパース最適化では正しく要因推定の計算が行われず、要因次元のみを正しく抽出できないといった問題があった。【０００６】
本発明は上記の点に鑑みてなされたものであり、多次元数値ベクトルで表されるデータの異常を検知する技術において、異常の要因次元についてのスパース性の仮定を置くことなく、異常の要因次元を抽出することを可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
開示の技術によれば、多次元数値ベクトルで表される入力データに対する出力データの誤差に基づいて異常検知を行うための異常検知モデルを学習する学習部と、
前記異常検知モデルにテストデータを入力し、当該異常検知モデルから出力される出力データと、前記テストデータとに基づいて当該テストデータが異常か否かを判断するテスト部と、
前記テスト部により前記テストデータが異常であると判断された場合に、前記テストデータの各次元の異常に対する寄与度を、各次元の尤度に基づいて計算する要因推定部と
を備えることを特徴とする異常要因推定装置が提供される。
【発明の効果】
【０００８】
開示の技術によれば、多次元数値ベクトルで表されるデータの異常を検知する技術において、異常の要因次元についてのスパース性の仮定を置くことなく、異常の要因次元を抽出することを可能とする技術が提供される。
【図面の簡単な説明】
【０００９】
【図１】課題を説明するための図である。
【図２】課題を説明するための図である。
【図３】本発明の実施の形態における異常要因推定装置１００の機能構成図である。
【図４】異常要因推定装置１００のハードウェア構成の例を示す図である。
【図５】実施例１における異常要因推定装置１００の学習フェーズの動作を示すフローチャートである。
【図６】実施例１における異常要因推定装置１００のテストフェーズ及び要因推定フェーズの動作を示すフローチャートである。
【図７】実施例２における異常要因推定装置１００の学習フェーズの動作を示すフローチャートである。
【図８】実施例３における異常要因推定装置１００のテストフェーズ及び要因推定フェーズの動作を示すフローチャートである。
【図９】異常要因推定装置の評価結果を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施の形態（本実施の形態）を説明する。以下で説明する実施の形態は一例に過ぎず、本発明が適用される実施の形態は、以下の実施の形態に限られるわけではない。
【００１１】
（装置構成）
図３に、本実施の形態における異常要因推定装置１００の機能構成を示す。図３に示すように、異常要因推定装置１００は、学習部１０１、テスト部１０２、要因推定部１０３、記憶部１０４、入力部１０５、出力部１０６を有する。各部の動作内容については後述する実施例において説明する。
【００１２】
上述した異常要因推定装置１００は、例えば、コンピュータに、本実施の形態で説明する処理内容を記述したプログラムを実行させることにより実現可能である。
【００１３】
すなわち、異常要因推定装置１００は、コンピュータに内蔵されるＣＰＵやメモリ等のハードウェア資源を用いて、異常要因推定装置１００で実施される処理に対応するプログラムを実行することによって実現することが可能である。上記プログラムは、コンピュータが読み取り可能な記録媒体（可搬メモリ等）に記録して、保存したり、配布したりすることが可能である。また、上記プログラムをインターネットや電子メール等、ネットワークを通して提供することも可能である。
【００１４】
図４は、本実施の形態における上記コンピュータのハードウェア構成例を示す図である。図４のコンピュータは、それぞれバスＢで相互に接続されているドライブ装置１５０、補助記憶装置１５２、メモリ装置１５３、ＣＰＵ１５４、インタフェース装置１５５、表示装置１５６、及び入力装置１５７等を有する。
【００１５】
当該コンピュータでの処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ又はメモリカード等の記録媒体１５１によって提供される。プログラムを記憶した記録媒体１５１がドライブ装置１５０にセットされると、プログラムが記録媒体１５１からドライブ装置１５０を介して補助記憶装置１５２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１５１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１５２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１６】
メモリ装置１５３は、プログラムの起動指示があった場合に、補助記憶装置１５２からプログラムを読み出して格納する。ＣＰＵ１５４は、メモリ装置１５３に格納されたプログラムに従って、異常要因推定装置１００に係る機能を実現する。インタフェース装置１５５は、ネットワークに接続するためのインタフェースとして用いられる。表示装置１５６はプログラムによるＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）等を表示する。入力装置１５７はキーボード及びマウス、ボタン、又はタッチパネル等で構成され、様々な操作指示を入力させるために用いられる。
【００１７】
以下、異常要因推定装置１００の詳細な動作例として実施例１〜８を説明する。以下の各実施例において、異常検知アルゴリズムとしてオートエンコーダを用いることとするが、異常検知アルゴリズムとしては、variational autoencoderやadversarial autoencoderなどを用いてもよい。variational autoencoderについては、Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013).等が参考とされてもよい。また、adversarial autoencoderについては、Makhzani, Alireza, et al. "Adversarial autoencoders." arXiv preprint arXiv:1511.05644 (2015).等が参考とされてもよい。
【００１８】
なお、「variational autoencoder」、「adversarial autoencoder」、「denoising autoencoder」、「denoising variational autoencoder」、及びこれのいずれでもないautoencoderを総称して、オートエンコーダと称してもよい。また、本発明は、異常検知モデルとして既存のオートエンコーダ以外のモデルを使用する場合にも適用可能である。
【００１９】
以下で説明する実施例１〜８において、実施例１がベースとなる実施例であり、実施例１以降の実施例は、実施例１（又は実施例１以降の特定の実施例）と異なる部分を説明している。ただし、実施例１〜８は、矛盾が生じない限り、任意に組み合わせて実施することが可能である。例えば、図９を参照して後述するように、例えば「実施例７（ＶＡＥ）＋実施例５（Ｌ０ノルム）＋実施例２（ｄｅｎｏｉｓｉｎｇ）＋実施例１（偏差を寄与度）」のように、複数実施例を任意に組み合わせることができる。
【００２０】
異常要因推定装置１００において、オートエンコーダを用いる異常検知手法における学習とテストの基本的な動作例は下記のとおりである。
【００２１】
学習部１０１は、多次元数値ベクトルで表されるデータｘに対し、元のデータ空間Ｘと異なる空間Ｚへの写像ｆと、Ｚから元のデータ空間Ｘへの写像ｇについて、ｘとして正常データが与えられた時には、ｘをｆでＺに射影し、更にｇで元のデータ空間に射影して得られた母数θ（ｇ（ｆ（ｘ）））の元でのｘの尤度ｐ（ｘ｜θ（ｇ（ｆ（ｘ）））が最大になるようにｆとｇを学習する。
【００２２】
テスト部１０２は、異常検知の対象となるテストデータについて、テストデータをＸから写像ｆでＺに射影し、Ｚから写像ｇでＸに射影した際の尤度が小さい場合にそのデータを異常とみなす。
【００２３】
（実施例１）
まず、実施例１を説明する。実施例１では、異常要因推定装置１００は、異常検知アルゴリズムの実行によりテストデータが異常と判断された場合の要因を推定する際に、各次元の尤度に基づいて要因の次元を推定する。
【００２４】
実施例１における異常要因推定装置１００の動作を図５、図６のフローチャートの手順に沿って説明する。各フローチャートの"Ｓ１０１"などにおけるＳは"ステップ"の略である。異常要因推定装置１００の動作は、学習フェーズ（図５）とテストフェーズ及び要因推定フェーズ（図６）からなる。まず、図５の学習フェースを説明する。
【００２５】
＜学習フェーズ：Ｓ１０１＞
学習フェーズにおいては、まず、入力部１０５より学習データセットＸ＿ｔｒａｉｎ＝｛ｘ＿１，…，ｘ＿Ｔ｝が異常要因推定装置１００に入力される。
【００２６】
＜学習フェーズ：Ｓ１０２＞
続いて、学習部１０１は、入力された学習データセットを用いて、異常検知モデル（オートエンコーダ）を学習する。実施例１では、従来の一般的なオートエンコーダにおける学習方法を使用することができる。
【００２７】
従来の一般的なオートエンコーダにおける学習は、入力データｘと出力データｙ＝ｇ（ｆ（ｘ））の平均二乗誤差（ｘ＿ｉ−ｙ＿ｉ）＾２／Ｎ（ただしＮは次元数）を小さくするように行われる。このことは、ｐ（ｘ｜θ（ｇ（ｆ（ｘ））））を、平均がｙ、分散が１、共分散が全て０の正規分布として定義した場合に、負の対数尤度を最小化することで尤度を最大化するような学習を行うことと等価である。
【００２８】
学習が終了したら、学習済みモデルは記憶部１０４へと保存され、テストフェーズに移行する。図６を参照してテストフェースにおける異常要因推定装置１００の動作を説明する。
【００２９】
＜テストフェーズ：Ｓ１１１＞
入力部１０５よりテストデータｘ＿ｔｅｓｔが異常要因推定装置１００に入力される。
【００３０】
＜テストフェーズ：Ｓ１１２＞
次に、テスト部１０２は、従来技術と同様にして記憶部１０４に保存された学習済みモデル（異常検知モデル）を用いて、ｘ＿ｔｅｓｔの異常度を、平均二乗誤差（ｘ＿ｉ−ｙ＿ｉ）＾２／Ｎとして計算する。
【００３１】
＜テストフェーズ：Ｓ１１３＞
テスト部１０２は、計算された異常度が、予め定めた閾値以上であるかどうかを判定し、予め定めた閾値以上でなければ今回の処理を終了する。異常度が予め定めた閾値以上であった場合、ｘ＿ｔｅｓｔは異常データとみなされ、要因推定部１０２へと送られ、要因推定フェーズへと移る。
【００３２】
＜要因推定フェーズ：Ｓ１１４＞
要因推定部１０３は、ｘ＿ｔｅｓｔにおける各次元（ｉで表わされる）の尤度（ここではｐ（ｘ＿ｔｅｓｔ＿ｉ｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ））））＝ｅｘｐ（−（ｘ＿ｔｅｓｔ＿ｉ−ｙ＿ｉ）＾２／２）／（２π）＾（１／２））に基づいて、各次元の異常に対する寄与度を決定する。決定された寄与度は出力部１０６から出力される。このように、各次元の尤度に基づいて各次元の異常に対する寄与度を決定することにより、既存技術のように要因次元数に対してスパース性の仮定を置くことなく、各次元がその値を取る「尤もらしさ」に基づいた要因次元の抽出を行うことができる。
【００３３】
例えば、異常に対する寄与が大きいほど、尤度は低くなると考えられるので、尤度を負にした値、尤度の逆数、対数尤度を負にした値、又は対数尤度の逆数などを寄与度として使用することができる。また、寄与度として、正常時よりも大きいのか小さいのかを正負で与えたい場合には、要因推定部１０３は、例えば平均からの偏差（ｘ＿ｉ−ｙ＿ｉ）を寄与度として計算してもよい。
【００３４】
また、尤度関数が一般的な正規分布で与えられる異常検知アルゴリズム（variational autoencoderなど）の場合には、要因推定部１０３は、分散も考慮した偏差（ｘ＿ｉ−μ＿ｉ／σ＿ｉ）を寄与度として計算することとしてもよい。なお、μは平均値であり、σは標準偏差である。
【００３５】
（実施例２）
次に、実施例２を説明する。実施例２では、学習フェーズが実施例１と異なる。実施例２におけるテストフェーズ及び要因推定フェーズの処理内容は実施例１と同じである。実施例２の学習フェーズにおける処理を図７のフローチャートを参照して説明する。
【００３６】
＜学習フェーズ：Ｓ２０１＞
学習フェーズにおいては、まず、入力部１０５より学習データセットＸ＿ｔｒａｉｎ＝｛ｘ＿１，…，ｘ＿Ｔ｝が異常要因推定装置１００に入力される。
【００３７】
＜学習フェーズ：Ｓ２０２＞
続いて、学習部１０１は、Ｘ＿ｔｒａｉｎを用いて、ノイズデータをＸ＿ｔｒａｉｎに付与しても、ノイズを付与する前のＸ＿ｔｒａｉｎに対する尤度が高くなるように異常検知モデルを学習する。つまり、異常検知モデルを学習させる際に、予めノイズを付与したデータを入力しても、ノイズを付与する前のデータに対する平均二乗誤差が小さくなるように学習が進められる。
【００３８】
テストデータが異常を含むデータｘ'であるとすると、実施例１の要因推定フェーズで説明した尤度の計算において誤差が生じる恐れがあるが、上述したＳ２０２におけるノイズを除去するようなモデルの学習により、異常をノイズとして除去して尤度ｐ（ｘ'＿ｉ｜θ（ｇ（ｆ（ｘ'））））をできる限り正しく計算できるようになる。
【００３９】
実施例２において学習するモデルは、異常検知アルゴリズムがオートエンコーダである場合はdenoising autoencoderに相当し、variational autoencoderである場合にはdenoising variational autoencoderに相当する。denoising autoencoderについては、Vincent, Pascal, et al. "Extracting and composing robust features with denoising autoencoders." Proceedings of the 25th international conference on Machine learning. ACM, 2008.等が参考とされてもよい。また、denoising variational autoencoderについては、Im, Daniel Jiwoong, et al. "Denoising Criterion for Variational Auto-Encoding Framework." AAAI. 2017.等が参考とされてもよい。
【００４０】
（実施例３）
次に、実施例３を説明する。実施例３では、学習フェーズは実施例１又は実施例２と同じである。実施例３における要因推定フェーズの処理内容が実施例１、２と異なる。実施例３のテストフェーズ及び要因推定フェーズにおける処理を図８のフローチャートを参照して説明する。
【００４１】
＜テストフェーズ：Ｓ３１１＞
入力部１０５よりテストデータｘ＿ｔｅｓｔが異常要因推定装置１００に入力される。
【００４２】
＜テストフェーズ：Ｓ３１２＞
次に、テスト部１０２は、記憶部１０４に保存された学習済みモデルを用いて、ｘ＿ｔｅｓｔの異常度を、平均二乗誤差（ｘ＿ｉ−ｙ＿ｉ）＾２／Ｎとして計算する。
【００４３】
＜テストフェーズ：Ｓ３１３＞
テスト部１０２は、計算された異常度が、予め定めた閾値以上であるかどうかを判定し、予め定めた閾値以上でなければ今回の処理を終了する。異常度が予め定めた閾値以上であった場合、ｘ＿ｔｅｓｔは異常データとみなされ、要因推定部１０２へと送られ、要因推定フェーズへと移る。
【００４４】
＜要因推定フェーズ：Ｓ３１４＞
要因推定部１０３は、ｘ＿ｔｅｓｔ−η（ηはベクトル）に基づいて計算された尤度が閾値以上となるようなηを探索する。すなわち、実施例３では、実施例１で用いたｐ（ｘ＿ｔｅｓｔ＿ｉ｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ））））ではく、ｐ（ｘ＿ｔｅｓｔ−η｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ−η））））が閾値以上となるようなベクトルηを探索する。
【００４５】
ここでは、ｐ（ｘ＿ｔｅｓｔ−η｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ−η））））が大きくなるようにηを計算していることから、ηはｘ＿ｔｅｓｔの各次元をどの程度動かしたら、異常度が小さくなるかを表すベクトルである。ηの探索方法としては、単純にｐ（ｘ＿ｔｅｓｔ−η｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ−η））））を最大化するような最急上昇法、又はそれと等価な、負の対数尤度−ｌｏｇ  ｐ（ｘ＿ｔｅｓｔ−η｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ−η））））を最小化するような最急降下法などを使用することができる。
【００４６】
＜要因推定フェーズ：Ｓ３１５＞
要因推定部１０３は、η又は尤度（ｐ（ｘ＿ｔｅｓｔ＿ｉ｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ―η）））））に基づいて各次元の異常に対する寄与度を計算する。すなわち、ηをそのまま寄与度とみなすことしてもよいし、実施例１と同様に尤度を用いて寄与度を計算してもよい。
【００４７】
（実施例４）
次に、実施例４を説明する。実施例４は、実施例３に基づくものである。実施例４では、実施例３の要因推定フェーズ（Ｓ３１４）において、ηに対してＬ＿ｐノルム項｜｜η｜｜＿ｐを与えた上でηの探索を行う。これは、入力データが多次元である場合、異常の要因である次元の数は限られるであろうという前提に基づいた探索を行うことで、より尤もらしい計算結果を得るためである。
【００４８】
負の対数尤度の最小化による探索を行う場合、ｐ＝２であれば、Ｌ２ノルム項λ｜｜η｜｜＿２＾２を与えた最急降下法で良い。すなわち、「−ｌｏｇ  ｐ（ｘ＿ｔｅｓｔ−η｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ−η））））＋λ｜｜η｜｜＿２＾２」を最小化するような最急降下法を用いる。
【００４９】
ただし、λは予め与えられ、場合によっては探索途中において自律的に調節されるパラメータである。ｐ＝１の場合、Ｌ１ノルム項はλ｜｜η｜｜＿１となり、Ｌ１ノルム項付きの最小化手法としては例えば近接勾配法などを用いることができる。近接勾配法については、Beck, Amir, and Marc Teboulle. "A fast iterative shrinkage-thresholding algorithm for linear inverse problems." SIAM journal on imaging sciences 2.1 (2009): 183-202.等が参考とされてもよい。ｐ＝０の場合には、例えば得られた解について、次元上位Ｋ次元以外をすべてゼロにする方法や、探索時に、異常度（＝負の対数尤度）についての勾配が大きい上位Ｋ次元以外の勾配をすべてゼロにしながら最急降下法を繰り返す方法などを用いることができる。ただし、Ｋも予め与えられ、場合によっては探索途中において自律的に調節されるパラメータである。
【００５０】
（実施例５）
次に、実施例５を説明する。実施例５も、実施例３に基づくものである。実施例５では、要因推定部１０３は、実施例３の要因推定フェーズ（Ｓ３１４）における探索の各イテレーションにおいて、その時の探索点η＿ｔを用いて計算された各次元の尤度ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ−η＿ｔ）））を計算し、各次元の尤度に応じた目的関数の調整を行う。
【００５１】
例えば、目的関数として各次元が条件付き独立である場合の対数尤度−ｌｏｇ  ｐ（ｘ＿ｔｅｓｔ―η｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ―η））））  ＝  Σ＿ｉ＝１＾Ｎ（−ｌｏｇ  ｐ（ｘ＿ｔｅｓｔ＿ｉ―η＿ｉ｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ―η））））＿ｉ）（ただしＮは全次元数）を考える場合、探索時刻ｔにおける探索点η＿ｔを用いて計算された各次元の尤度の逆数をｗ＿ｉ＝１／ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ−η＿ｔ）））とすると、目的関数をｗ＿ｉで重み付けされた対数尤度Σ＿ｉ＝１＾Ｎ（ｗ＿ｉ（−ｌｏｇ  ｐ（ｘ＿ｔｅｓｔ＿ｉ―η＿ｉ｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ―η））））＿ｉ））として与えることが考えられる。これは、尤度の高い次元は異常の要因である可能性が低いため、その次元の尤度を上げることよりも尤度の低い次元の尤度を上げることを強調させるためである。一方、異常の要因の次元以外の尤度を上げることで異常の次元を明確化するような探索を行う場合は、次元ｉの尤度をそのままｗ＿ｉとして重み付けされた対数尤度Σ＿ｉを目的関数としてもよい。あるいは、尤度があらかじめ与えたしきい値を下回る場合ｗ＿ｉ＝０、上回る場合ｗ＿ｉ＝１とした対数尤度Σ＿ｉを目的関数とする方法も考えられる。
【００５２】
また、実施例４と組み合わせることも可能である。実施例４と組み合わせる場合、目的関数に付与するノルム項を、尤度に用いて調整することとしてもよい。ノルム項の調整の仕方としては、例えばｐ＝１、２の場合は、各次元の尤度（又は対数尤度であったり、それらに比例する値）を重みｗ＿ｉとしたノルム項λ｜｜ｗ・η｜｜を用いることができる。これは、探索途中であっても、尤度が大きい次元は異常の要因である可能性が低いため、できる限り対応するηの次元を動かさないようにするためである。ｐ＝０の場合には、例えば尤度の下位Ｋ次元以外の勾配をすべてゼロにしながら最急降下法を繰り返す方法などを用いることができる。
【００５３】
（実施例６）
次に、実施例６を説明する。実施例６では、要因推定部１０３は、実施例１の要因推定フェーズ（Ｓ１１４）において、ｐ（ｘ｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ）−ξ））が閾値以上となるようなベクトルξを探索し、各次元の異常に対する寄与度を、各次元の尤度ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ）−ξ））に基づいて与える。
【００５４】
この処理は、実施例３〜５では入力データ空間における探索を行っているのに対し、潜在変数空間において「もしｘ＿ｔｅｓｔが正常であった場合に、潜在変数空間に写像された場合の値」を探索しているのに等しく、これにより、潜在変数空間のサイズが入力データ空間に比べて小さい場合に、探索を効率的に行うことで、より短時間で要因次元の抽出が行える可能性がある。探索の方法や尤度に基づいた寄与度の計算については、実施例３〜５と同様に行うことができる。また、潜在変数空間に写像された場合の値を探索するのではなく、分布ｇ(・)の母数について直接探索をおこなってもよい。また、実施例５と組み合わせる場合、探索の各イテレーションにおいて、その時の探索点ξ＿ｔを用いて計算された各次元の尤度ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ）−ξ＿ｔ））を計算し、各次元の尤度に応じた目的関数の調整を行うこととしてもよい。
【００５５】
（実施例７）
次に、実施例７を説明する。実施例７では、実施例１の学習フェーズ（Ｓ１０２）において、学習部１０１は、潜在変数が任意の分布ｐ＿ｚ（ｚ）に近くなるように学習を行う。これにより、潜在変数への写像に制約を与え、入力データの構造を活用したより効率的な写像を学習することで、正常データの特徴をより正確に学習し、それに伴い要因次元の抽出精度の向上が期待できる。ｐ＿ｚ（ｚ）を標準分布として、学習時の損失関数にＫＬ距離を与えたものがvariational autoencoderに相当し、ｐ＿ｚ（ｚ）を任意の分布とし、ｆ（ｘ）とｐ＿ｚ（ｚ）の分類を行う識別器の学習と、識別器が誤った分類をするようなｆの学習を繰り返すのがadversarial autoencoderに相当する。
【００５６】
（実施例８）
次に、実施例８を説明する。実施例８では、要因推定部１０３は、実施例１の要因推定フェーズ（Ｓ１１４）において、異常に対する寄与度を尤度ではなく、ｐ（ｘ＿ｔｅｓｔ―η｜θ（ｇ（ｆ（ｘ＿ｔｅｓｔ―η））））が閾値以上となるようなベクトルηを探索し、ηを寄与度とみなす。この実施例は、実施例３においてηをそのまま寄与度とみなすことに相当する。
【００５７】
（実施例のまとめ）
以上、説明したように、異常要因推定装置１００は、多次元数値ベクトルで表されるデータｘに対し、元のデータ空間Ｘと異なる空間Ｚへの写像ｆと、Ｚから元のデータ空間Ｘへの写像ｇについて、ｘとして正常データが与えられた時には、ｘをｆでＺに射影し、更にｇで元のデータ空間に射影して得られた母数θ（ｇ（ｆ（ｘ）））の元でのｘの尤度ｐ（ｘ｜θ（ｇ（ｆ（ｘ）））が最大になるようにｆとｇを学習し、異常検知の対象となるテストデータについては、テストデータをＸから写像ｆでＺに射影し、Ｚから写像ｇでＸに射影した際の尤度が小さい場合にそのデータを異常とみなすような異常検知を実行する。
【００５８】
実施例１において、異常要因推定装置１００は、テストデータが異常と判断された場合に、各次元の異常に対する寄与度を、各次元の尤度ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ）））に基づいて計算する。
【００５９】
実施例２では、異常要因推定装置１００は、実施例１の動作において、ｆ及びｇを学習する際に、入力データｘに対してノイズを付与したデータｘ'が入力された際に、ノイズを付与する前のｘに対する尤度ｐ（ｘ｜θ（ｇ（ｆ（ｘ'）））が最大になるような学習を行う。
【００６０】
実施例３では、異常要因推定装置１００は、実施例１の動作において、ｐ（ｘ−η｜θ（ｇ（ｆ（ｘ−η）））が閾値以上となるようなηを探索し、各次元の異常に対する寄与度を、η又は各次元の尤度ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ−η）））に基づいて計算する。
【００６１】
実施例４では、異常要因推定装置１００は、実施例３の動作において、ηの探索時にＬ＿ｐノルム項｜｜η｜｜＿ｐを与えるようにする。
【００６２】
実施例５では、異常要因推定装置１００は、実施例３の動作において、探索時の各イテレーションにおいて、その時の探索点η＿ｔを用いて計算された各次元の尤度ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ−η＿ｔ）））に基づいて、ηの探索における目的関数を与える。
【００６３】
実施例６では、異常要因推定装置１００は、実施例１の動作において、ｐ（ｘ｜θ（ｇ（ｆ（ｘ）−ξ））が閾値以上となるようなξを探索し、各次元の異常に対する寄与度を、各次元の尤度ｐ（ｘ＿ｉ｜θ（ｇ（ｆ（ｘ）−ξ））に基づいて計算する。
【００６４】
実施例７では、異常要因推定装置１００は、実施例１の動作において、ｆ及びｇを学習する際に、入力データを空間Ｚ上に写像して得られるｚが、任意の分布ｐ＿ｚ（ｚ）に近くなるようにｆ及びｇを学習する。
【００６５】
実施例８では、異常要因推定装置１００は、実施例１の動作において、次元の異常に対する寄与度を尤度ではなく、ｐ（ｘ−η｜θ（ｇ（ｆ（ｘ−η）））が閾値以上となるようなηを探索し、ηを寄与度とする。
【００６６】
（実施例の効果）
本発明の実施の形態に係る異常要因推定装置１００により、入力データの異常度を算出する異常検知アルゴリズムを用いることで異常と検知された際にその異常の要因について推定を行うことが可能となる。実際に実施例１、２、５、７、８の組み合わせにより要因推定を行った評価結果を以下で説明する。
【００６７】
ここでは、異常検知のベンチマークであるsatelliteデータ（Goldstein, Markus, 2015, "Unsupervised Anomaly Detection Benchmark", https://doi.org/10.7910/DVN/OPQMVF, Harvard Dataverse, V1, UNF:6:EnytiA6wCIilzHetzQQV7A==）（３６次元，連続変数）を用いた評価結果について示す。正常データにおけるＭ個の次元をランダムに選択し、各値が正常時の平均値より大きければｒ（ｘｉ，ｍａｘ−ｘｉ，ｍｉｎ）だけマイナス（ｒは１〜２の一様分布に従う乱数）し、平均値より小さければプラスして異常データを作成した。
【００６８】
実施例１、２、５、７、８などの組み合わせによる手法を用いて寄与度を計算し、閾値を超えた次元を要因次元として推定した。推定を１０回シミュレーションした際の推定精度の平均値を比較した結果を図９に示す。図９の（ａ）、（ｂ）、（ｃ）、（ｄ）に示すとおり、（ａ）従来技術（非特許文献３）、（ｂ）実施例７（ＶＡＥ）＋実施例５（Ｌ０ノルム）＋実施例８（ηを寄与度）、（ｃ）実施例７（ＶＡＥ）＋実施例５（Ｌ０ノルム）＋実施例１（偏差を寄与度）、（ｄ）実施例７（ＶＡＥ）＋実施例５（Ｌ０ノルム）＋実施例２（ｄｅｎｏｉｓｉｎｇ）＋実施例１（偏差を寄与度）のそれぞれについてシミュレーションを実施した。
【００６９】
ここで、ＴＰＲはＴｒｕｅ  Ｐｏｓｉｔｉｖｅ  Ｒａｔｉｏを表しており、要因次元として抽出した次元が実際に要因次元であった割合を意味する。また、ＦＰＲはＦａｌｓｅ  Ｐｏｓｉｔｉｖｅ  Ｒａｔｉｏを表しており、要因次元でない次元のうち、誤って要因次元として抽出してしまった次元の割合を意味する。そのため、ＴＰＲについては１に近いほど、ＦＰＲについては０に近いほど高い精度で要因推定ができていることを示す。
【００７０】
図９に示すとおり、ＶＡＥとＬ０ノルム最小化を組み合わせた方法、特に実施例２のノイズ除去の学習を行い、分布の偏差を寄与度として定義する手法（ｄ）により、要因次元数が多くなっても既存手法と比べて高い精度で要因次元を推定できることがわかる。
【００７１】
（実施の形態のまとめ）
以上、説明したように、本実施の形態によれば、多次元数値ベクトルで表される入力データに対する出力データの誤差に基づいて異常検知を行うための異常検知モデルを学習する学習部と、前記異常検知モデルにテストデータを入力し、当該異常検知モデルから出力される出力データと、前記テストデータとに基づいて当該テストデータが異常か否かを判断するテスト部と、前記テスト部により前記テストデータが異常であると判断された場合に、前記テストデータの各次元の異常に対する寄与度を、各次元の尤度に基づいて計算する要因推定部とを備えることを特徴とする異常要因推定装置が提供される。
【００７２】
前記学習部は、予めノイズを付与した入力データからノイズを除去したデータが出力されるように前記異常検知モデルを学習することとしてもよい。
【００７３】
前記要因推定部は、前記テストデータの異常度を小さくするように前記テストデータの各次元の値を変更するベクトルを探索し、当該ベクトルを用いて前記寄与度を計算することとしてもよい。
【００７４】
前記要因推定部は、前記テストデータの異常度を小さくするように前記テストデータの各次元の値を変更するベクトルを探索し、各次元の尤度に基づいて前記寄与度を計算することに代えて、前記ベクトルを前記寄与度とすることとしてもよい。
【００７５】
前記要因推定部は、前記探索における各繰り返し処理の中で、その時点における探索点のベクトルを用いて計算した各次元の尤度に基づいて前記探索における目的関数を与えることとしてもよい。
【００７６】
前記学習部は、潜在変数を用いる学習を行うものであり、当該潜在変数が所定の分布に近くなるように学習を行うこととしてもよい。
【００７７】
以上、本実施の形態について説明したが、本発明はかかる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【００７８】
本特許出願は２０１８年８月２０日に出願した日本国特許出願第２０１８−１５４１８９号に基づきその優先権を主張するものであり、日本国特許出願第２０１８−１５４１８９号の全内容を本願に援用する。
【符号の説明】
【００７９】
１００  異常要因推定装置
１０１  学習部
１０２  テスト部
１０３  要因推定部
１０４  記憶部
１０５  入力部
１０６  出力部
１５０  ドライブ装置
１５１  記録媒体
１５２  補助記憶装置
１５３  メモリ装置
１５４  ＣＰＵ
１５５  インターフェース装置
１５６  表示装置
１５７  入力装置
【図１】
2020039610.tif 000003
【図２】
2020039610.tif 000004
【図３】
2020039610.tif 000005
【図４】
2020039610.tif 000006
【図５】
2020039610.tif 000007
【図６】
2020039610.tif 000008
【図７】
2020039610.tif 000009
【図８】
2020039610.tif 000010
【図９】
2020039610.tif 000011
【国際調査報告】
2020039610.tif 000012
2020039610.tif 000013
2020039610.tif 000014
2020039610.tif 000015