異常検出

異常検出とは?

異常検知(Anomaly detection) とは、データの中から異常な状態、すなわち通常のパターンとは異なる挙動を検出することをいいます。「異常」はアプリケーションや状況によって、外れ値(Outlier)、変化点(Change point)、逸脱 (Deviation)、誤作動 (Fault)、侵入 (Intrusion)、詐欺 (Fraud)などと呼ばれます。

異常検知には専門家の目視による古典的な方法も有効ですが、ここでは多くの変数からなる複雑なデータからでも、自動でかつ早期に異常を見つけ出すことが期待できる機械学習を用いた統計的手法をご紹介します。

データ解析を応用した異常検知の代表的な利点

  • 診断(Diagnostic):異常を自動で診断することにより人的工数を削減。
  • 予知(Predictive):現在の状態から将来的な異常を検知することにより、突然の異常による人的、経済的ロスを低減。
  • 処方(Prescriptive):将来的な異常を自動で修正することにより、稼働率・生産性を向上
心電図の異常検知

心電図の異常検知:Keogh, E., Lin, J. and Fu, A.: HOT SAX : Efficiently Finding the Most Unusual Time Series Subsequence, in Proceedings of the Fifth IEEE International Conference on Data Mining, ICDM 05, pp.226-233.

MATLAB®で、異常検知アルゴリズムを設計する方法はたくさんあります。特定のアプリケーションに最も適した異常検知のアプローチは、利用可能な異常データの量と、異常と正常データを区別できるかどうかによって異なります。

異常検知の最初のステップは、手持ちのデータを調べることです。次の質問で考えてみましょう。

生データに異常が見られるか?

データを見ただけで異常検知ができる場合があります。例えば、図1の信号はファンから取得されたものですが、ファンの動作に異常があることを示す信号の急激な変化を簡単に見ることができます。目で見て異常を検出できる場合は、find changeptscontrol chart などの簡単なアルゴリズムを使って異常を検出できるかもしれません。

冷却ファンのデータをMATLABでプロットしたもの。容易に見つけられる異常を示しています。

図1: 冷却ファンのデータをMATLABでプロットしたもの。容易に見つけられる異常を示しています。

抽出した特徴量の中に異常が見られるか?

多くの場合、異常は生データから視覚的に検出することが困難です。下の信号では、どちらの時間領域の信号が異常なのかを判断するのは困難です。しかし、パワースペクトルを作成して周波数領域のデータを表示すると、ピークの周波数と大きさの違いから、2つの信号がかなり異なっていることがはっきりとわかります。このような場合には、これらのピークを、教師あり学習に基づく異常検知アルゴリズムの特徴入力として使用することができます。

生の時系列信号(左)では異常は目に見えませんが、データを周波数領域で見ると(右、MATLABのピリオドグラムを使用)、ピーク周波数に明らかな違い見られます。

図2: 生の時系列信号(左)では異常は目に見えませんが、データを周波数領域で見ると(右、MATLABのピリオドグラムを使用)、ピーク周波数に明らかな違い見られます。

統計的に正常な特徴と異常な特徴を分けられるか?

異常は1つの信号で明らかになるとは限りません。今日の複雑な機械には何百ものセンサーが搭載されており、複数のセンサーを同時に検討して初めて異常が明らかになることもあります。ラベリングされたデータがあれば、図3に示すように、時間領域と周波数領域の特徴の統計的な分布を調べることができます。また、特徴量の変換や順位付けを行い、2つのグループを最もよく分ける特徴量を特定することもできます。そして、これらの特徴量を用いて、ラベル付きデータに対する異常検知アルゴリズムを教師あり学習で学習します。

左側のMATLABプロットは、ペアになった正常データと異常データをそれぞれ青と赤で表しています。右側は、診断特徴デザイナーで作成された対応する特徴量のヒストグラムで、教師あり異常検知アルゴリズムにおいて、どの特徴量が正常データと異常データを明確に分けているかを確認しています。

図3: 左側のMATLABプロットは、ペアになった正常データと異常データをそれぞれ青と赤で表しています。右側は、診断特徴デザイナーで作成された対応する特徴量のヒストグラムで、教師あり異常検知アルゴリズムにおいて、どの特徴量が正常データと異常データを明確に分けているかを確認しています。

異常がどのようなものかわからない場合は?

