異常検知のモデルが「異常です」とだけ告げて、理由を何も語らない。運用者はその判断を信じきれず、結局は人間が一から確認し直す ―― 現場でよく起きる光景だ。さらに、新しく立ち上げた工程には学習用のデータがほとんどなく、深層学習モデルをそもそも訓練できない。データ不足と説明不能、この2つの壁に正面からぶつかったのが AAD-LLM(Russell-Gilbert et al., “Adaptive Anomaly Detection Using Large Language Models,” IEEE BigData 2024)である。
AAD-LLM の発想は大胆だ。異常検知を「言語タスク」に変換してしまう。時系列を言葉に直し、運用マニュアルや過去事例といったドメイン知識をプロンプトに書き込み、学習も微調整もしていない凍結 LLM に「これは異常か、理由とともに答えよ」と問う。本記事では、単に「ChatGPT にデータを投げる」のではない AAD-LLM の実際のパイプライン ―― 統計的工程管理(SPC)による前処理から、統計量のテンプレート注入、凍結 Llama 3 の推論、そして比較データの連続更新による概念ドリフト対応まで ―― をアーキテクチャのレベルで追う。
なぜこれを学ぶのか。応用先は2つある。ひとつは、ラベル付きデータが乏しい新規システムでも即座に動き、しかも運用者が納得できる説明を返す異常検知の作り方を理解すること。もうひとつは、本ブログのコンテキスト考慮型異常検知シリーズの中で、再構成や距離ではなく 言語による推論 で文脈を統合するという、まったく別系統のパラダイムを押さえることだ。

直感は「ベテラン技術者への電話相談」だ。「いまこういう状況で、こういうデータが出ているのですが、異常でしょうか」と尋ねると、ベテランは経験と知識をもとに「その状況なら正常だよ」「いや、それはおかしい、冷却系を確認して」と判断し、しかも なぜそう考えたかを言葉で説明 してくれる。AAD-LLM はこの判断と説明を、凍結 LLM で実現する。まず、従来手法と何が根本的に違うのかを見る。
パラダイムの転換 ― 数値タスクから言語タスクへ

従来の深層異常検知は「数値を入れると異常スコアという数値が出てくる」装置だった。大量の学習データで訓練する必要があり、新しいシステムには再学習やファインチューニングが要る。そして出力は数値スコアだけで、なぜ異常なのかの説明はない ―― ブラックボックスである。
AAD-LLM は問題そのものを 言語タスク に置き換える。状況とデータをテキストにして、学習していない凍結 LLM に渡し、判定と説明を自然言語で受け取る。学習データは不要(ゼロショット)で、ドメイン知識は文章でいくらでも統合でき、結果には理由がついてくる。この転換が、データ不足と説明不能の両方を一手に解く。とはいえ「ただ LLM に数列を見せる」だけでは精度は出ない。AAD-LLM の肝は、その前後を固める パイプライン にある。
パイプライン全体 ― 8つのコンポーネント

AAD-LLM のパイプラインは、上の図のように流れる。順に見ていこう。
- 入力時系列 $Q$:多変量のセンサー時系列 $Q \in \mathbb{R}^{N \times T}$ を受け取る($N$ = 変数の数、$T$ = 時刻数)。ここで重要なのは、$Q$ は $N$ 本の単変量系列 $Q_i\ (i \in N)$ に分解され、変数ごとに独立に処理される 点だ(チャネル独立)。多変量をまとめて1つのモデルに突っ込むのではなく、1変数ずつ「正常か」を見て、最後に束ねる。
- SPC 前処理:各 $Q_i$ に統計的工程管理の Moving Average Moving Range(MAMR)チャートを当て、正常動作の 管理限界 を引く(次節で詳述)。
- データ分割:時系列を比較データ $C_i$ と $P$ 個の重ならないクエリ窓 $Q_i^{(p)} \in \mathbb{R}^{P \times L}$($p \in P$、$L$ = 窓長)に分ける。
- 統計導出:各窓 $C_i$ と $Q_i^{(p)}$ から z-score と最大値 という、少数だが効く統計量を抽出する。生の数列をそのまま渡すのではなく、要約統計に落とすのがポイントだ。
- テンプレート注入とプロンプト構成:抽出した統計量を文章テンプレートに埋め込み、ドメイン知識(後述の CONTEXT)と合わせてプロンプトを組み立てる。
- 凍結 LLM 推論:バックボーンの言語モデル(Meta Llama 3 8B、命令調整済み)が、一切のチューニングなし にプロンプトを読んで判定する。
- 二値化:LLM の応答を異常 = 1 / 正常 = 0 の二値に写像する(後述の式 (4))。
- 比較データ $C_i$ の更新:異常と判定されなかったクエリ窓を $C_i$ に統合し、次の窓の判断基準を更新する。
論文自身が掲げるモデルフレームワーク図を引用しておく。先ほどの自作パイプライン図と同じ流れを、論文の記法 $(1)$〜$(5)$ で確認できる。

