産総研人工知能セミナー 「人工知能を活用したインフラ健全性の … · •...
TRANSCRIPT
大規模人工システムのためのデータ駆動型異常検知について
2017年6月30日矢入健久
東京大学大学院・工学系研究科
産総研人工知能セミナー「人工知能を活用したインフラ健全性のモニタリング」
構成
1. データ駆動型異常検知の基本– 背景、従来手法、前提条件– 手順 : 7つのステップ– 機械学習手法の選び方
2. 事例紹介:人工衛星の健全性監視– 時間が足りない場合は割愛
3. データ駆動型異常検知の課題と未来– 様々な課題と対策– まとめ
データ駆動型異常検知の基本
背景:人工システム・インフラの健全性監視
• 社会を支える様々な大規模人工システム–交通、生産、ライフライン、etc.–健全性監視:安全で効率的な運用を監視–異常検知 : 事故や非効率運用の予兆検出
• 計測・通信技術(IoT等)の進歩と普及–大量のセンサデータが利用可能に
膨大な監視用センサーデータ
データを活用した健全性監視・異常検知
様々な人工システム・インフラ
従来の健全性監視・異常検知
1. 人間(専門家)による直接監視2. 検知ルール・ロジックによる監視
– 専門家のノウハウ(経験的知識)をルール/コード化
3. システムモデルを用いた監視– シミュレーションによる予想と比較専門家の「知識」に依存 →「知識駆動型」
評価(予測・比較)
利用 出力異常度 時刻
異常!
専門家
形式化
知識(モデル・ルール)
観察・経験
データ
IF A, THEN B
と、ここでは呼ぶことにします
データ駆動型健全性監視・異常検知とは?
専門家の知識に頼る代わりに、蓄積された過去のデータに機械学習手法を適用することにより、正常・異常の判別を行う規則を獲得し、監視に利用する
– 関連分野:統計的プロセス管理、MT法、システム同定、等
DB
訓練データ機械学習アルゴリズム
学習されたモデル
学習
評価・監視
利用入力 出力異常度 時刻
異常!
(過去の)正常データ データ
人工システム(監視対象)
データ駆動型異常検知のイメージ
過去の正常時のデータ
○月×日
○月△日
○月□日
計算機による学習
Y1
YD 健康な日のデータ
Y2
Y1
YD
今日のデータ(監視対象)
正常範囲(モデル)
Y2
診断したい日のデータ
異常!
正常
機械学習手法 正常モデルと比較
データ駆動型異常検知の前提条件
[前提1] 正常データと異常データには差異がある–当たり前だが、最も根本的な前提
[前提2] 正常データは(長期的には)定常である–学習(訓練)時と監視(テスト)時とで正常データの分布・挙動が大きく異ならないということ
[前提3]過去の正常なデータは豊富に有る–過去の異常データも有った方が良いが、ほとんど無い場合が多い
これらの条件が揃うならば、データ駆動型異常検知を試す価値がある
[前提1] 正常データと異常データには差異がある
• 両者がデータ上で識別可能であるということ• 視点を変えたり、新たな特徴量を用いることによって識別可能になる場合もある
容易なケース(分布が異なる)
正常データ (想定される)異常データ
新たな特徴量を用いることで識別可能なケース
非ガウス的分布のケース
正常データ
(想定される)異常データ
非線形変換(写像)
正常 正常異常周期(周波数)を特徴量に用いれば識別可
正常 正常異常
「波形」が正常と異常とで異なる
[前提2] 正常データが定常とみなせる
• システムが正常である限り、ほぼ同じ分布・傾向のデータを出力し続けるという仮定
• この前提が無いと、分布の違いが異常によるものなのか、(異常ではない)非定常性によるものなのかデータだけでは区別できない
–それでも区別するには、その分野の「知識」が必要
訓練(正常)データ テストデータ
異常 ?
時間経過
実は「正常」な経時変化だった..
[前提3]過去の正常なデータは豊富に有る• 数よりも正常領域を網羅していることが重要• 異常データは事前に(ほとんど)手に入らない
– そもそも、異常データも豊富にあるなら、教師あり2クラス分類学習を適用すべき
– 起こり得る異常の種類は正常の種類より圧倒的に多い本当の正常「領域」 訓練データが不足すると..
正常領域を過小評価してしまう
真の正常領域
学習された正常領域
テスト時
誤検知(False Positives)
1-クラス分類問題としての異常検知• 通常の2クラス教師あり分類問題との違い
– 「異常」の訓練データが十分に無いので「正常」クラスのみを学習する
(通常の)2クラス分類問題 異常検知(1クラス分類)問題
「異常」を直接モデル化するのが困難両クラスをそれぞれモデル化(生成的)識別境界面を推定(識別的)
クラス1
クラス2
識別境界
異常データ
正常
我々が想定する「データ駆動型異常検知」はこちら
本音: 「教師あり2クラス分類問題だったら、楽なんだけど。。」
異常の種類[Chandola et.al. 2009] による異常の分類
1. 点異常(Point anomaly)2. 文脈的異常(Contextual anomaly)3. 集合的異常(Collective anomaly)
(1) 点異常 (2) 文脈的異常 (3) 集合異常点異常
正常
あるサンプルが残りと比べて明らかに異なるような異常
特定の文脈で考えたときに他と違うような異常
(ex.) 気温
時間
点ではなく、まとまりとして見たときに異常
データ駆動型異常検知の基本手順
[Step 1] 正常訓練データを用意(前処理)
[Step 2] 機械学習手法を決定
[Step 3] 正常モデルを学習
[Step 4] 異常度を定義
[Step 5] 閾値を決定
[Step 6] データを監視
[Step 7] 検知結果を解析
DB
[Step 1] データの前処理「現実」のデータは、外れ値や欠損を含むため、前処理(クリーニング)が必要になる
• 外れ値– 「些細な」異常値–計測エラーなど–学習に悪影響を与える
• 欠損–計測・通信エラー,サンプリングタイミング・間隔の違いなど
–多くの学習アルゴリズムが非対応両者とも、軽微(リスク小)かつ明白な異常値と言える
外れ値
欠損
[Step 1] データの前処理(続き)• 外れ値も欠損もできるだけ素朴に処理すべき
–修正し過ぎると、微妙な異常まで消してしまったり、新たな異常値を作ってしまう危険性
–具体的な方法は個々の問題に依存–外れ値除去の例:各変数ごとに上限・下限値設定–欠損補間の例:前時刻の値で代用(0次ホールド)
p100-α
pα
θupper
θlower外れ値 Time
欠損
Time
0次補間補完
[Step 2] 学習モデル・手法の選択
• システムの正常な挙動とデータをどのようにモデル化し学習するかを決定
• システム、データの性質や諸々の制約を考慮して決めるべき
–万能なモデル・手法は無い対象システムの性質
データの性質諸々の制約
多変量・時系列・マルチモーダル, etc.
入力-出力系 自律系 操縦系
事前知識の有無, サンプル周期, etc.
[Step 2]学習モデル・手法の選択考慮すべき特性1 : 変数群の構造
データを構成する多数の変数についての「構造」や定性的関係が既知ならば利用すべき
(1) 全変数をフラットに扱う場合 (2) 入力-出力に分ける場合
(3) 稼働モードを表す変数が特定できる場合 (4) より複雑な構造を持つ場合
代表手法:クラスタリング、次元削減、密度推定等の教師なし学習
手法: 各種教師あり回帰・分類学習
手法: 各モードごとの教師なし学習、あるいは、モードを出力とする教師あり学習
手法: Bayesian Network など「データ駆動」とモデルベースとの境界
潜在変数
観測変数
入力変数
出力変数
モード変数
観測変数
[Step 2]学習モデル・手法の選択考慮すべき特性2 :変数構成(異種性等)
データを構成する変数群の性質(連続/離散, 等)によっても、適したモデル化が異なる
[Case 1] 全変数が連続変数→多次元正規分布をはじめとする連続分布– 変数により物理単位、値域が異なる場合
→ 無次元化、正規化等の前処理[Case 2] 全変数が離散変数
→ ベルヌーイ分布、カテゴリカル分布など[Case 3] 全変数(特徴)が均質(例:画像)
→ ニューラルネットワーク等も利用可[Case 4] 連続・離散変数混合
→ 分けてモデル化、統一化その他、様々なケースあり
Status Var. #2Status Var. #1
On Off Disabled
各ピクセルが変数
多次元(2次元)正規分布
カテゴリカル分布
[Step 2]学習モデル・手法の選択考慮すべき特性3:線形/非線形性
例えば、変数集合を入力-出力に分けられる場合:
• DNN, GPR, SVR などの非線形回帰モデル・手法を使いたくなるが …
• 人工システムは線形な挙動になるように造られている(設計されている)場合が多い
• 全体では非線形でも、局所的には線形な場合も多い
x1
xD
x2
y1
yd
y2入力 出力x y
関数 f
( ) exy += f回帰学習:訓練データから、関数 fを推定すること
( ) ( ){ }nnD yxyx ,,,, 11 =
[Step 2]学習モデル・手法の選択考慮すべき特性4: データの高次元性
人工システムから発生するデータの共通特徴:
「データは高次元だが、(正常な)システムの本質的な自由度は遥かに少ない」
–観測(データ)変数同士が高相関–データの背後の潜在変数(因子)
• 異常検知≒変数間の関係の監視• 次元削減,潜在変数モデルが有効
–自律系: PCA, 因子分析モデル, AutoEncoder–入力-出力系: PLS, CCA, etc. –時系列データ: 状態空間モデル, etc.
時刻
変数(次元)
[Step 2]学習モデル・手法の選択考慮すべき特性5: データの多モード性
このようなデータをどのようにモデル化するか?1. モードを直接観測できる場合
– 各モードごとにデータを分けてモデルを学習– モードを出力として、教師あり分類学習を適用
2. 直接観測できない場合– クラスタリング(教師なし学習)を行う– (離散)潜在変数モデル,混合分布モデルを適用
正常時のデータの散布図を描くと複数の塊になる場合がある
クラスタ
多くの人工システムには、複数の稼働モードが存在する
対応
モード1 モード2
[Step 2]学習モデル・手法の選択考慮すべき特性6: ダイナミクス
• システムがダイナミクスを持っている場合、データは時系列として扱われる
• ダイナミクスの異常は文脈的・集合的異常とも関連簡単な例(2変数の場合)
正常パターン
変数1
変数2
異常パターンA
変数1
変数2
変数間の静的関係の崩れ
i.i.d.とみなしても検知可能
変数1
変数2
異常パターンB(波形異常)
変数間の静的関係は正常
時間的遷移も考慮する必要
変数1
変数2
異常パターンC(遷移異常)
[Step 2]学習モデル・手法の選択
考慮すべき特性6: ダイナミクス(続き)時系列データへのデータ駆動型異常検知の適用方法には,大きく2通り考えられる
アプローチ2 : 状態変数モデルi.i.d.なデータな自律システム
潜在(状態)変数の遷移もモデル化
(例)HMM, SLDS, 等(ディープな手法も近年出現)
潜在変数
観測変数
Xi
Yi
Xi+1
Yi+1
Xi+2
Yi+2
潜在(状態)変数
観測変数
Xi
Yi
Xi+1
Yi+1
Xi+2
Yi+2
拡張
アプローチ1 : スライド窓
(例)SSA, Dynamic PCA, AR, 等
時刻
y1 y2
y3
yt+1yt+2
時刻
w1 wt+1w2
w3 wt+2窓
i.i.d.とみなす
3
2
1
yyy
4
3
2
yyy
5
4
3
yyy
+
+
+
3
2
1
t
t
t
yyy
+
+
+
4
3
2
t
t
t
yyy
…
[Step 3] 正常モデルの学習訓練データ(期間)の選択
(1) 固定 (2) スライド (3) オンライン
• 最初の訓練期間に正常モデルを学習し、それを使い続ける
• システムが本当に定常であると確信できる場合
• 定期的に正常モデルを学習(更新)し直す
• 定期メンテナンスがある場合など
結局、利用者が「どんな」異常を見つけたいのかによって異なる• 固定だと、定期メンテナンスによる変化を異常として(誤)検知• オンラインだと、緩やかな経年劣化を見落とす可能性
Training Test
Training Test
Training Test
Training Test
Training
Test
• 連続的に正常モデルを学習(更新)し続ける
• 緩やかな変化を吸収• 経年変化を無視したい場合など
[Step 3] 正常モデルの学習モデル選択問題
• ハイパーパラメータの値をどう決めるか?– 学習アルゴリズム自体のパラメータやモデルの複雑さを表すパラメータ
– クラスタ数、潜在変数の次元数、カーネルパラメータ,隠れ層の数,等
– 教師あり学習 : 交差検定など– 教師なし学習 : 情報量基準,ベイズ的モデル選択等
– ヒューリスティックな方法(エルボー法など)• 学習モデル・アルゴリズムに依存• ただし、一度適切に決めれば、モデルを更新する場合も、使い続けられる(ことが多い)
or
クラスタリングの場合
k=1
k=2
[Step 4] 異常度の定義監視したいデータが、学習した正常モデルからどれだけ逸脱しているかの指標
• 確率的モデル:マイナス対数尤度
• 非確率的モデル:予測誤差,再構成誤差,モデルとの距離
• PCAを用いた統計的プロセス管理:T2統計量,Q統計量
• 高次元データの場合,少数の変数のみが関わるような局所的異常が埋没してしまう危険性がある
• 注意 : 異常度は「異常の深刻さ」とは異なる
Y2
Y1
YM
正常モデル
評価したいデータサンプル
モデルからの逸脱度 = 異常度
( )Θ−≡
|log tt p xxの異常度
2ˆ ttt xxx −≡の異常度
Y2
Y1
YD Q-static
T2-static
≒「びっくり」度
[Step 5] 閾値の決定警報を出す閾値をどう決定するか?
– 厳しすぎると誤警報を頻発。トレードオフまず検証用データセットを用意する
– 交差検定でも良い1. 既知の異常が入手可の場合(理想)
– ROC曲線を見ながら決められる
2. 異常が入手不可の場合– 正常検証データに対する最大異常値(あるいは
99-th パーセンタイルなど)にマージンを加える
移動平均等の平滑化により、ノイズによる誤警報を低減することも良く行われる
時刻
異常度(異常含む検証データ)
閾値1
閾値2
閾値3
真の異常正常
False Positive Rate
True
Pos
itive
Rat
e
0.00.0
閾値1閾値2
閾値3
1.0
1.0
ROC曲線
時刻
最大値
異常度(正常のみの検証データ)
閾値
0
α倍
[Step 6] 新しいデータの監視当前だが重要なこと:訓練データと「同じ」前処理を行ってから、監視評価する
– 外れ値除去、欠損値補完、正規化など– 「同様の」ではなく、パラメータ値等も含めて「同一の」前処理を行うこと
誤警報が起こった場合の対応 : – まず本当に「誤」警報なのかを検証する– 本当に誤警報だった場合は、– 対処1 : 異常度に対する閾値を緩める– 対処2 : 誤判定された正常データを加えて再学習を行う
– 対処3 : アドホックな除外ルールを作る
生データ
前処理(正規化等)
訓練データ テストデータ
[Step 7] 検知結果の評価・解析運用の現場は、警報と異常度だけでは満足せず、「根拠も知りたい」と言う..
– システムを簡単には停止できない– 原因の究明、対策(修理)も必要– ブラックボックスでは困る
→ 機械学習応用として独特な点
各変数の異常度への寄与度を評価
– どのセンサー群の値が変なのかが分かる– 時間的遷移(順番)も重要な情報– (予測)誤差の場合: 寄与度 = 成分– 対数尤度の場合: 寄与度 = 周辺対数尤度
最後は元データを専門家に見てもらう
なんで?
0 500 1000 1500 20000
2
4
6
8
10
12
14
16
0 500 1000 1500 2000 2500-8
-6
-4
-2
0
2
4
6
8
10
12
各変数の成分
異常度への寄与
センサー X
事例紹介:人工衛星の健全性監視
T. Yairi, N. Takeishi, T. Oda, Y. Nakajima, N. Nishimura and N. Takata, "A Data-Driven Health Monitoring Method for Satellite Housekeeping Data Based on Probabilistic Clustering and Dimensionality Reduction,"in IEEE Transactions on Aerospace and Electronic Systems, vol. 53, no. 3, pp. 1384-1401, June 2017.doi: 10.1109/TAES.2017.2671247
詳細は、上記の論文(オープンアクセス)をお読み頂ければ幸いです。
データ駆動型異常検知の課題と未来
データ駆動型異常検知の課題
1.訓練正常データの不完全性2.非定常なデータへの対応3. 異なるシステム間のデータ利用4. 性能(検知率等)の見積もり5. 検知から診断へ6. 「異常度」と「異常の深刻度」との違い7. 異常検知の説明可能性
課題1 : 訓練正常データの不完全性前提3:「訓練データは、正常状態を網羅している」• 現実には、正常状態のデータを用意するのは困難• その結果、テスト時の誤検知を免れない
提案:専門家からのフィードバックを利用して徐々に正常領域を網羅し誤検知を減らしていく
本当の正常領域
訓練データとして与えられる領域
t0
Anomaly!
専門家
データ経験・知識
提示
再学習
フィードバックTrue or False ?
課題2 : 非定常なデータへの対応
前提2:「正常データは定常的である」• 実際には、正常でも徐々に変化していくことが多い• システムが変わらなくても、環境が変化することもある
異常度
警報閾値 誤警報
環境の変化等
対策:定期的な再学習。ただし、経年劣化を検知できなくなる
課題3 :異なるシステム間のデータ利用
あるシステムの正常データで学習したモデルを、別のシステムに使うことはできない
–変数(センサ)集合の違い–データの分布の違い–システムの違い
今後、転移学習などの発展に期待(ニーズ、インパクトは大きい)
工場 A 訓練データ 正常モデル 利用?
工場 B
課題4 :性能(検知率等)の見積もりA氏: 「先生の手法を当社の工場ラインのデータに適用し
たら、異常を何パーセントで検知できますか?」
私 : 「それは場合によります。既知の異常データがあれば、見積もりはできますが。」
A氏 : 「異常時のデータはまだありません。それに、どんな異常が起こるかは事前に分からないですからね。」
私 : 「どんな異常が起こるかも分からないのに、検知率を知りたいというのですか!?」
A氏 : 「だって、『異常検知率が99%以上』とか言えないと、上司や現場が納得してくれないんですよ。」
私 : 「。。。」(呆然)おそらく、(正直な)異常検知研究者の最大の悩み
課題5 :検知から診断へ私 : 「この期間の異常度が高いですね。」B氏 : 「異常度が高い原因は何ですか?」私 : 「原因は分かりませんが、過去の正常パターンとは違う
ということです。あと、この変数の寄与が高いです。」
B氏 : 「原因が分からなければ、信頼できませんね。」私 : 「。。。」 (心の声 : 「原因究明は専門家の仕事でしょ。。」)
データ駆動型は「広く浅い検知」向き
– 「なんか変」を過去の豊富な経験から気づく知識駆動型は「狭く深い診断」向き
– システムに関する専門知識に基づき原因を探る両者は相補的関係
掛かりつけ医
専門医
課題6 : 「異常度」と「深刻度」との違い私 : 「この時期から急に異常度が高くなってますね。」
C氏 : 「すごく高いですね。やばいということですか?」
私 : 「異常度が高いからと言って、深刻な異常とは限らないですよ。」
C氏 : 「あ、本当だ。ここでメンテ入れてますね。異常度の上昇は誤検知ということですね。」
私 : 「。。。」(「メンテでシステムの挙動が変わったんだから、検知されるのが正しいでしょ!軽々しく誤検知とか言わないで!」)
「異常の深刻度」は明らかに問題依存だが、今後取
り組むべき課題の1つ
課題7 :異常検知の説明可能性D氏 : 「ディープラーニングとか使えませんか?」私 : 「この問題なら確率的モデルを作れるし、その方が結果の解釈がしやすいですよ。」
D氏 : 「最新の方法の方が上司の受けが良いんです。」私 : 「DLが『異常』と言ったら、素直に信じますか?」D氏 : 「なぜ異常なのか説明も必要です。」(キッパリ)私 : 「…」(「だから、絶対にモデルを使った方が良いって。。」)
実は、専門家はブラックボックスを望んでいない。
インフラ・人工システムの異常検知は、画像認識問題とは異なり、遅かれ早かれ、判断根拠が必要になる
まとめ
• 基本的なデータ駆動型異常検知の手順はほぼ確立されている
–問題やデータの性質に合わせて機械学習アルゴリズム・モデルを選択
–アルゴリズムは今後も進化することが期待される• 現状の枠組みには課題も多い
–教師あり分類学習と比べて、問題が悪構造– 「異常」を事前に明確に定義できないことが根源–枠組みを広げる研究が必要–研究者としては、「難しいから面白い」という面も
おわりに「データ駆動型異常検知をやるべきか?」
1. 「正常データも異常データも十分にある。」→ (教師あり分類学習で)確実にうまくいく。
2. 「正常データは十分にある。異常データはほとんど無いが、どんな異常を見つけたいかは分かる。」
→ 多分、うまくいく。
3. 「正常データは十分にある。未知の異常も検知したい。」→ うまくいくかもしれないが、過度の期待は禁物。
4. 「正常データが十分とは言えない。どんな異常が起こり得るかについても分からない」
→ 正直言って厳しい。しかし、検討する価値はある。