機械のダウンタイムはコストがかかるため、オペレーターは保守的なメンテナンススケジュールで問題を防ぐことを目指します。このような状況では、異常が発生することは稀であり、異常検知アルゴリズムの設計は困難です。

異常検知アルゴリズムの設計には、異常データをほとんど、あるいは全く必要としないアプローチもあります。このような「正常値のみ」の手法は、正常値のデータのみでアルゴリズムを学習し、正常値以外のデータを異常値として識別するものです。

MATLABを使えば、以下のような正常値のみの異常検知のアプローチをデータに適用することができます。

  • 閾値処理では、データが統計的な指標の閾値を超えたときに異常を識別します。例えば、時系列データの最近のウィンドウにおける標準偏差、信号に対する管理図の使用、変化点検出による信号の急激な変化の発見、データ分布のロバストな推定値の取得と分布の端にあるサンプルとしての異常の識別などがあります。統計的な指標に基づいて閾値を設定することは良いスタートとなりますが、このアプローチは多変量データへの適用が難しく、機械学習による異常検知のアプローチよりもロバスト性に欠けます。ロバスト共分散のように、外れ値に対してロバストな統計的推定値は、より良い結果をもたらします。
  • 1クラスサポートベクターマシンは、クラス間の距離を最大化する分離超平面を特定します。1クラスのみの学習では正常と考えられるデータのモデルが得られるため、学習に利用できるラベル付きの異常データがなくても、異常を検出することができます。この手法や他の距離ベースの手法は、入力として数値特徴を必要とするため、高次元データではうまく機能しません。
  • アイソレーション・フォレストは、各観測値を葉に分離するツリーを構築し、異常スコアは、サンプルに対する平均的な深さとして計算されます:正常なサンプルは、異常なサンプルよりも少ない決定回数で分離できます。この手法は、数値とカテゴリーの両方の特徴をサポートし、高次元のデータにも対応しています。
  • オートエンコーダは、正常なデータで学習したニューラルネットワークで、元の入力を再構築しようとするものです。学習されたオートエンコーダーは、正常な入力を正確に再構成します。入力とその再構成の間に大きな差がある場合は、異常を示している可能性があります。オートエンコーダは、信号データと画像データの両方に使用することができます。
オートエンコーダは入力を複製するように学習します。入力とその複製の違いを利用して、信号や画像データの異常を検出することができます。

図4: オートエンコーダは入力を複製するように学習します。入力とその複製の違いを利用して、信号や画像データの異常を検出することができます。

異常検知の活用事例

センサーやネットワーク・計算機の飛躍的な発展によりビッグデータの活用が盛んになる中で、異常検知の応用先は多岐にわたっています。監視カメラ動画からの侵入者検知、身近な例ですとクレジットカードの不正利用検知なども異常検知の一例です。他にも医療(例:喘息の発作の検知)や金融(例:ヘッジファンドの不正検出)分野での事例も見られ、産業機械の稼働状況や製造過程の画像による製品異常の検出、構造物の遠隔監視にも異常検知の適応が進んできています。

また異常の有無をデータから診断 (diagnose) することから一歩進み、異常の予兆を検知(prognoses)する予知保全の枠組みも注目を浴びており精力的に研究が行われています。事前に故障を予測し故障そのものの発生を回避することができれば、安全性の向上だけでなくメンテナンスコストの削減にもつながると期待されています(参考:予知保全)。

Key Points

  • Anomaly detection helps you identify outliers, deviations from normal, and unexpected behaviors
  • If you have sufficient labeled data (including anomalies), use supervised learning for anomaly detection
  • If you have mostly normal data, apply one of the specialized normal-only anomaly detection approaches

MATLABによる画像内の物体の欠陥検出

画像ベースの異常検知アルゴリズムを構築するには、次の方法があります。1) 事前学習済みの alexnet 畳み込みニューラルネットワークに画像を通し、2) 第1層以降のネットワークの活性化を特徴量として使用し、3) fitcsvm で1クラスのサポートベクターマシン(SVM)を学習します。1クラスのSVMは、正常な画像で学習され、負の分類スコアは異常を示します。以下の例では、学習済みモデルは、表面に欠陥のある4つの六角ナットを正しく識別することができました。この例でお試しいただけます。

Detect object defects in images with MATLAB

異常検知の解析技術

単純な1変数からの異常検知ならば統計学の分野で古くから研究されてきた手法も有力ですが、変数が多く複雑なシステムの異常検知になると機械学習の手法が力を発揮します。