出典: Russell-Gilbert et al., “Adaptive Anomaly Detection Using Large Language Models,” IEEE BigData 2024 (arXiv:2411.00914), Fig. 4
図の番号は論文の処理段階に対応する。$(1)$ データセット $D$ から取り出した $Q$ を比較データ $C$ と窓 $Q^{(p)}$ に分割し、$(2)$ それぞれの統計量(z-score・最大値・正常範囲)をテキストテンプレートに注入する。$(3)$ そこへドメイン知識(専門家ルールを書いたテキストファイル)とタスク指示を足してプロンプトを作り、雪マークの付いた 凍結 LLM に通す。$(4)$ 出力 $x$ を二値化関数 $f(x)$ で $\{0,1\}$ に写し、$(5)$ 「異常なし」と出た窓だけを $C$ に統合して次の $Q^{(p)}$ へ進む。雪マークが「重みを一切更新しない」ことを表しており、学習が走るブロックはどこにも無い ―― これが AAD-LLM の骨格だ。
この $C_i$ から SPC・統計導出へ戻るループが、再学習なしで概念ドリフトに追従する仕掛けだ。なぜ深層学習モデルの代わりに、まず古典的な SPC を置くのか。次節で見る。
SPC 前処理 ― LLM に渡す前に「正常の物差し」を引く
LLM は微小な数値変化の検出が苦手で、数列だけを見せても精密な判定は難しい。そこで AAD-LLM は、LLM に渡す前に 統計的工程管理(SPC) で「正常とはこの範囲」という物差しを引いておく。使うのは Moving Average Moving Range(MAMR)チャートで、隣り合う点の差(移動範囲)$\bar{R}$ と平均 $\bar{X}$ から管理限界を定める。
$$ \begin{equation} UCL_X = \bar{X} + 2.66\,\bar{R}, \qquad LCL_X = \bar{X} – 2.66\,\bar{R} \end{equation} $$
係数 2.66 は、移動範囲から標準偏差を推定して 3 シグマ幅に対応させる定数だ($d_2 = 1.128$ の隣接2点移動範囲に対して $3/d_2 \approx 2.66$)。MAMR は2枚のチャートを使う。1枚目が上の 移動平均(X)チャート、2枚目が隣り合う点の差の大きさ(移動範囲)を監視する 移動範囲(mR)チャート で、後者の上限は
$$ \begin{equation} UCL_{mR} = 3.27\,\bar{R} \end{equation} $$
で与えられる($D_4 = 3.267$)。平均がふらつく「水準のずれ」を X チャートが、変動の急拡大を mR チャートが捉える、という役割分担だ。

図は、正常区間から推定した管理限界を時系列に重ねたものだ。値が上方の管理限界を突き抜けた点が、限界超えとして拾われている。論文自身の SPC 図も引用しておく。

