図1は、本発明に係る異常検知装置の一構成例を示す図である。異常検知装置100は、検知対象である設備101に装着されたセンサから出力されるセンサ信号102を、所定時間ごとに(周期的に)取得する。取得したセンサ信号102は、一旦センサ信号蓄積部103にて蓄積された後、あるいは直接にセンサ信号入力部104に入力され、特徴ベクトル抽出部105へ送られる。特徴ベクトル抽出部105は、センサ信号102をもとに特徴ベクトルを抽出し異常測度算出部106へ送る。異常測度算出部106は、予め指定された学習期間の特徴ベクトルを用いて、所定時間毎(以下、各時刻と表現する場合もある)の特徴ベクトル毎に異常測度を算出する。
しきい値算出部107は、異常測度算出部106による学習データの異常測度に基づいてしきい値を算出する。二次元分布算出部108は学習期間のセンサ信号に基づき、センサ2個の全組合せの二次元頻度分布を算出する。特徴ベクトル抽出部105で抽出された学習期間の特徴ベクトル、しきい値算出部107で算出されたしきい値、二次元分布算出部108で算出された二次元頻度分布ほか、異常検知時に必要となるデータは学習結果として学習結果蓄積部109に保存される。異常検出部110は、異常測度算出部106から送られる各特徴ベクトルの異常測度と、しきい値算出部107で算出したしきい値とを比較することで、設備101の異常を検出する。関連センサ特定部111は、二次元分布算出部108で算出された二次元頻度分布を用いて、異常区間毎に異常関連センサを特定する。診断情報提示部112は、異常区間をクラスタリングして、高頻度なクラスタほど重要度が高いと推定して重要度順位を決定し、関連センサおよび重要度の情報を含む検知結果113を診断支援情報として出力する。
ここで、以下で用いる用語の簡単な説明を行う。特徴ベクトルとは、複数のセンサによる測定値を1つのベクトル値として表現したものである。異常測度とは、注目する特徴ベクトルの、指定された期間の特徴ベクトルからの偏移量のことである。異常区間とは異常が連続して検知される区間のことである。孤立度とは、センサ信号値が学習データからどれだけ乖離しているかを示すパラメータであり、異常との関連性の強さを示すものである。異常関連センサ(関連センサ)とは、異常測度がしきい値を超えて異常として検知された原因となったセンサのことである。クラスタとは、異常区間を孤立度ベクトルの類似度に基づいて分類した集合体で、そこに含まれる異常区間数が多いほど重要度が高いと推定する。
異常検知の対象とする設備101は、例えばガスタービンや蒸気タービンなどの設備やプラントである。設備101は、その状態を表すセンサ信号102を出力する。センサ信号102はセンサ信号蓄積部103に蓄積される。
図2は、複数のセンサ信号102をリスト化して表形式に表した例である。センサ信号102は、物理特性の異なる複数の物理情報が所定間隔毎に取得される多次元時系列信号である。図2に示す表の構成は、日時201の情報と、複数のセンサのセンサ値202を対応させて示している。センサは、数百から数千といった数になる場合もあり、それらの種類によって、例えば、シリンダ、オイル、冷却水などの温度、オイルや冷却水の圧力、軸の回転速度、室温、運転時間などをセンサ値として出力する。センサ値は、設備やプラントなどの出力や状態を表すのみならず、何かの状態をある値(たとえば目標値)に制御するための制御信号の場合もある。
異常検知装置100の動作には、センサ信号蓄積部103に蓄積されたデータを用いて学習データの生成、保存を行う「学習」処理と、入力信号に基づき異常を検知する「異常検知」処理の二つのフェーズがある。基本的に前者はオフラインの処理、後者はオンラインの処理である。ただし、後者をオフラインの処理とすることも可能である。以下の説明では、それらを「学習時」、「異常検知時」という言葉で区別する。
図3は、異常検知装置100の行う全体の処理フローを示す図である。ここでは処理の概要を記載している。(a)は学習時の異常測度算出処理で、学習期間のセンサ信号を入力し(S301)、特徴ベクトルの抽出(S302)と異常測度の算出(S303)を行う。(b)は学習時の学習結果算出処理で、S303で求めた異常測度の値を利用してしきい値の算出(S311)を行い、また、学習期間のセンサ信号を入力し(S312)、センサ2個の全組合せの二次元頻度分布の算出(S313)を行う。(c)は異常検知時の異常判定処理で、検知対象のセンサ信号を入力し(S321)、特徴ベクトルの抽出(S322)と異常測度の算出(S323)を行う。そして、算出した異常測度を、S311で求めたしきい値と比較することにより、設備の正常/異常を判定する(S324)。そして、異常区間を抽出し(S325)、異常区間毎に孤立度ベクトルを算出し(S326)、これをもとに異常関連センサを特定する(S327)。最後に、異常区間のクラスタリングに基づき重要度の推定を行う(S328)。
以下、(a)(b)(c)の順に説明するが、それぞれの詳細なフローは、図4A、図5、図7~8、図10~11にて説明する。
図4Aは、学習時の異常測度算出処理のフローを示す図である。最初に、センサ信号入力部104において、センサ信号蓄積部103に蓄積されたセンサ値のうち指定された期間(学習期間)のセンサ信号を入力する(S401)。学習期間として、設備が正常な状態であった期間を指定するものとする。次に、特徴ベクトル抽出部105において、入力されたセンサ信号を正準化する(S402)。センサ信号の正準化は、単位及びスケールの異なる複数のセンサ信号を同様に扱うために行う。具体的には、各センサ信号の、学習期間の平均と標準偏差を用いて、平均が0、分散が1となるように各センサ信号を変換する。異常検知時に同じ変換ができるように、各センサ信号の平均と標準偏差を記憶しておく。または、各センサ信号の、学習期間の最大値と最小値を用いて、最大が1、最小が0となるように各センサ信号を変換する。または、最大値と最小値の代わりに予め設定した上限値と下限値を用いてもよい。この場合は、異常検知時に同様の変換ができるように、各センサ信号の最大値と最小値または上限値と下限値を学習結果蓄積部109に記憶しておく。
次に、特徴ベクトル抽出部105において、各時刻の特徴ベクトルを抽出する(S403)。特徴ベクトルは、センサ信号を正準化したものをそのまま要素として並べたものである。あるいは、ある時刻に対して±1,±2,・・・のウィンドウを設け、ウィンドウ幅(3,5,・・・)×センサ数の特徴ベクトルとすることで、センサ信号の時間変化を表す特徴を抽出することもできる。また、離散ウェーブレット変換(DWT:Discrete Wavelet Transform)を施して、周波数成分に分解してもよい。
次に、異常測度算出部106において、学習期間の異常測度を算出する。まず学習期間を複数の区間に分け(S404)、抽出した全特徴ベクトルについて、以下の処理を繰り返す(S405)。複数区間に対応して順次選んだ特徴ベクトルである注目ベクトルと、注目ベクトルと同じ区間を除く学習期間のデータを学習データとする(S406)。注目ベクトルと学習データを用いて異常測度を算出する(S407)。ステップS404における区間の分割は例えば1日毎とする。あるいは、化学プラントのようなバッチ処理の場合はバッチ毎、加工装置の場合は加工対象個体毎、MRIのような医療装置の場合は検査対象者毎としてもよい。ステップS407の異常測度算出処理には、局所部分空間法(LSC:Local Sub-space Classifier)や投影距離法(PDM:Projection Distance Method)を用いることができる。
図4Bは、局所部分空間法による異常測度算出処理を説明する図である。局所部分空間法は、注目ベクトルqに対するk個の近傍ベクトルを選択し、選択したk個の近傍ベクトルが張るk-1次元のアフィン部分空間へ注目ベクトルqを投影したときの投影距離を測る方法である。図4Bでは、k=3個の近傍ベクトルx1~x3でアフィン部分空間を形成した場合である。そして、注目ベクトルqに最も近いアフィン部分空間上の点Xbが投影点(基準ベクトル)となり、注目ベクトルqから基準ベクトルXbまでの距離が異常測度である。
具体的な算出法を説明する。評価データqとそのk個の近傍ベクトルxi(i=1,・・・,k)から、qをk個並べた行列Qとxiを並べた行列Xを作成し、(1)式から両者の相関行列Cを求める。次に、(2)式から近傍ベクトルxiの重み付けを表す係数ベクトルbを計算する。異常測度dは、ベクトル(q-Xb)のノルムまたはその2乗により算出される。
なお、図4Bではk=3の場合を説明したが、特徴ベクトルの次元数より十分小さければいくつでもよい。k=1の場合は、最近傍法と等価の処理になる。
投影距離法は、選択された特徴ベクトルに対し独自の原点をもつ部分空間すなわちアフィン部分空間(分散最大の空間)を作成する方法である。何らかの方法で注目ベクトルに対応する複数の特徴ベクトルを選択し、以下の方法でアフィン部分空間を算出する。
まず、選択された特徴ベクトルの平均μと共分散行列Σを求め、次にΣの固有値問題を解いて、値の大きい方から予め指定したr個の固有値に対応する固有ベクトルを並べた行列Uをアフィン部分空間の正規直交基底とする。rは特徴ベクトルの次元より小さくかつ選択データ数より小さい数とする。またはrを固定した数とせず、固有値の大きい方から累積した寄与率が予め指定した割合を超えたときの値としてもよい。注目ベクトルから最も近いアフィン部分空間上の点が基準ベクトルとなる。また、注目ベクトルから基準ベクトルを引いたものが残差ベクトルとなり、残差ベクトルのノルムまたはノルムの2乗が異常測度となる。
ここで、複数の特徴ベクトルの選択方法としては、予め指定した数十から数百の数の特徴ベクトルを注目ベクトルから近い順に選択する方法がある。また、学習対象の特徴ベクトルを予めクラスタリングしておき、注目ベクトルに最も近いクラスタに含まれる特徴ベクトルを選択するようにしてもよい。また、注目ベクトルqのk-近傍ベクトルの平均ベクトルまでの距離を異常測度とする局所平均距離法や、ガウシアンプロセスなどを用いてもよい。
次に、図3(b)の学習結果算出処理について説明する。まず、しきい値算出部107によるしきい値算出処理(S311)について説明する。このしきい値は、異常検出部109に入力する異常測度と比較され、設備の正常/異常を判定するために用いられるものである。しきい値算出部107は、正常な学習データを異常と判定しないしきい値を算出する。言い換えれば、正常な学習データから得られる異常測度の最大値をしきい値として算出する。
あるいは、正常な学習データを予め定めた割合より多く正常と判定するしきい値を算出することにしてもよい。この場合は、正常な学習データから得られる異常測度をソートし、異常測度が低い方から前述の予め定めた割合に到達するところの異常測度をしきい値として採用する。
次に、二次元分布算出部108による二次元頻度分布算出処理(S313)について説明する。
図5は、学習時の二次元頻度分布算出処理のフローを示す図である。始めに、学習期間のセンサ信号を入力する(S501)。各センサ信号についてステップS503からS506までの処理を繰り返す(S502、ループ1)。まず、学習期間のデータの最大値(MAX)と最小値(MIN)を求める(S503)。次に、最小値から最大値までの範囲を指定された数Nで分割する際の刻み幅Sを算出する(S504)。なお、S=(MAX-MIN)/Nで計算できる。次に、最小値から最大値までの範囲を外側に拡大し、二次元分布算出の処理範囲を算出する(S505)。拡大する範囲は、例えばMINをMIN-S×M、MAXをMAX+S×Mに変更する。ここでMは、予め決められた1以上の整数である。
次に学習期間の全データについて、次式によりセンサ信号値(F)からビン番号(BNO)を算出する(S506)。
BNO=INT(N*(F-MIN)/(MAX-MIN))
ただし関数INT(X)はXの整数部を表す。ビン番号(BNO)を用いることで、各信号値は最小値0~最大値Nの(N+1)段階の整数値に変換される。
次に、複数のセンサの中から2個のセンサを取り出し、それぞれのセンサ信号の組合せに基づき二次元分布を算出する。これを全てのセンサの組合せについて、ステップS508からS510までの処理を繰り返す(S507、ループ2)。ここで2個のセンサの組合せの中には同一センサの組合せを含める。従ってセンサの組合せ数(繰り返し数)は、(センサ数)×(センサ数+1)/2となる。
まず、二次元分布算出用の二次元配列を確保し、全ての要素に0をセットする(S508)。配列のサイズはN+2Mである。学習期間の全データについて、2個のセンサ信号のビン番号BNOに対応する配列の要素に1を加算する(S509)。すなわち、一方のセンサ信号のビン番号は列の要素に対応させ、他方のセンサ信号のビン番号は行の要素に対応させる。この処理により、センサ2個による信号の二次元の頻度分布(ヒストグラム)が算出される。この頻度分布を画像に変換して保存する(S510)。変換方法については後述する。図示はしていないが、二次元配列のサイズおよびステップS504およびS505で算出した各センサ信号の処理対象範囲と刻み幅を、学習結果蓄積部109に記録しておく。
ステップS510における、画像変換方法の例を説明する。始めに配列要素の最大値すなわち最大頻度を求める。画像サイズは配列サイズと同じとし、各要素の値から対応する座標の画素値を例えば、255×配列の要素値/最大頻度とする。数値255は画素値を8ビットで表す場合の最大値であり、この値を用いれば、そのままビットマップ形式で保存できる。あるいは、画素値を255×LOG(配列の要素値+1)/LOG(最大頻度+1)とする。ただし関数LOG(X)はXの対数を表す。このような変換式を用いれば、最大頻度が大きい場合も、非ゼロの頻度に非ゼロの画素値を対応させることが可能になる。
図6A~図6Cは、二次元頻度分布画像のいくつかの例を示す図である。横軸にセンサaの信号値(ビン番号)を、縦軸にセンサbの信号値(ビン番号)を示す。図5の処理により得られる画像は、二次元の特徴空間上で密度が高いところが高い画素値で表されているため、分布密度画像とも呼ぶことにする。ここでは、画素値の0を白、255を黒で表したグレイスケールの画像である。分布密度画像は2つのセンサの相関の強さに応じて、画像のパターンが変化する。図6Aと図6Bは相関が強い場合で、特に図6Aは時間的な相関が存在する場合である。
頻度分布画像の作り方は、上記方法に限定されない。例えば単純な頻度分布ではなく、1個のデータにガウス分布や他の重みつきフィルタを割り当て、それを重畳するようにしてもよい。あるいは、上記方法で得られた画像に所定サイズの最大値フィルタをかけたり、平均フィルタ、その他の重みつきフィルタをかけたりしてもよい。また、8ビットではなく、16ビットに変換してもよい。また、必ずしも画像形式で保存する必要はなく二次元配列を変換せずにバイナリあるいはテキスト形式で保存してもよい。
図4Aおよび図5の学習処理においては、学習結果蓄積部109に学習結果を保存しておく。学習結果として保存されるデータには、少なくとも特徴ベクトル抽出のためのパラメータ、異常測度算出のためのパラメータ、センサ正準化のためのパラメータ、抽出した全特徴ベクトルデータ、異常判定しきい値、二次元分布算出のためのパラメータ、二次元頻度分布が含まれる。特徴ベクトル抽出のためのパラメータ及び異常測度算出のためのパラメータは、学習時に指定されたものと共通である。センサ正準化のためのパラメータは、センサ信号入力部104がステップS402の処理で算出した各センサ信号の平均、標準偏差、最大値、最小値などである。二次元分布算出のためのパラメータは、二次元配列のサイズおよび二次元分布算出部108がステップS504およびS505の処理で算出した各センサ信号の処理対象範囲と刻み幅である。
次に、図3(c)の異常検知時の異常判定処理について、図7から図11を用いて説明する。
図7は、異常検出部110による異常検知処理(S321~S324)のフローを示す図である。ここでは、センサ信号蓄積部103に蓄積されたデータのうち指定された期間のデータ、または新たに観測されたデータについて、特徴ベクトルの抽出(特徴ベクトル抽出部105)、異常測度の算出(異常測度算出部106)を行い、これをしきい値(しきい値算出部107)と比較して、異常検出部110にて正常か異常かの判定を行う。
異常検出部110は、データベースから学習時に保存した学習結果を読み出す(S701)。その際、学習時の異常測度やしきい値に基づいて、ユーザが適切な処理番号を選択し、処理番号に対応付けられた学習結果を用いる。センサ信号入力部104は、センサ信号蓄積部103または設備101からセンサ信号102を入力し(S702)、センサ信号毎に正準化する(S703)。このとき、ステップS402の正準化の処理に用いたパラメータを用いる。次に、特徴ベクトル抽出部105は、選択したセンサ信号から、ステップS403の処理と同じ方法で特徴ベクトルの抽出を行う(S704)。
次に、全特徴ベクトルについてステップS706およびS707の処理を行う(S705、ループ)。異常測度算出部106は、注目ベクトルと学習データを用いて、異常測度を算出する(S706)。この処理は、図4のステップS407と同じ方法で行うが、学習データを全て用いることとする。異常検出部110は、ステップS701で読み出したしきい値とステップS706で算出した異常測度とを比較する。異常測度がしきい値以下であれば設備は「正常」と判定し、異常測度がしきい値より大きければ「異常」と判定する(S707)。
図8は、関連センサ特定部111による孤立度算出処理(S325~S327)のフローを示す図である。ここでは、異常が連続して検知された異常区間を抽出し、異常区間毎に学習データから乖離していることを示す孤立度ベクトルを算出し、これをもとに異常関連センサを特定する。
異常検出部109にて処理の対象としたセンサ信号を入力し(S801)、全てのデータについて、各センサ信号に対応するビン番号を算出する(S802)。算出の際には、ステップS701で読み出された二次元分布算出のパラメータ、具体的には二次元配列のサイズとセンサ毎の処理対象範囲と刻み幅を用い、ステップS506と同様の方法でビン番号を算出する。次に、異常検出部109にて算出した異常測度データを入力し(S803)、これをもとに異常が連続して検知されている異常区間を抽出する(S804)。異常区間を求める際には、予め指定された長さ以下の中断は連続しているものとみなす。逆に、日付が変わるなど予め決められたデータの切れ目では、異常検知が続いていても別の異常区間とする。
次に、各異常区間について、ステップS806からS813までの孤立度算出および関連センサ特定の処理を繰り返す(S805、ループ1)。まずセンサ2個の全ての組合せについての孤立度を0にリセットし(S806)。全てのセンサiについて(S807、ループ2)、また全てのセンサjについて(S808、ループ3)、孤立度を算出する。
各ループでは、着目する異常区間内の全データについて(S809、ループ4)、着目するセンサi,jの分布密度画像から、ステップS802で算出したセンサi,jそれぞれのビン番号に対応する座標の画素値を読み込む(S810)。画素値が0である場合、着目するセンサi,jの孤立度に1を加算する(S811)。この処理により、2個のセンサの各組合せについて着目する異常区間の孤立度が算出される。孤立度は、二次元分布上で対応する2個のセンサの信号値の組合せが学習データにない場合に高くなる。ここで、ループ4とループ2,3は逆の順番でも構わない。
2個のセンサの各組合せの孤立度をもとに、1個のセンサごとの孤立度を算出する(S812)。例えば、センサiの孤立度は、センサiを固定し、全てのセンサjについてセンサi,jの孤立度を合計することにより算出する。各センサの孤立度を全センサ分まとめたものを孤立度ベクトルとする。
次に、孤立度をもとに異常関連センサを特定する(S813)。異常が検知されるのは評価対象のデータが学習データから乖離しているためであるから、異常検知された時刻のセンサ信号の孤立度が高くなるセンサを異常に関連するセンサとして抽出する。
上記の処理の中で、孤立度の算出(S810,S811)と異常関連センサの特定(S813)について詳細に説明する。
図9は、孤立度の算出法を具体的に説明する図である。(a)は異常検知時に例えば3個のセンサ1~3から入力する信号を示す。各信号の特徴ベクトルから異常測度を算出し、異常測度がしきい値を超えた時点を異常と判定する。(b)は学習データから予め作成した分布密度画像で、2個のセンサの全ての組合せについて学習データの信号分布を画素値で示している。この場合、横軸をセンサiの信号値、縦軸をセンサjの信号値とすると、i=1~3、j=1~3の9通りの組合せの画像が存在する。
(a)で得られた異常検知時の各センサ1~3の信号値(丸印)を、(b)の該当する分布密度画像の該当する座標位置にプロットする。プロット位置において画素値を読み込み、画素値が0であるとき、そのセンサの組合せの孤立度を1とする(×印)。画素値が0以外のときは、孤立度を0とする(丸印)。このようにして、センサごとに組合せの相手を変えて孤立度を合計することで、センサごとの孤立度を算出する。この例では、センサ1とセンサ3の組合せのみにおいて孤立しており、センサ1とセンサ3の孤立度は1、センサ2の孤立度は0となる。
図10は、孤立度をもとに異常関連センサを特定する処理のフローを示す図である。このフローは、所定回数または条件を満たすまでの繰り返し処理である(S1001、ループ1)。最初に、孤立度最大のセンサ、すなわちステップS812で算出された孤立度ベクトルの最大要素に対応するセンサを探索し、見つかったものをセンサAとする(S1002)。次に、センサAと組合せて孤立度が最大となる他方のセンサを探索し、見つかったものをセンサBとする(S1003)。ここでの探索対象は、ステップS807のループ2の処理終了時に算出されているセンサ2個の組合せに対する孤立度である。見つかったセンサA,Bの孤立度の値をISOとする。
ISOが0より大きい場合(S1004)、センサAとBを関連センサとして抽出する(S1005)。また、センサAとBの分布密度画像に、異常データをプロットした画像を作成する(S1006)。その際、正常データがグレイスケールで表されているのに対し、異常データは彩度の高い色で表す。また、正常データと重なりのない画素と重なりのある画素は異なる色で表す。以下の説明では、正常データのみの分布密度画像と区別するために、「異常プロット画像」と呼ぶこととする。なお、ステップS1004でISOが0の場合は、ループ1を抜けて、関連センサ特定の処理を終了する。
次に、全てのセンサiについて繰り返す(S1007、ループ2)。センサiの孤立度からセンサi,Aの孤立度を差し引く(S1008)。また、センサAとBが異なる場合は(S1009)、センサiの孤立度からセンサi,Bの孤立度も差し引く(S1010)。さらに、センサAとBの孤立度を0とする(S1011)。ステップS1007からS1011までの処理は、S1005で関連センサとして抽出したセンサA,Bの影響を取り除くために行う。以後、ループ1を繰り返し、残りの孤立度ベクトルのうちで孤立度最大となるセンサA,Bを新たな関連センサとして抽出する。このようにして、複数の異常関連センサを漏れなく抽出することができる。
次に、図3(c)の重要度推定処理(S328)の詳細について説明する。ここでは診断情報提示部112により、異常検知時の最後にクラスタリングに基づく異常区間の重要度推定処理を行う。
図11は、異常区間の重要度推定処理のフローを示す図である。最初に、全ての異常区間について(S1101、ループ1)、ステップS812で算出された孤立度ベクトルを要素の合計が1になるよう正規化する(S1102)。ただし、もともとの要素合計が0、すなわち全ての要素が0の場合はそのままとする。次に、全ての異常区間について(S1103、ループ2)、他の異常区間との間で正規化した孤立度ベクトルの類似度を算出する(S1104)。ここで、孤立度ベクトルの要素合計が0の場合は、全て類似度0とする。
類似度の定義としては、以下に示すように距離類似度、コサイン類似度、ヒストグラムインターセクションを利用することができる。以下の式において、Sはベクトルa,b間の類似度を表し、ai,biはベクトルの要素を表す。
距離類似度は、2個のベクトル間のユークリッド距離を1から減算したものであり、(3)式で定義される。
コサイン類似度は、2個のベクトルのなす角度の余弦であり、(4)式で定義される。
ヒストグラムインターセクションは、頻度の合計が等しいヒストグラムの間の類似度を測る方法であり、2個のヒストグラムを重ねたときの共通部分の面積から算出される。縦軸が頻度でなくても要素数が等しくかつ要素値の合計が等しければ、ベクトル間の類似度算出にも適用可能である。ここではベクトルの要素値を用いて、(5)式で定義される。
いずれの類似度も0から1の値をとり、2個のベクトルが完全に等しいときに1となる。ここまでの処理により、全ての組合せの異常区間間の孤立度ベクトル同士の類似度が算出される。
次に、全ての異常区間を対象として、孤立度ベクトルの類似度に基づき複数のクラスタへの分類(クラスタリング)を行う(S1105)。クラスタ数を予め知ることができず、クラスタに属するデータ数に偏りがあることが予想されるため、k平均法のような分割統治タイプではなく、階層的クラスタリングを適用するとよい。階層的クラスタリングは、個々のデータを1個ずつのクラスタに割り当てるところから開始し、類似したクラスタを再帰的に結合していくものである。結合するクラスタを選択する基準によって、最短距離法、最長距離法、群平均法などの手法がある。それぞれの方法において、クラスタ間の類似度は、クラスタをまたがる区間どうしの類似度の最小値、最大値、平均値で定義される。クラスタ間の類似度が大きいものから順次結合していき、全てのクラスタ間の類似度が予め定めた基準値を下回ったとき、結合を停止する。基準値は0から1の間の実数とするが、0とすると全区間が1個のクラスタに結合され、1とすると全区間が全て異なるクラスタに分かれる。
次に、各クラスタを異常区間の頻度が高い順、すなわちクラスタに含まれる区間数が多い順にソートする(S1106)。これによりクラスタの順位を決定し、順位が高いほど重要度が高いと推定する。これは、異常あるいはその予兆は同じ現象が続くものであり、孤立度ベクトルが類似している区間は同じ現象が発生しているという考えに基づく。
次に、各クラスタについて(S1107、ループ3)、異常測度の最大値または区間内の異常測度累積値が大きい順に、異常区間をソートする(S1108)。そして、1位の異常区間を代表区間とする。これは、クラスタ内では同じ現象が発生していると考えるため、各クラスタで1個の区間の現象を確認すれば十分であり、異常測度が大きいほど確認が容易であると考えられるからである。
以上の処理結果に基づき、重要度が高いと推定した関連センサや異常区間を優先して、診断支援情報を提示する(S1109)。具体的には、提示する重要度の高い関連センサは、ステップS1106のソートで1位となったクラスタすなわち最も頻度の高いクラスタに含まれ、ステップS1108のソートで1位となった区間において、図10に示す関連センサ特定処理にて最初のループのステップS1002で見つかったセンサとする。なお、提示の順序および内容の詳細については、GUI(Graphical User Interface)の例とともに後述する。
上記ステップS1106では、クラスタに含まれる区間数が多いほど重要度が高いと推定したが、クラスタに含まれる区間の長さ(累積時間)が長いほど重要性が高いともいえるので、区間の長さに着目して順位を決定しても良い。
次に、以上の動作を実現するための異常検知装置100のユーザインタフェース(GUI)の例を説明する。
図12Aは、オフライン解析実施のための学習期間、及び処理パラメータ含む解析条件を設定するGUIの例である。この画面では、算出された学習結果をレシピとして登録することも可能である。また、過去のセンサ信号102は、設備ID及び時刻と対応付けられてデータベースに保存されているものとする。
オフライン解析条件設定画面1201では、対象設備、学習期間、テスト期間、使用センサ、異常測度算出パラメータ、二次元分布算出パラメータ、異常区間抽出パラメータ、クラスタリングパラメータを入力する。設備ID入力ウィンドウ1202には、対象とする設備のIDを入力する。設備リスト表示ボタン1203の押下により、センサ信号蓄積部103に保存されているデータの装置IDのリストが表示されるので、リストから選択入力する。異常検知装置100につながる設備101が1台のみの場合は、設備ID入力ウィンドウ1202は表示されない。
学習期間入力ウィンドウ1204には、学習データを抽出したい期間の開始日と終了日を入力する。テスト期間入力ウィンドウ1205には、解析対象としたい期間の開始日と終了日を入力する。センサ選択ウィンドウ1206には、使用するセンサを入力する。リスト表示ボタン1207のクリックによりセンサリスト1208が表示されるので、リストから選択入力する。リストから複数選択することも可能である。除外するセンサを指定するようにしてもよい。センサ信号入力時は、ここで選択されたセンサの情報のみが入力される。
異常測度算出パラメータ入力ウィンドウ1209には、異常測度算出において使用するパラメータを入力する。図は手法として局所部分空間を採用した場合の例であり、近傍ベクトル数と正則化パラメータを入力する。正則化パラメータは、(2)式において相関行列Cの逆行列が求められないことを防ぐため、対角成分に加算する小さい数である。二次元分布算出パラメータ入力ウィンドウ1210には、二次元分布算出において使用するパラメータとして、二次元配列のサイズすなわち作成する画像サイズとそのうちの正常範囲に対応するサイズの情報を入力する。異常区間抽出パラメータ入力ウィンドウ1211には、異常区間抽出において異常検知が連続しているとみなす中断(正常判定)期間の最大長さを入力する。クラスタリングパラメータ入力ウィンドウ1212には、異常区間の階層的クラスタリングにおいて、クラスタの結合を停止する基準となる類似度を入力する。
以上の解析条件の情報が確定したら、実行ボタン1214の押下により、オフライン解析を実行する。
まず、学習期間のセンサ信号を用い、図4Aの処理フロー、続いてステップS311のしきい値算出処理、続いて図5の処理フローに従って学習を実行する。学習結果として、ステップS402で算出されたセンサ信号毎の平均と標準偏差、ステップS403で抽出された学習期間の全特徴ベクトルデータ、ステップS311で算出されたしきい値、ステップS504およびS505で算出した各センサ信号の処理対象範囲と刻み幅、ステップS510で作成された分布密度画像を保存しておく。
さらに、学習期間およびテスト期間のセンサ信号を用い、図7の処理フローに従って異常測度を算出し、正常か異常かの判定を行い、判定結果を異常測度およびしきい値と併せて保存しておく。ただし、学習期間のデータについては、ステップS407で算出した異常測度を用いて、正常か異常かの判定を行う。
次に、図8および図10の処理フローに従って、異常区間を抽出して区間毎に孤立度を算出し、関連センサを特定する。表示のため、各異常区間の開始時刻、終了時刻、孤立度、特定された関連センサ名と異常プロット画像を保存しておく。
さらに、図11の処理フローに従って、異常区間をクラスタリングして重要度を推定する。処理結果として、各クラスタに含まれる区間番号を保存しておく。保存の際には、ステップS1108で付けられたクラスタの順位、ステップS1109で付けられた、クラスタ内の異常区間の順位に従う。
解析終了後、後述する結果表示画面が表示される。ユーザによる確認が終了すると、オフライン解析条件設定画面1201に戻ってくる。レシピ名入力ウィンドウ1213にレシピ名を入力し、登録ボタン1215を押下することにより、設備ID及びレシピ名と対応付けて学習結果および解析結果を保存し、終了する。ここで、学習結果には、学習の実行により作成保存されたデータのほか、入力ウィンドウ1209~1212で入力された異常測度算出パラメータ、二次元分布算出パラメータ、異常区間抽出パラメータ、クラスタリングパラメータが含まれる。終了ボタン1216が押下された場合は、何もしないで終了する。この場合、学習により作成保存された学習結果および、続く異常検知処理により作成保存された解析結果は、削除されるか次に実行される解析によって上書きされる。
登録された学習結果は、活性か不活性かのラベルをつけて管理され、以降オンラインの解析が実行される。オンライン解析では、新しく入力されたデータに対し、装置IDが一致する活性な学習結果の情報を用いて、図7から図10に示す処理を行い、結果をレシピ名および処理日時と対応付けて保存しておく。これらの処理は定期的、例えば1日毎に実行する。サンプリング間隔が短い設備やリアルタイム性を求められる設備については、実行の間隔をもっと短くする。続いて図11に示す処理を行う。この処理も同じタイミングで実行するが、最新の入力データのみを対象とするのではなく、過去に検知された異常区間例えば1か月分を併せてクラスタリングを行い、結果をレシピ名および処理日時と対応付けて保存しておく。
図12Bは、オンライン解析結果の表示対象を指定するためのGUIの例である。ユーザは、表示対象指定画面1221から表示対象の設備、レシピ及び期間を指定する。始めに、装置ID選択ウィンドウ1222により設備IDを選択する。次に、レシピ名選択ウィンドウ1223により、設備ID1222を対象としたレシピのリストから表示対象のレシピを選択する。データ記録期間表示部1224には、入力されたレシピを用いて処理され、記録が残されている期間の開始日と終了日が表示される。結果表示期間指定ウィンドウ1225には、結果を表示したい期間の開始日と終了日を入力する。表示ボタン1226を押下すると、異常検知処理の結果が表示される。終了ボタン1227を押下すると、表示対象を指定する処理を終了する。
図13A~図13Dは、解析結果をユーザに示すためのGUIの例である。ユーザが各画面の上部に表示されたタブを選択することにより、解析結果全体表示画面1301、解析結果拡大表示画面1302、クラスタ表示画面1303および重要度診断画面1304のいずれかに切り換わる。
図13Aは、解析結果全体表示画面1301の例である。解析結果全体表示画面1301には、指定された期間の、異常測度、しきい値、及び判定結果、並びにセンサ信号の時系列グラフが表示される。期間表示ウィンドウ1305には、オフライン解析の結果を表示する場合は図12Aで指定された学習期間及びテスト期間が表示される。オンライン解析の結果を表示する場合は、図示していないが、図12Bで指定された結果表示期間が表示される。
異常測度表示ウィンドウ1306には、指定された学習期間・テスト期間あるいは結果表示期間での異常測度1306a、しきい値1306b(破線)、及び判定結果1306cが表示される。また、学習に使用した区間に丸印1306dが表示される。センサ信号表示ウィンドウ1307には、指定された学習期間・テスト期間あるいは結果表示期間での指定されたセンサについて、時系列センサ信号1307aが表示される。
センサ選択ウィンドウ1308では、ユーザの入力によってセンサを指定する。ただし、ユーザが指定する前は、図11に示す重要度推定処理で求められたセンサが選択されている。具体的には、ステップS1106のソートで1位となったクラスタすなわち最も頻度の高いクラスタに含まれ、ステップS1108のソートで1位となった区間について、図10に示す関連センサ特定処理において最初のループのステップS1002で見つかったセンサとする。カーソル1309は、拡大表示の時の起点を表し、ユーザのマウス操作により移動できる。表示日数指定ウィンドウ1310には、解析結果拡大表示画面1302での拡大表示の起点から終点までの日数が表示され、この画面で入力することもできる。日付表示ウィンドウ1311には、カーソル位置の日付が表示される。終了ボタン1312の押下により、解析結果全体表示画面1301、解析結果拡大表示画面1302、クラスタ表示画面1303および重要度診断画面1304のいずれもが消去され、解析結果の表示が終了する。
図13Bは、解析結果拡大表示画面1302の例である。解析結果拡大表示画面1302には、解析結果全体表示画面1301においてカーソル1309で示された日付を起点とし、表示日数指定ウィンドウ1310で指定された日数の期間内の、異常測度、しきい値、判定結果、及びセンサ信号の時系列グラフが表示される。すなわち、異常測度表示ウィンドウ1306及びセンサ信号表示ウィンドウ1307には、解析結果全体表示画面1301と同様の情報が、拡大して表示される。
なお、解析結果拡大表示画面1302では、スクロールバー1313とスクロールバー領域1314を追加表示している。スクロールバー1313の長さは表示日数指定ウィンドウ1310で指定された日数に、スクロールバー領域1314の左端部が拡大表示の起点に対応する。ユーザはスクロールバー1313を操作することで、表示の起点を変更することも可能であり、この変更はカーソル1309の位置と日付表示ウィンドウ1311の表示に反映される。スクロールバー領域1314の全体の長さは解析結果全体表示画面1301に表示されている期間に相当する。
図13Cは、図11に示す重要度推定処理のクラスタリングの結果を表示するクラスタ表示画面1303の例である。クラスタ表示画面1303は、クラスタ時系列情報表示ウィンドウ1331、異常測度の時系列グラフ1336、孤立度ベクトル表示ウィンドウ1337、および終了ボタン1312で構成される。終了ボタン1312が押下されたときの動作は、他の画面と同様である。
クラスタ時系列情報表示ウィンドウ1331には、日付別クラスタ情報が表示され、凡例1332、クラスタ順位1333、日付別クラスタ有無情報1334、診断結果1335から構成される。クラスタ順位1333は、ステップS1106のソートの結果に従うものであり、1個の区間のみのクラスタまで、全てを上から順に記載する。凡例1332は、クラスタを区別するために使用する枠線の種類(色、太さ、スタイル)である。日付別クラスタ有無情報1334は、解析結果全体表示画面1301の表示期間に対応しており、各クラスタに含まれる区間がその日にある場合は黒、ない場合は白で表す。有無のみでなく区間数を表示してもよい。
診断結果1335は、クラスタ毎に異常か対策不要か誤報かを診断した結果であり、重要度診断画面1304でユーザによって入力されるものである。ユーザによる入力が未実施の場合は、空欄にするか、プログラムによる推定結果を網掛けなどで区別して表示する。なお、推定方法については後で説明する。日付別クラスタ有無情報1334の日付位置に合わせて、異常測度の時系列グラフ1336が表示される。これは、解析結果全体表示画面1301の異常測度表示ウィンドウ1306に表示される内容と同じものである。
孤立度ベクトル表示ウィンドウ1337には、表示期間中の全ての異常区間について、S812で算出された孤立度ベクトルを表す棒グラフが時系列順に表示される。グラフは横軸をセンサ信号名、縦軸を孤立度として描画される。それぞれのグラフは、その区間が含まれるクラスタに応じて、凡例1332に表示された種類の枠線が付けられる。また、日付の情報が付加されて表示される。図示していないが、時刻情報、異常測度や累積異常測度などのより詳細な情報を併せて表示してもよい。
図13Dは、図11に示す診断支援情報提示(S1109)にかかる重要度診断画面1304の例である。選択されたクラスタの選択された異常区間について、孤立度ベクトル、異常プロット画像、異常測度・しきい値・判定結果の時系列グラフ、異常関連センサ信号の時系列グラフが表示される。ユーザによる操作がなされていない初期状態では、1位のクラスタの1位の異常区間が選択されている。つまり、重要度が最も高いと推定されるクラスタの代表区間の情報が表示されている。
クラスタ情報表示ウィンドウ1351には、クラスタ選択ウィンドウ1352と、選択中のクラスタに含まれる区間数と、診断結果入力ウィンドウ1353と確認チェックボタン1354が表示される。異常区間情報表示ウィンドウ1355には、区間選択ウィンドウ1356と、選択中の区間の区間番号と日付と時刻が表示される。孤立度ベクトル表示ウィンドウ1357には、選択中の区間の孤立度ベクトルを表す棒グラフが表示される。
異常プロット画像表示ウィンドウ1358には、選択中の画像が表示される。この画像は、図10に示す処理フローのステップS1006で作成された、異常プロット画像である。正常データの分布1360がグレイスケールで表され、異常データの分布1361が彩度の高い色(たとえば赤)で表される。表示する画像は、画像選択ウィンドウ1359により選択することが可能である。この番号は、図10に示す処理フローのループ1において何回目で作成されたのかを表す。初期状態では1回目に作成された画像が選択されている。画像選択ウィンドウ1359において数値を入力あるいは矢印ボタンを使って前または後ろの番号を選ぶと、異常プロット画像および関連センサ信号の時系列グラフが更新されるので、関連センサが複数ある場合にも確認することができる。
異常測度表示ウィンドウ1362には、選択中の異常区間を含む期間、例えば1日分の異常測度、しきい値、判定結果の時系列グラフが表示される。併せて、異常区間の時刻範囲を表すバー1363が表示される。関連センサ(A)信号表示ウィンドウ1364と関連センサ(B)信号表示ウィンドウ1365には、選択中の異常プロット画像に対応して、それぞれステップS1002で特定された関連センサAとステップS1003で特定された関連センサBのセンサ信号の時系列グラフが表示される。表示期間は異常測度グラフ表示と同じとする。
この重要度診断画面1304により、ユーザは検知された異常の重要度診断を行うことができる。同じクラスタに含まれる区間は同じ現象が発生しているという考えから、診断はクラスタ毎に行う。区間選択ウィンドウ1356への入力により、異常区間情報表示ウィンドウ1355の表示内容とともに、孤立度ベクトル、異常プロット画像、異常測度時系列グラフ、関連センサ信号時系列グラフが全て更新される。この操作により、本当に同じ現象が発生しているかどうかを確認することができるが、通常は代表区間だけ確認すれば十分である。確認ができたら、診断結果入力ウィンドウ1353で異常か対策不要か誤報か空欄かをリストから選択し、確認チェックボタン1354にチェックを入れる。この操作の結果は、クラスタ時系列情報表示ウィンドウ1331の診断結果1335に反映される。診断結果入力ウィンドウ1353には、初期状態では、診断結果1335と同様に空欄またはプログラムによる推定結果が表示されている。クラスタ選択ウィンドウ1352の矢印ボタンにより、選択クラスタを上位のものから下位のものに切り替えて、順に診断していくとよい。全て診断結果を入力、あるいは途中であっても、診断確定ボタン1366の押下により、診断結果が保存される。
以上の図13Aから図13Dに示した例では、クラスタ情報表示ウィンドウ1351から、異常測度のグラフ上で目立つ異常のほとんどが同じクラスタに含まれており、その孤立度ベクトル表示ウィンドウ1337,1357から、異常関連センサは左から9番目のセンサ(S9)であることが想像できる。次に重要度診断画面1304で、異常プロット画像1358から、Sensor_Yの異常のデータが正常データより高いところに分布していることが分かり、関連センサ信号の波形からもそのことを確認できる。また、解析結果全体表示画面1301および解析結果拡大表示画面1302のセンサ信号表示ウィンドウ1307には、初期状態にはこのセンサ信号が表示される。異常区間で信号値が高くなっていることが、容易に確認できる。このように、本実施例によれば、解析直後の初期状態の画面表示を確認するのみで、主要な異常現象を確認することが可能である。また、表示期間で複数の現象があっても、クラスタリングにより異なるクラスタに分かれることが期待され、別々に診断することが可能である。さらに、低頻度なものは確認作業を省略しても設備を保守する上での危険は小さいと判断し、途中でやめることもできる。逆に、全て確認して誤報や対策不要の発生状況をみることにより、学習期間が適正であるかのチェックに利用することも可能である。
上記実施例において、診断結果入力ウィンドウ1353に初期状態で推定結果を表示する場合の、推定方法について説明する。図11に示す重要度推定処理によれば、重要度が最高のものから最低のものまで順に並べることが可能であるものの、実際に異常(予兆を含む)なのか誤報なのかの推定は行っていないため、このままでは推定結果を表示できない。そこで、重要度順を参考にして、他の特徴も加えて異常か対策不要か誤報かを推定する。
図14は、対策不要と誤報を推定する処理のフローを示す図である。各クラスタについて以下の推定処理を行う(S1401、ループ)。まず、1位のクラスタで、かつ含まれる区間数が予め指定した基準値(基準1とする)より大きいかどうかを判定する(S1402)。条件を満足すれば(Yes)、対策不要の推定処理を行う。そのクラスタの代表区間の孤立度最大のセンサについて、一定期間毎、例えば1日毎に「統計的特徴」を算出する(S1403)。ここに「統計的特徴」とは、関連センサ信号の平均値、分散値、最大値、最小値、中央値などである。また、頻度分布をもとに最頻値を求めたり、モード分割してモード別の平均、分散を求めたりしてもよい。算出した統計的特徴について、学習期間と1位のクラスタを含む期間を比較し(S1404)、「ステップ状」に変化していれば(S1405)、対策不要と推定する(S1406)。そうでなければ異常と推定する(S1407)。「ステップ状」とは、比較する期間の間では顕著な違いがあり、かつ各期間の中では違いが小さいこと、さらに異常検知した期間の中で上昇も下降もしていないことを意味する。
次に、ステップS1402の判定で条件にあてはまらない場合(No)は、誤報推定処理を行う。まず、クラスタに含まれる区間数が予め指定した基準値(基準2、ただし基準2<基準1)より小さいかどうかを判定する(S1408)。基準2より小さい場合(Yes)はステップS1409へ進み、そうでない場合(No)は異常と推定する(S1407)。これは、同じ現象が何回も起こったのであれば実際に異常である可能性が高いという考えに基づく。次に、代表区間のセンサ信号、異常測度、孤立度から特徴を抽出する(S1409)。ここで抽出する特徴は、異常測度最大値、累積値、区間長さ、孤立度、関連センサ信号の変化速度、変化方向、異常プロット画像上での正常データとの位置関係を表す特徴などである。これら特徴が予め指定された「誤報条件」に適合するかを判定し(S1410)、適合すれば誤報と推定し(S1411)、適合しなければ異常と推定する(S1407)。
ここで「誤報条件」については、異常区間が単発で存在し、異常測度が低く、異常区間長が短い場合は誤報である確率が高いことが経験的に分かっている。従って、異常区間の数、異常区間の長さ、異常測度のいずれか、または全てが基準値以下であれば、異常ではなく誤報であると推定する。さらに、例えば設備の起動やシャットダウンなど状態遷移中は、学習データが少ないため誤報が発生しやすいことも経験的に分かっている。従って、関連センサ信号の変化速度と変化方向から状態遷移中であるかどうかを判断し、遷移中であれば誤報であると推定する。
上記した対策不要の推定処理(S1403~S1406)の具体例について説明する。この処理は、異常ではない人為的な作業、例えばメンテナンスや条件設定変更などによる変化を異常として検知したケースを、対策不要と推定することである。このような場合、作業の時点で急激に変化し、その後は安定した状態となることから、上記の処理により推定が可能である。
図15は、対策不要と推定すべき例を示す図である。上段は異常測度表示ウィンドウ1306で(図13Aまたは図13B参照)、異常測度1501、しきい値1502および判定結果1503を時系列で示している。(A)点以降の後半には異常区間が多数検出されており、図示していないが、そのほとんどが1位のクラスタに含まれる。下段はセンサ信号表示ウィンドウ1307で、1位のクラスタの代表区間の孤立度最大のセンサの時系列信号である。センサ信号1504とともに、1日毎の平均値1505を重ねて示している。いずれも、(A)点でステップ状に変化しその後は安定していることから、対策不要と推定する。
以下、上記した実施例の変形例を説明する。
上記実施例では1台の設備を対象としたが、複数の設備に適用すれば、複数の設備の異常監視を効率的に行うことが可能となる。その場合は、各設備について別々に図4Aおよび図5に示す処理により学習を実施し、学習データを蓄積しておく。さらに、各設備のセンサ信号を継続的に入力、蓄積し、定期的に図7、図8、図10に示す処理を行って異常を検知し、異常区間毎に孤立度を算出し関連センサを特定しておく。同じタイミングで、過去に検出した異常区間と新しく検出した異常区間を合わせて図11に示す処理により、クラスタリングを行い、クラスタの順位を付ける。そして、各設備の1位のクラスタに含まれる異常区間がある日数を数え、その日数が多い順に設備の順位をつける。
図16は、複数の設備の異常監視結果を一覧するGUIの例である。設備別クラスタ情報表示ウィンドウ1601には、縦軸を設備、横軸を日付とし、1位のクラスタに含まれる異常区間がある日を黒で表している。設備は、前述の順位に従って上から並べている。設備名をクリックすることにより、図13Aに示す解析結果全体表示画面が表示されるようにする。あるいは、セルをクリックすることにより、対応する異常区間について、図13Dに示す重要度診断画面が表示されるようにする。従来は異常検出の有無を表示し、連続して発生している場合に注意を喚起することが可能であったが、誤報がある場合や、特定の異常が断続的に発生する場合に重要度の推定を誤る可能性が高かった。これに対し本実施例では、クラスタリングを利用することにより、重要度の高い異常が発生している設備を優先的に調べることができるため、確認作業の効率を向上させることができる。
また、上記実施例では、関連センサ特定部111は、異常区間毎に、二次元分布算出部108で算出された二次元頻度分布を用いて孤立度ベクトルを算出し、これに基づく異常関連センサを特定した。そして診断情報提示部112は、異常区間を孤立度ベクトルの類似度に基づいてクラスタリングした。このように、異常区間や関連センサの重要度を判断するためのパラメータとして孤立度を用いたが、これ以外の方法も可能である。
孤立度以外のパラメータとして、「寄与度ベクトル」を用いる方法を説明する。寄与度ベクトルは、異常測度算出部106にて算出する異常測度へどれだけ影響しているかを示す指標であり、異常測度を算出する際に同時に求めることができる。異常測度は、正常を表す基準データから観測データへの距離で定義される。一方寄与度ベクトルは、基準データから観測データへのベクトルであり、異常測度算出に局所部分空間法を採用する場合は、図4Bのベクトル(q-Xb)で定義される。よって、寄与度ベクトルが大きいほど異常測度が大きく、正常なデータから乖離していることになり、重要度が高いものと言える。寄与度ベクトルの類似度算出の際には、要素の合計が1になるように正規化しておく。関連センサ特定においては、寄与度ベクトルの要素の値が大きい順に異常との関連が強いセンサであると見なすことができる。なお、寄与度ベクトルを用いる場合は、二次元頻度分布や孤立度を算出する必要がない。このように、孤立度に代えて寄与度に着目しても、同様の効果を得ることができる。