例えばデータの分布を正規分布に従っていると仮定して、標準偏差の数倍を超えると異常値と判断する方法や、または箱ひげ図を描き四分位数(25パーセンタイル値や75パーセンタイル値)を利用して上下限値を決定する方法など、データの傾向から直感的に閾値を設ける古典的な異常検知は以前より活用されていました。
ただ、それぞれデータが仮定された分布に従っていない場合は検知の正確性に疑問が残りますし、システムが複雑化することで異常は特定の変数だけに顕著に現れるものでなく複数の変数を組み合わせてはじめて異常検出できるものである場合も考えらます。そのような状況で、変数が数百になってもロバストに異常検知を行えることが機械学習の利点です。

機械学習には2つの流派が存在し、1つは用意された学習用データを使って学習器を作成する場合の教師あり学習。もう一方はデータの特性からグループ分けを行う場合の教師なし学習です。教師あり学習は過去に発生した異常を元に学習させるため、類似の異常を精度良く検出できる利点がありますが、正常・異常のラベルが事前につけられた学習用データを用意する必要があります。異常の発生頻度が低く学習用データを用意することが困難な場合は教師なし学習が向いています。教師なし学習は、設備やシステムが正常に稼働しているデータから現在のデータがどれだけ逸脱しているかを、アルゴリズムにより数値化し異常度を判断します。

異常検出によく使用される教師なし学習アルゴリズムとしてPCA (Principal Component Analysis, 主成分分析)、クラスタリングやk最近傍法 などが挙げられます。他にもサポートベクターマシン (SVM: Support Vector Machine)をレアイベント検出に応用した1-class SVM も有効なアルゴリズムです。

心電図の部分時系列に対してk最近傍法を用いて異常なパターンを検出

心電図の部分時系列に対してk最近傍法を用いて異常なパターンを検出。ここで部分時系列は時系列データをスライド窓に沿って切り出したベクトルデータを示します。Keogh, E., Lin, J. and Fu, A. : HOT SAX : Efficiently Finding the Most Unusual Time Series Subsequence, in Proceedings of the Fifth IEEE International Conference on Data Mining, ICDM 05, pp.226-233.

Class SVMによりデータの異常度を等高線図で表示した例。右端の2点が異常なデータ点。

Class SVMによりデータの異常度を等高線図で表示した例。右端の2点が異常なデータ点。

MATLAB環境を活用した異常検知システムの構築

異常検知のシステムを実現する上で、開発の初期段階から実装まで統一された開発環境は大きなメリットとなります。データの読み込みから異常検知に最適なアルゴリズムの選定、そしてシステムへの実装に至るまでの行程を効率よく行うことが出来ます。

例えば産業機器の遠隔監視システムを構築するに当たって、センサーデータは様々な保存形式で保存されている場合や、非構造データである場合も考えられます。使用するアルゴリズムの選定に関してもすべての状況に適用できる手法は一般的に存在せず、産業機器に対する専門的な知識をベースにして様々なアルゴリズムを試し、異常検知の精度を繰り返し検証する作業は避けることはできません。

また試行錯誤の後、完成したモデルはサーバー上や一般的なITシステムに展開し、ユーザーがウェブ経由で簡単に機器の状況を確認できるようなシステム構築も遠隔監視には必要になります。

MATLABアプリケーションをデスクトップ、Web、およびエンタープライズ システムに実装。

MATLABアプリケーションをデスクトップ、Web、およびエンタープライズ システムに実装。

MATLABではそれぞれの開発フェーズに最適な環境をご提供します。

MATLABではそれぞれの開発フェーズに最適な環境をご提供します。

データインポート

MATLAB®は様々なファイル形式のファイルに対応し、Database Toolbox™を活用してデータベースとMATLABを連携し、ファイルを介さずにセンサーデータを処理することが可能になります。

アルゴリズム開発

Statistics and Machine Learning Toolbox™Deep Learning Toolbox™ で実装済みの機械学習アルゴリズムを迅速に比較検討することができ、開発プロセスを短縮します。また、Econometrics Toolbox™はARIMAX/GARCHなど、より高度な時系列モデル構築をサポートします。

エンタープライズシステムへの統合

MATLAB Compiler SDK™ および MATLAB Production Server™ 使用してMATLABで開発したアルゴリズムを、プログラムを書き直すことなくサーバー環境に展開・運用できます。

参考: 予測モデリング, 管理図