出典: Russell-Gilbert et al., IEEE BigData 2024 (arXiv:2411.00914), Fig. 3
上段 (A) が移動平均チャート、下段 (B) が移動範囲チャートだ。赤の点線が UCL、緑が LCL/中心線で、縦の (1)(2) の線は時系列を3つの領域 ―― 立ち上がりで管理外れになる区間(1 以前)、安定した正常区間(1〜2)、緩やかにトレンドする区間(2 以降)―― に区切っている。AAD-LLM はここで 「管理外れ」と判定された点を異常として除去し、SPC をもう一度かけ直す(2パス SPC)。1回目で拾った極端値が管理限界そのものを歪めるのを避けるためで、こうして残った $Q_i$ を「安定した工程 = 正常」とみなして比較データ $C_i$ の初期化に使う。この 「正常の範囲」と「逸脱の度合い(z-score・最大値)」 こそが、次に LLM へ渡す材料になる。生の数列ではなく、SPC で意味づけした統計量を渡すからこそ、LLM は「正常範囲に対してどれだけ外れているか」を言葉で推論できる。では、その渡し方 ―― プロンプトの構造を見よう。
プロンプトの3層構造 ― 命令・文脈・データ

AAD-LLM のプロンプトは3層からなる。
- 命令(System):LLM の役割を定義する。「あなたは異常検知の専門家です。以下の文脈とデータから異常の有無を判定し、理由を述べよ」といった指示だ。
- CONTEXT(文脈):キャッシュしておいた ドメイン知識 を自然言語で書き込む。仕様範囲、運用モード、過去の類似事例、機器の経年状態など、入れられる情報に制約はない。ここが従来手法には無かった「運用知識の統合口」だ。
- DATA(データ):統計導出を埋め込んだテンプレート。たとえば「Temperature 1 は最大 ⟨val⟩、z-score ⟨val⟩、正常範囲 ⟨val⟩」のように、SPC と統計導出で得た数値をテキストに流し込む。
ここで z-score を渡すのが効いている。平均と標準偏差を別々に渡すと LLM は内部で割り算をして「何σ外れているか」を計算しなければならない。あらかじめ $z = (x-\mu)/\sigma$ に畳んで渡せば、LLM は計算ではなく 推論(この z は大きいか、文脈的に許容されるか) に集中できる。LLM が苦手な数値演算を前処理で肩代わりし、得意な言語推論だけを担わせる、という分業だ。論文に載っている実際のプロンプト例を引用する。

出典: Russell-Gilbert et al., IEEE BigData 2024 (arXiv:2411.00914), Fig. 5
赤字の <cached info> と <val> がプレースホルダで、<cached info> にはキャッシュ済みのドメイン知識が、<val> には SPC・統計導出で算出した数値が実行時に流し込まれる。注目すべきは、各変数 $Q_i$ は独立に処理されるのに、プロンプトには $N$ 変数すべてのテンプレートが並んで入る点だ。変数ごとの統計はバラバラに作りつつ、最終判断は LLM に全変数を一望させる ―― この「独立処理 + 統合判断」の構造が、のちの二値化(変数間の異常の相関を見る)につながる。
新しい運用条件が現れても、プロンプト(特に CONTEXT)を書き換えるだけ で対応でき、モデルの再学習はいらない。この柔軟さが、次の概念ドリフト対応にも直結する。
二値化関数 ― 「相関した異常」だけを異常と呼ぶ
LLM の出力をどう $\{0,1\}$ に落とすか。ここに AAD-LLM の地味だが重要な工夫がある。各変数 $Q_i$ を独立に見ると、1つの変数だけが一瞬外れることは正常な工程でも珍しくない。これを片端から「異常 = 1」にすると誤検知だらけになり、現場では 不要なシャットダウンを連発 してしまう。そこで二値化関数 $f$ は、出力 $x$ の中の異常が ドメイン知識上で互いに相関しているとき だけ 1 を返す。
$$ \begin{equation} f(x) = \begin{cases} 1, & \text{anomalies in } x \text{ are correlated} \\ 0, & \text{otherwise} \end{cases} \end{equation} $$
たとえば「圧力が跳ね、かつ温度差も同時にずれた」のように、因果的に結びつく複数変数が同時に外れたときに初めて異常と確定する。単独変数の孤立した逸脱は 1 にしない。この相関判定こそ、プロンプトに $N$ 変数すべてを並べて入れた理由だ ―― LLM が変数間の関係を一望できなければ「相関しているか」を言葉で判断できない。二値化は use-case 依存で差し替え可能な設計になっており、ここに運用ポリシー(どこまで保守的にシャットダウンするか)を織り込める。
概念ドリフト対応 ― 比較データを連続更新する
実システムでは、正常の姿そのものがゆっくり変わっていく(概念ドリフト)。センサーの経年変化や運用条件の移行がその例だ。従来手法はこれに再学習で対応していたが、AAD-LLM は 比較データ $C_i$ の連続更新 という単純なフィードバックループで吸収する。
まず初期化だ。各変数 $i$ について、2パス SPC で安定とみなした $Q_i$ の 最初の窓 を比較データ $C_i \in \mathbb{R}^{1 \times L}$ とする(窓長 $L$ の1本)。これが「正常の出発点」になる。そして仕組みはこうだ。各クエリ窓 $Q_i^{(p)}$ を判定し、異常でなければ その窓を直前までの窓列に連結して $C_i$ を更新する。異常と判定された窓は連結しない。これにより、$C_i$ が表す「正常の基準」は常に正常データだけで構成され($C_i$ は “constantly evolving” と論文は表現する)、緩やかなドリフトには追従しつつ、本物の異常には引きずられない。なお $C_i$ は新しい時系列インスタンス $Q$ ごとに初期化し直される ―― 別の装置・別の運転には別の「正常」を立て直す、という設計だ。

