時系列の異常には色々なタイプがある。緩やかに周期が乱れる季節異常、一瞬だけ形が崩れる Shapelet 異常、全体のトレンドがずれる異常 ―― これらは時間領域(値の波形)だけを見ていると、互いに紛れて捉えにくい。ところが 周波数領域 に移すと、異常タイプごとに「どの周波数帯域に現れるか」がくっきり分かれる。季節異常は低周波、Shapelet 異常は高周波、という具合だ。
この観察を出発点に、周波数領域で多変量時系列の異常を捉えるのが CATCH(Wu et al., “CATCH: Channel-Aware Multivariate Time Series Anomaly Detection via Frequency Patching,” ICLR 2025)である。CATCH は時系列を FFT で周波数領域に移し、周波数軸をパッチ(帯域)に分割 して細粒度にモデル化する。さらに、帯域ごとにどのチャネル(変量)どうしが相関すべきかを適応的に発見する Channel Fusion Module を備える。本記事では、周波数パッチ化・チャネル融合・二重スコアという要素を、アーキテクチャと決定的なデモで掘り下げる。
なぜこれを学ぶのか。応用先は2つある。ひとつは、時間領域では見えにくい周期・形状の異常を周波数領域で捉える設計を理解すること。もうひとつは、本シリーズで扱ってきた時間・関係ベースの異常検知に、周波数 という直交した軸を加えることだ。

まず直感だ。左は季節(周期)異常で、波の周期が乱れる ―― これは 低周波帯域 に現れる。右は Shapelet(形状)異常で、一瞬だけギザギザが乗る ―― これは 高周波帯域 に現れる。時間波形だけだと両者は「ちょっと乱れた」としか見えないが、周波数で見れば別々の帯域に分離できる。この性質をどう生かすか。鍵は周波数のパッチ化だ。
周波数パッチ化 ― 帯域を細かく分けて平等に扱う
CATCH はまず入力 $X \in \mathbb{R}^{N \times T}$($N$ チャネル、長さ $T$)を FFT で周波数領域に変換し、実部 $X^R$ と虚部 $X^I$ を保つ。そして 周波数軸をパッチ(帯域)に分割 する。
$$ \begin{equation} X^R, X^I = \mathrm{FFT}(X), \qquad \{P^1, \dots, P^L\} = \mathrm{Patching}(X^R, X^I) \end{equation} $$

各パッチ $P^i$ は狭い周波数帯域に対応し、実部と虚部を結合して持つ。なぜわざわざパッチに分けるのか。周波数領域は長尾分布 だからだ ―― 低周波成分はエネルギーが大きく、高周波成分は小さい。周波数全体を粗く一括で再構成すると、エネルギーの大きい低周波に引っ張られて、高周波帯域に潜む異常を見落とす。周波数軸をパッチに刻めば、各帯域を平等に細粒度でモデル化でき、どの帯域の異常も拾える。パッチ化した各帯域は、次に「どのチャネルどうしを見るべきか」を考える。
Channel Fusion Module ― 帯域ごとに最適なチャネル相関を見つける
多変量時系列では、チャネル(変量)間の相関をどう扱うかが難しい。全チャネルを独立に見る(Channel Independence)と相関情報を捨てるし、全チャネルを一律に結合する(Channel Dependence)と無関係なチャネルのノイズまで混ぜてしまう。CATCH の Channel Fusion Module(CFM) は、その中間 ―― 周波数帯域ごとに最適なチャネル相関 を適応的に発見する。

CFM は2つの部品からなる。ひとつは マスク生成器 で、各パッチ $P^i$ から「どのチャネル対を結ぶべきか」を表す二値マスク $\mathcal{M}^i \in \{0,1\}^{N \times N}$ を作る。確率行列をシグモイドで出し、ベルヌーイ再サンプリングで二値化する(対角は常に1)。もうひとつは、そのマスクを使う Channel-Masked Transformer だ。
masked-attention ― 無関係なチャネルの注意を遮断する
CFM の核は、マスクを自己注意に適用して 無関係なチャネル間の注意を強制的に切る ことだ。通常の注意スコア $\mathcal{T}^i = Q^i (K^i)^\top$ にマスクをかける。
$$ \begin{equation} \mathcal{S}^i = \mathcal{T}^i \odot \mathcal{M}^i + (1 – \mathcal{M}^i) \odot (-\infty) \end{equation} $$
マスクが 0 のチャネル対は注意スコアを $-\infty$ にするので、softmax を通すとほぼ 0 になる ―― つまり情報交換が遮断される。

左が生の注意スコア(全チャネルが結合している)、中央がマスク(関連するチャネル対だけ 1)、右がマスク適用後だ。マスクによって、本来結ぶべきでないチャネル間の注意が消え、関連するチャネルだけがクラスタとして情報交換 する。マスク生成器が「正しいマスク」を学べるかが鍵になるが、それを支えるのが次の最適化だ。
bi-level 最適化 ― 相関の改善とモデル学習を交互に回す
マスク(チャネル相関)とモデル(再構成)を同時に学ぶのは難しい。CATCH は 二段階(bi-level)の多目的最適化 で、両者を交互に磨き上げる。

