Ichizokuは日本唯一のSentry公認販売業者です。
日本語のドキュメント、動画、サポート窓口で日本のお客様のSentry活用を支援します。

堅牢な時系列モニタリング Matrix Profile と Prophet を用いた異常検知

Article by: Ram SenthamaraiAayush Seth 

 

異常検知は鏡だらけの家で探偵をしているようなものです。何かがおかしいのは分かるけれど、見えているのが本当の問題なのか、それとも奇妙な反射にすぎないのか、いつも確信が持てません。
 

本番環境のシステムを監視するのは、絶えず形を変える干し草の山の中から動き回る針を探すように感じることがよくあります。Sentry では、お客様が従来のしきい値ベースや割合ベースのアラートを超えられるようにすることを目標にし、システム内の微妙で複雑な異常をほぼリアルタイムで検知できるよう支援することを目指しました。

本記事では、当社の AI/ML チームが Matrix Profile と Meta の Prophet を用いて、時系列の異常検知システムを開発した方法を詳しく説明します。直面した課題を取り上げ、このハイブリッドなアプローチによって、より信頼性が高く、よりインテリジェントなアラートを構築できた理由を解説します。

 

 

問題:ノイズの多いメトリクス、微妙な障害

システムメトリクスは本質的にノイズが多いものです。しかし、適切なタイミングで適切な異常を特定できるかどうかで、結果は大きく変わります。たとえば、素早い修正で済むのか、重大インシデントに発展するのか。とはいえ、自動の時系列異常検知(Time Series Anomaly Detection。以下 TSAD)は簡単な問題ではありません。

  • コンテクストがすべて:データのスパイクは異常かもしれませんし、週末セール、プロダクトローンチ、システムメンテナンスの影響にすぎない場合もあります。コンテクストがなければ、その違いは判別しにくくなります。
  • 「正常」は常に変動する:パターンは時間とともに変化します。季節性、トレンド、そして突然のレジームシフト(状態の急変)によって、今日の「正常」が明日の「異常」になり得ます。
  • ノイズとシグナルのせめぎ合い:システムメトリクスのデータはノイズが多くなることがあります。特に大規模環境では、誤検知を連発せずに真の異常だけを検知するのは簡単ではありません。
  • 万能解はない:各メトリクスの振る舞いは異なります。CPU 使用率、ユーザー登録数、取引量など、それぞれ特性が異なるため、状況に応じたアプローチが必要です。
  • ラベル付きデータがない:教師あり学習は、正解(グラウンドトゥルース)がない場合、難しくなります。多くの場合、何が異常だったのかは、実際に何かが壊れてから初めて分かります。
  • Sentry のスケール:何十万ものメトリクスを監視する Sentry のようなオブザーバビリティプラットフォームの規模で、この問題を解くことを想像してみてください。

 

要するに、自動 TSAD には、コンテクストを理解し、適応的で、精度が高く、しかもスケールすることが同時に求められます。

 

 

解決策:ハイブリッドアプローチ

ARIMASARIMATimeGPTMoiraiAutoFormerChatTS などさまざまなモデルで広範に実験した結果、私たちは Matrix ProfileProphet を組み合わせたハイブリッド手法に落ち着きました。これらのモデルを組み合わせることで、時系列データにおける異常をより広い視野と、よりニュアンスのある形で理解できるようになります。

 
Matrix Profile:形状ベースの異常検知

Matrix Profile は教師なしの手法で、部分系列同士を比較することで、時系列における反復パターン(motifs)と外れパターン(discords)を特定します。これは時系列内の各部分系列について、最も近い近傍の部分系列までの距離を計算するものです。距離が大きい場合、それは通常とは異なる、または異常な振る舞いを示していることを意味します。この手法は正確な値そのものよりも、データの形(スパイク、ディップ、反復サイクル)のほうが重要な場合に理想的です。

採用した理由

  • 生の値だけでなく、類似性に基づいて異常を検出する
  • STOMP アルゴリズムのおかげで効率的
  • 事前学習を必要としない
  • ハイパーパラメータは 1 つだけで、ウィンドウサイズである

 

 

 

ええ、私たちもデータは用意しました。これがなければ、あまり実験はできませんよね。そこで、優秀なデータサイエンティストなら皆そうするように、私たちはまず、既存の業界標準データセットである UCR Time Series Classification Archive から始めました。ところがすぐに限界にぶつかりました。これはオブザーバビリティ領域をあまりカバーしていないのです。そこで私たちは独自の合成データを生成し、さらに Sentry に存在する既存のメトリクスデータも活用しました。

 