図は、緩やかに上昇するドリフト(正常)に突発的な異常を重ねたデータで、この更新ルールを動かしたものだ。正常ベースライン(比較データ $C_i$)は緩やかなドリフトにぴたりと追従していく一方、突発異常の区間ではその点を統合しないためベースラインは平らなまま留まり、異常を異常として浮かび上がらせている。「正常と判断したものだけを基準に取り込む」 ―― この一手で、再学習なしに正常の物差しを更新し続けられる。SPC が物差しの目盛りを引き、$C_i$ がその目盛りを時間とともに引き直す、という役割分担だ。では、これだけお膳立てして、検知性能はどうなのか。
検知性能 ― 数字を正直に見る
論文はプラスチック製造の run-to-failure データ(故障までの65時間)と、産業テストベッドの公開データ SKAB(バルブ)で評価している。

左図が AAD-LLM 自身の指標だ。プラスチック製造では Accuracy 70.66%・F1 77.02%・適合率 88.15%・再現率 68.39% と、適合率が高く実用的な水準を示す。一方 SKAB では Accuracy 58.43%・F1 55.58%(適合率 46.74%・再現率 68.25%)と振るわない。右図の SKAB の F1 ランキングを見ると、AAD-LLM は 11 手法中 8 位で、最上位の LSTMCaps(0.74)や MSET(0.73)に届かず、F1 は 0.56 にとどまる(それでも Isolation Forest の 0.40 は上回る)。
論文 Table II の SKAB 全ランキングを並べると立ち位置が明確になる。FAR(False Alarm Rate、誤報率)・MAR(Missed Alarm Rate、見逃し率)も併記されている。
| 順位 | 手法 | F1 | FAR(%) | MAR(%) | 訓練不要 | マルチモーダル |
|---|---|---|---|---|---|---|
| 1 | LSTMCaps | 0.74 | 21.5 | 18.74 | × | × |
| 2 | MSET | 0.73 | 20.82 | 20.08 | × | × |
| 3 | LSTMCapsV2 | 0.71 | 14.51 | 30.59 | × | × |
| 4 | MSCRED | 0.70 | 16.2 | 30.87 | × | × |
| 5 | Vanilla LSTM | 0.67 | 15.42 | 36.02 | × | × |
| 6 | Conv-AE | 0.66 | 5.58 | 46.05 | × | × |
| 7 | LSTM-AE | 0.65 | 14.59 | 39.42 | × | × |
| 8 | AAD-LLM | 0.56 | 47.6 | 31.7 | ○ | ○ |
| 9 | LSTM-VAE | 0.56 | 9.2 | 54.81 | × | × |
| 10 | Vanilla AE | 0.45 | 7.55 | 66.57 | × | × |
| 11 | Isolation Forest | 0.40 | 6.86 | 72.09 | × | × |
表で目を引くのは、AAD-LLM だけが 訓練不要かつマルチモーダル の列で ○ になっている点だ。他の全手法は SKAB で訓練を要する。一方で FAR 47.6% は突出して高く、誤報が多い ―― 論文は、最後の入力系列で LLM が z-score の大小比較を誤った ことが効いたと分析しており(その系列で 84.2% から 42.1% へ精度が落ちた)、微小な数値差の比較が LLM の弱点であることを正直に示している。
ここを誤魔化さないことが大事だ。AAD-LLM は精度で既存手法を打ち負かす手法ではない。論文自身が、性能よりも 訓練不要・転移性・説明性・マルチモーダル統合 を優先すると明言している。微小な数値変化の検出が苦手、推論に数秒〜数十秒かかりリアルタイム監視に不向き、API 利用ではコストがかさむ ―― といった弱点も率直に挙げられている。だからこそ、この手法の価値は別の軸で測る必要がある。最後にその立ち位置を確認する。
位置づけ ― 性能より転移性・適応性・説明性