外側ループでマスク生成器 $\theta_{mask}$ を更新してチャネル相関を改善し、内側ループでモデル $\theta_{model}$ を更新して、その相関のもとで再構成を最適化する。「相関を改善 → その相関でモデル最適化 → 改善されたモデルで相関を再評価」という反復で、徐々に適切な相関に収束する。相関の発見には2つの損失が効く。クラスタリング損失 が関連チャネル対の注意スコアを高め、正則化損失($\frac{1}{N}\lVert I – \mathcal{M}^i \rVert_F$)がチャネル結合の爆発(なんでも繋いでしまうこと)を抑える。総損失は次の通りだ。
$$ \begin{equation} \mathcal{L} = \mathrm{RecLoss}^{time} + \lambda_1 \mathrm{RecLoss}^{freq} + \lambda_2 \mathrm{ClusteringLoss} + \lambda_3 \mathrm{RegularLoss} \end{equation} $$
時間領域と周波数領域の両方で再構成を学ぶ点に注目してほしい。この二本立てが、推論時の異常スコアにも効いてくる。
二重スコア ― 時間(点)と周波数(区間)

CATCH の異常スコアは、時間領域と周波数領域の再構成誤差を足し合わせる。
$$ \begin{equation} \mathrm{score} = \underbrace{\lVert X – X’ \rVert_F^2}_{\text{時間}(\ell_2,\,\text{点異常})} + \lambda \cdot \underbrace{\big(\lVert X^R – X’^R \rVert_1 + \lVert X^I – X’^I \rVert_1\big)}_{\text{周波数}(\ell_1,\,\text{区間異常})} \end{equation} $$
時間領域は $\ell_2$ ノルムで 点的な異常 に敏感に、周波数領域は $\ell_1$ ノルムで 区間(部分)の異常 に敏感になる。両者を組み合わせることで、瞬間的なスパイクも、ある区間にわたる周期・形状の崩れも、どちらも捉えられる。この相補性をデモで確かめよう。
周波数で区間異常を捉える ― デモ
正常では一定周期(周期50)の波が続く時系列を作り、ある区間だけ 周期を50から20に変える(振幅は同じに保つ)。値の大きさは正常範囲のままで、変わったのは「周期=周波数」だけだ。時間スコアと周波数スコアを並べる。

上段が信号で、異常区間でも振幅は正常と変わらない。中段の 時間スコア(点ごとの差)は、周期が変わっても各点の値は正常範囲なので、全体に小さく反応するだけで区間をうまく切り出せない。下段の 周波数スコア(主要周波数の正常からのズレ)は、周期の変化を周波数のズレとして 明確に区間として捉える。時間領域では紛れる周期異常が、周波数領域でははっきり浮かぶ ―― これが CATCH が周波数にこだわる理由だ。実データではどう効くのか。
評価 ― 多様な異常タイプで最先端
論文は10の実データセットと12の合成データセットで評価し、ModernTCN・iTransformer・DCdetector・TimesNet・Anomaly Transformer など15手法と比較している。評価指標には、区間異常を公平に測る Affiliated-F1 と、閾値非依存の AUC-ROC を使う。

Affiliated-F1 で見ると、CATCH は GECCO 0.908・MSL 0.740・SMD 0.847・NYC 0.994 と、iTransformer や Anomaly Transformer を上回る。合成データでは Contextual・Global・Seasonal・Shapelet・Trend・Mixture という異常タイプ別に評価され、多様な異常に強いことが示されている。アブレーションでも、周波数損失を外すと −5.6%、パッチ化を外すと −4.3%、チャネル独立のみにすると −7.5%(平均 AUC-ROC)と、周波数パッチ化とチャネル相関発見がそれぞれ効いていることが確かめられている。
なお、周波数領域は周期的・区間的な異常に強い一方、FFT が窓全体の大域変換である分、ごく短い局所イベントの時刻特定は時間領域スコアに頼る部分が残る。CATCH が時間スコアを併用するのは、この補完のためでもある。
まとめ
CATCH のエッセンスを整理する。
- 周波数で見る理由:異常タイプごとに現れる周波数帯域が違う(季節=低周波、Shapelet=高周波)。時間領域で紛れる異常も周波数領域では分離できる。
- 周波数パッチ化:FFT で周波数領域に移し、周波数軸をパッチ(帯域)に分割。長尾分布で見落とされがちな高周波帯域も平等に細粒度モデル化する。
- Channel Fusion Module:帯域ごとに patch-wise マスク を生成し、masked-attention で無関係チャネルの注意を遮断。チャネル独立と依存の中間を適応的に選ぶ。
- bi-level 最適化:マスク(相関)の改善とモデル(再構成)の学習を交互に回し、クラスタリング損失+正則化損失で適切な相関に収束させる。
- 二重スコア:時間領域($\ell_2$、点異常)と周波数領域($\ell_1$、区間異常)を組み合わせ、多様な異常タイプを捉える。10実+12合成データで最先端。
「周波数で異常を見る」という CATCH の発想は、関係の崩壊を見る SARAD・GCAD や、相関構造でレジームを発見する TICC とは直交した軸を持ち込む。時間・関係・因果・周波数という「異常をどの空間で測るか」の選択肢が揃うと、多変量時系列異常検知の設計地図がいっそう立体的になる。