すべてはアルゴリズム次第

プログラマーが「何をしたか」を説明したくないときに使う言葉

 

広大なデータセットの中から一過性のトレンドを特定することは、異常検知における大きな課題です。これは主に、Matrix Profile の重要なハイパーパラメータである「ウィンドウサイズ」に左右されます。この扱いが難しい設定は、システム性能にとって極めて重要です。さまざまな自動チューニング手法を評価した結果、私たちは Summary Statistics Subsequence(SuSS)が最も効果的だと分かりました。SuSS は、ローカルとグローバルの要約統計量(平均、標準偏差、レンジ)を比較することで最適なウィンドウを賢く特定し、正確な異常検知に必要なコンテクストを精密に突き止めます。

次に課題となったのは、生の Matrix Profile 距離を明確で実行可能な異常スコアへ変換することでした。AnomalyScorer モジュールは、各部分系列がどれほどユニークであるかを表すこれらの距離を評価し、設定可能なしきい値と、任意で Prophet の予測を用いて、各データ点に精密な異常スコアを割り当てます。柔軟性を組み込み、統計的なしきい値(距離の 99 パーセンタイルなど)、動的なベースライン、さらには複数アルゴリズムを組み合わせるためのアンサンブルロジックまで取り入れました。その結果、各タイムスタンプに対して堅牢で解釈可能なスコアが得られ、これを下流のアラートと可視化のために、単純な「異常」または「なし」のフラグへ二値化します。このモジュール設計により、感度を微調整し、誤検知を大幅に減らし、あらゆる種類の時系列データに適応できるようになります。

アラートからの回復中に発生する断続的な挙動も、私たちが直面したもう一つの大きな課題でした。これは Matrix Profile の性質によるもので、一瞬のエラースパイクがウィンドウサイズが 50 であるという理由だけで、50 時間の期間内に複数のアラートを引き起こすことがあります。これを解決するために、私たちは賢い解決策を実装しました。多数決に基づくスムージングと、Prophet に基づく回復ロジックです。結果はどうだったかというと、私たちのシステムは真の異常の後にいつ静かになるべきかを理解し、高い確信を持てる場合にはアラートを抑制できるようになりました。これにより、アラートはより意味のあるものになり、過剰に押し寄せることがなくなります。

 

数千のメトリクスに対応できるようにシステムをスケールさせる

異常検知をスケールさせるのは、「変な姿勢で“寝ろ”と合図したら寝るように犬をしつけておいて、次はドッグランにいる全ての犬に、それを同じようにやってもらえるはずだ」と期待するようなものです。
 
Matrix Profile も Prophet も非常に強力ですが、大きな力には大きな計算負荷が伴います。1 つの時系列あたり数千のデータポイントがあるため、計算時間は相当なものになります。そこで私たちが取った解決策は、二段構えのアプローチです。まず日次のバッチモードでデータを処理し、不要な部分を削ってモデルをフィットさせます。そのうえで、新しく流入するデータについてはストリーム計算を活用し、Matrix Profile と Prophet の予測を超高速に実行します。さらにイベントデータストアの負荷を軽減するため、集計済みデータを直近 28 日のローリング期間でキャッシュもしています。効率化の実現です。
 
Graph showing the last valley marked with red dots, indicating an anomaly.

 

この 2 つ目の例は、週次と日次の周期を持つ、ノイズの多い時系列を示しています。ここでも私たちのシステムは、訓練されていない目には見過ごされていたかもしれない異常なシステム挙動をうまく検知できています。

Graph showcasing recent anomalies as spikes, overlayed with red dots to indicate the callouts.

 

異常検知システムを活用する

アラートの設定ページに移動し、しきい値オプションとして「Anomaly Detection」を選択してください。

以上です。

 

最後に:今後の展望

現在、次の取り組みを進めています。

  • ユーザーからの異常に関するフィードバックを取り込み、モデルを継続的に改善する
  • 複数の時系列にまたがる因果分析を行う

 

大規模環境で時系列の異常検知を行うのは簡単な課題ではありません。私たちは、強みが補完し合う複数のモデルを組み合わせ、弱点を補うための独自アルゴリズムを統合することで、本番環境の監視能力を大幅に高めるシステムを構築したのです。

 

 

Original Page: Robust Time Series Monitoring: Anomaly Detection Using Matrix Profile and Prophet

 

 




IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談はこちらのフォームからお気軽にお問い合わせください。

 

シェアする

Recent Posts