検知精度を横軸、転移性・説明性・ラベル不要性を縦軸に取ると、AAD-LLM の立ち位置がはっきりする。従来の深層手法(LSTMCaps・MSET)は精度は高いが、学習データを要し説明もできない。AAD-LLM は精度こそ中位だが、学習不要のゼロショットで即座に新規システムに適用でき、判定理由を自然言語で説明し、数値もテキストも画像も同じ枠組みで扱える。
実運用では、全データ点を LLM に判定させるのではなく、まず従来の数値的手法で一次スクリーニングし、疑わしい点だけを LLM に回す ハイブリッド構成が現実解になる。AAD-LLM は単独で君臨する手法ではなく、既存の検知器に「文脈理解と説明」という層を足す部品として読むのが正しい。
まとめ
AAD-LLM のエッセンスを整理する。
- 言語タスクへの変換:異常検知を「状況とデータを言葉で渡し、判定と説明を言葉で受け取る」言語タスクに置き換える。学習データ不足と説明不能を同時に解く。
- パイプライン:多変量 $Q$ を $N$ 本の単変量に分けて独立処理(チャネル独立)→ 2パス SPC(MAMR の X/mR 管理限界)→ 窓分割 → 統計導出(z-score・最大値)→ テンプレート注入 → 凍結 Llama 3 8B 推論 → 二値化 → 比較データ $C_i$ 更新。生数列ではなく SPC で意味づけした統計量を渡すのが要。z-score に畳んで渡すことで LLM を計算から解放し推論に集中させる。
- プロンプト3層:命令(役割定義)・CONTEXT(ドメイン知識)・DATA(統計テンプレート)。各変数は独立処理しつつプロンプトには $N$ 変数すべてを並べ、最終判断で一望させる。文脈の更新だけで新条件に対応でき、再学習がいらない。
- 二値化 $f(x)$:単独変数の孤立した逸脱では 1 にせず、変数間で異常が相関したとき だけ異常と確定(式 4)。不要なシャットダウンを抑える use-case 依存の設計。
- 概念ドリフト対応:安定 $Q_i$ の最初の窓を $C_i \in \mathbb{R}^{1 \times L}$ に初期化し、正常判定したウィンドウだけを連結する連続更新で、ドリフトには追従し異常には引きずられない正常基準を保つ($Q$ ごとに再初期化)。
- 性能の正直な評価:精度では既存手法に劣る(SKAB で F1 0.56、11 手法中 8 位)。価値は 訓練不要・転移性・説明性・マルチモーダル にあり、一次スクリーニングと組むハイブリッド運用が現実的。
「文脈を言葉で与え、判定の理由まで言葉で受け取る」という AAD-LLM の発想は、文脈の扱い方という観点で本シリーズの他手法と好対照だ。外部文脈を数値特徴として与える Time-CAD、運転条件をデータ内で分離する TAAD、潜在モードを相関構造から発見する TICC と読み比べると、「文脈」を 言語で渡す / 分離する / 発見する という流儀の幅が見えてくるはずだ。


