ニアリアルタイムIoTの頑健な異常検知フレームワーク

[Building robust and scalable anomaly detection system for streaming data on Databricks \- The Databricks Blog](https://www.databricks.com/blog/near-real-time-iot-robust-anomaly-detection-framework)の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

# Databricksにおけるストリーミングデータ向けの頑健かつスケーラブルな異常検知システムの構築

# 1. イントロダクション

経済の迅速なデジタル化によって、世界中のビジネスや組織によって処理されるリアルタイムデータの指数関数的な成長を体験しています。大量の新たな観測値は、インフラストラクチャや機械のセンサー値から、オンラインショップの大量のトランザクションに至る、背後の資産の現状に関する重要な情報を含む、重大なメトリクス、計測値、KPIを表現しています。このビッグデータは時にはタイムリーなアラートや、迅速な軽減策のみがリスクを低減し、新たなビジネス機会を特定し、潜在的なコストを削減することがあるため、リアルタイムで監視する必要があります。例えば、風力発電を運用し、タービンモーターからのセンサーの値を収集することで、破損したタービンを特定することができます。破損している機械を即座に特定し、最新の情報をメカニックに提供することで、コストを大幅に削減(すぐに修理し、通常の電力生成に復帰)し、修理プロセスを加速し、マーケティングチームが会社で販売するエネルギーを予測する助けとなり、サプライチェーンチームが事前にどのパーツが製造されるべきかを知ることができます。

異常な挙動の検知は簡単なことではありません。外れ値とはあたかも別のデータセットからやってきたかのように、過去の履歴から特出している観測値です。統計的な用語においては、これらは過去から劇的に異なる別の分布からやってくるデータポイントとなります。ビッグデータのストリーミングが進むことで、新たに到着する情報の海から真の外れ値を特定することは、藁山から針を見つけ出すような困難なタスクとなっています。このため、異常検知、特にリアルタイムのアプリケーションはデータサイエンスや分析のコミュニティにおいて最も一般的なユースケースとなっており、研究者から非常に大きな関心を持たれています。いくつかのモダンな企業では、自分たちのオペレーションにおける異常な挙動を早期検知することで、すでにメリットを享受しており、競合よりも先に優れた価値を生み出すための自動化システムを活用しています。

# 2. ストリーミング分析における異常検知

ほぼリアルタイムかつ大規模な異常検知によって、企業は組織の全ての側面を監視し、さまざまな課題に反応できるので、重大なビジネス優位性をもたらし、価値を提供します。しかし、技術的観点ではこのようなアラートシステムは、頑健かつスケーラブル、高速で経済的に実現可能であることが求められます。現実の異常を特定するタスクは非常に複雑で困難です。全く異なるダイナミクスを示す数千の時系列を監視する必要があり、場合によってはそれらは時間と共に変化、進化するかもしれません。

異常検知アルゴリズムを使う機械学習(ML)がこれらの問題を解決することができます。しかし、非常に困難なものとなる制限が存在しています。まず、MLのテクニックには、時間と共に統計的特性や分布が大きく変化しない膨大な量の履歴データが必要となることがあります。例えば、猫や犬の写真を区別するために学習を行うモデルにおいても、これは真となります(猫の"統計的な"特性は時間と共に変化しません)。さらに、ほとんどの観測値にはトレーニングに使えるラベルが最初から存在せず、数百万のデータポイントへのラベル付けは非常に労力を要するものとなります。ラベルデータが利用できるというほとんどあり得ないケースにおいても、さまざまな観測地に対して単体のモデルでパターンを学習、特定するだけでは不十分な場合があります。さらに、多くの場合において計算資源を必要とするスコアリングを考慮することで検知に必要な時間を損なうことがあり、大規模かつ頑健なストリーミング分析におけるMLの手法をより手間のかかり、リスクのあるものにしています。

このため、最先端のビッグテック企業では、大規模かつニアリアルタイムの頑健な検知を可能とする複数の外れ値検知モデリングテクニックを開発してきています。しかしながら、シンプルさにはそれ自身に価値があり、それぞれの統計モデルは自身の強さと弱さを持っています。しかし、並列でいくつかのテクニックを適用し、検知結果を集約することで個々の弱みを克服し、システム全体の頑健性を劇的に改善します。また、[Apache Spark™](https://spark.apache.org/)や[Photon](https://www.databricks.com/jp/product/photon)のような分散エンジンによって提供される膨大な並列処理にも適しています。このようなシステムは、MLのランダムフォレストテクニックのようなアンサンブルモデリングを容易に比較することができます。単一の決定木のように、学習モデルのそれぞれは低い予測能力を示すことでしょう。これらを集約することで、弱学習器のシステムは高い予測能力とより優れた頑健性を取得します。これは、監視が必要な数万の時系列の規模で適用される際には特に適切なものとなります。全てのバラエティや特性に対応できる単一のモデリングフレームワークを構築することは不可能かも知れませんし、システムが障害に脆弱なものとなってしまいます。次に、弱学習器をシンプルに保ち、計算的に性能を出すことで、フレームワークをニアリアルタイムの分析やストリーミングアプリケーションに適したものにします。

これは、それほどのインフラストラクチャを必要とせず、コスト削減や投資全体のROIの改善につながります。

# 3. アーキテクチャ
![](https://www.databricks.com/sites/default/files/inline-images/db-392-blog-img-1.png?v=1669127716)
*図1: 提案する異常検知フレームワークの完全なデータフロー図*

## タービンからの生データ

我々のケースでは、クラウドストレージにJSONドキュメントとしてタービンデータが格納されています。ここから、新規ファイルを特定し、スキーマ推定を行うAutoLoaderを用いて自動で取り込みが行われます。現実のシナリオでは、このステップはKafkaのようなメッセージキューから直接メッセージを読み込むことで行われることもあります。

## ETL

Delta Live Tablesによって、宣言的なETLパイプラインを定義することができます。我々のケースでは、ブロンズ、シルバー、ゴールドからなる3レイヤーのシンプルなメダリオンアーキテクチャを用いています。ブロンズレイヤーは、ロードの再処理を可能にし、オリジナルデータを保持するための変換処理なしの生データを表現します。シルバーレイヤーは、統合されたデータモデルを用いた異常検知プロセスを実行可能にするキュレーションされたデータを表現します。最後に、ゴールドレイヤーは、特定の観測値が異常か否かを示す情報を持つ最終的なアウトプットを表現します。

## 異常検知プロセス

![](https://www.databricks.com/sites/default/files/inline-images/db-392-blog-img-2.png?v=1669127716)
*図2: 並列の異常検知プロセス*

複数の異常検知手法はそれぞれの観測値に対して実行されます(手法の詳細は後の段落で説明します)。それぞれの手法の検知スコアは記録され、統合されたサマリーに集約されます。サマリーを特定するために重み付き投票メカニズムが用いられます。このアプローチを用いることで、追加の手法を取り込むことができます。複数の検知手法を用いることで、再現率や精度に関してサマリーをチューニングすることができます。多数決投票は優れた制度を示します(4手法の一つのみが異常を検知した場合、検知は無視されます)。一方、最低でも一つの手法が検知した際に反応することで、ベストな再現率のサマリーにチューニングすることができます(4手法の1つでも異常を検知したら、観測値を異常とみなす)。

## ダッシュボード

最後に、異常検知の結果がグラフィカルなダッシュボードに表示されます。Databricksによって、複数のビジュアライゼーションを作成し、フレッシュなデータを表示するように自動でダッシュボードをリフレッシュすることができます。
![](https://www.databricks.com/sites/default/files/inline-images/db-392-blog-img-3.png?v=1669127716)
*図3: 異常検知ダッシュボード*

# 4. 弱学習器を用いた頑健な外れ値検知フレームワーク

提案するソリューションは、複数のモデルでデータのストリームを評価します。選択したモデルは前提やモデリングのアプローチが異なります。このため、独立的、直角的に動作するので、異なるタイプの異常に対して反応することになります。

[***Robust PCA***](https://en.wikipedia.org/wiki/Robust_principal_component_analysis)とは、Robust Principal Component Analysis (RPCA)のことを指しており、Netflixによって提要された外れ値教師なしの異常検知です。極端な観測値に堅牢になることで、教師なし次元削減テクニックのPCAを拡張します。学習された低次元の表現に従わない観測値として異常を特定します。また、このテクニックによって季節性データに対応することができるので、時系列に対する自然な選択肢となっています。

[***Twitter Anomaly Detection***](https://blog.twitter.com/engineering/en_us/a/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series)は、Twitterによって提唱された統計検定に基づいた異常検知テクニックです。このアルゴリズムは、時系列をトレンド、季節性、確率論的コンポーネントに分解して活用します。このため、挙動/統計的なパターン(膨大なツイートの日次の季節性など)に対応することができ、特にビッグデータアプリケーションでは有用となります。この異常検知アルゴリズムはグローバルやローカルな外れ値の両方に対応できることも述べておきます。

***Rolling median absolute deviation***は、外れ値を特定するための最もシンプルなテクニックの一つです。基本的なアイデアは、データの典型的な変化性を理解し、これらの過去のパターンをベースとしてすべての新規データポイントを評価するというものです。より正確に言うと、過去のデータのローリングウィンドウで生じた(頑健な)中央絶対偏差を活用し、新たな観測値がローリングアベレージから逸脱しているかどうかをチェックします。新たなエントリーポイントが、過去の平均値からの3.5偏差に違反した場合、異常とタグ付けされます。しかし、このモデルは季節性やトレンドには対応できず、多くの場合時系列のスパイクを検知してしまいます。

[***Prophet***](https://facebook.github.io/prophet/)***ベースの異常検知***では、Prophetと呼ばれる業界標準の予測フレームワークを活用し、それをベースに外れ値分類を行います。より正確に言うと、新規データポイントは追加の不確定性バッファを持つProphetの予測に対して評価されます。それぞれの予測に対する境界は、自然な偶然性とデータの変動性を意図したものです。評価しようとする新たなエントリー(新規エントリーは除く)までの履歴情報をベースにして予測が同種映されます。このため、過去のパターンを用いることで、十分に大きな不確定性の境界を持つ新たな観測値を予測します。しかし、新たなエントリーがこれらの境界の外になった場合に、異常として特定されます。

それぞれのモデルはパラメータ化されており、パターン認識のために異なるタイムスパンを指定することができます。スコアリングは完全に並列化されているので、完全にスケーラブルなものとなっています。さらに、ソリューションの適合性や頑健性を高めるために、フレームワークにさらなる異常検知モデルを追加することができますし、追加すべきです。典型的なシナリオにおいては、フレームワークの敏感さはビジネスユースケース、真の異常が検知されることによる潜在的なゲイン(上述の風力タービンの修理による費用の削減)、コスト増につながるだけではなく、ソリューションの信頼を毀損することになる誤ったアラーム(偽陽性)によって決定されます。このため、このトレードオフに対応するために多数決の投票が採用されています。ここでは、誤った検知やこの自立システムの信頼性を毀損することを回避することの重要性を強調しておきます。特に、我々の例ではもし2つのモデルのみ(40%、50%)が異常な挙動であると合意した場合、観測値が外れ値として判定されます。この比率は、システムオーナーによってコントロールされ、ビジネスロジックや適用する弱学習器の数に基づいて設定すべきです。

# 5. まとめ

本書では、ストリーミングの時系列データに対する頑健かつ現実世界の異常検知フレームワークを説明しました。ストリーミングETLのためにDLTを用いてDatabricks上に自律システムが構築され、Sparkで並列処理が行われており、複数の異なるIoTシナリオに適応することができます。新たなデータポイントは、複数のテクニックで評価され、偽陽性の数を削減する多数決ルールで外れ値が検知されます。このフレームワークは、評価ステップにモデルを追加するだけで容易に拡張が可能であり、全体的なパフォーマンスを改善したり、ご自身の特定の問題にカスタマイズすることができます。このワークロードの結果は、ステークホルダーの制御盤として動作する使いやすいダッシュボードに表示されます。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)