異常検知とは?意味・仕組みと代表的な手法の違い(2026年11月時点)

異常検知(いじょうけんち)

Anomaly detection / 外れ値検出 / 異常検出

異常検知とは、ふだんのデータと違う珍しいデータ(異常、外れ値)を見つける機械学習の使い方のこと。異常の例は集めにくいため、正解のラベルを使わない教師なしの方法でも学べる。

要するに

  • 不正な決済、設備のセンサー、製品の外観検査、システムのログの監視に使う
  • 代表的な手法は Isolation Forest、LOF、One-Class SVM、再構成誤差
  • しきい値で誤検知と見逃しの釣り合いが変わる。評価は正解率より適合率と再現率で見る

最終確認

暗い面に4×4に並べた白い球と、そのうちひとつだけのすりガラスの球、その足もとを囲む紫の光
目次7

ひとことで言うと

異常検知(Anomaly detection)は、ふだんのデータと違う珍しいデータ(異常、外れ値)を見つける機械学習の使い方だ。Google の機械学習の用語集は外れ値を特定するプロセスと定義している。外れ値検出、異常検出とも呼ばれる。

身近な例は商品の返品の数字だ。Google Cloud のドキュメントは、ある商品の返品率がその商品のふだんの水準より大きく上がっていれば、商品の欠陥や不正行為の可能性を示すことがあると書いている。

異常の例は集めにくい。Google の機械学習の講座は、クレジットカードの取引のデータでは、不正な購入が全体の0.1%に満たないことがあると書く。Google Cloud のドキュメントは、どんなデータが異常か分からないときや、学習に使うラベル付きのデータがないときは、教師なし学習で異常検知ができるとしている。異常のラベルがすでにあるなら、ロジスティック回帰やランダムフォレストなどの教師ありのモデルも使える。

仕組み

機械学習のライブラリ scikit-learn(1.9.1)のユーザーガイドと例をもとにまとめると、教師なしの異常検知はおおまかに次の順になる。

  1. ふだんのデータを集め、特徴量(モデルに入れる値)を整える。前処理は手法で違う。scikit-learn の例は、カテゴリの列を、木を使う Isolation Forest には順番の番号に、近くの点を使う LOF には列を分ける形(ワンホット)に変えている。
  2. ふだんのデータが集まっている範囲を学ぶ。外れ値がまざった学習データでは、データがもっとも集まっている範囲に合わせ、外れた点は無視する。
  3. 新しいデータに、異常の度合いを表すスコアを付ける。
  4. しきい値でスコアを分ける。scikit-learn では、正常は1、外れ値は-1と出る。このしきい値は contamination(学習データにまざる外れ値の割合)という設定で調整できる。

ガイドによると、学習データに外れ値がまざっている前提の外れ値の検出では、外れ値はデータの少ない場所にあると考える。そのため、異常どうしが集まって密なまとまりを作ると見つけにくい。学習データに外れ値がない新規性の検出なら、異常が集まっていても、ふだんのデータの少ない場所にあれば見つけられる。

代表的な手法

Isolation Forest は、特徴量を1つと、その最大値と最小値のあいだの区切りをどちらもランダムに選び、データを分け続ける。1つの点が切り離されるまでの区切りの回数を、たくさんの木で平均する。原論文は2008年の Liu、Ting、Zhou の論文だ。ガイドは、ランダムに分けると異常の点は短い回数で切り離されると説明している。scikit-learn は次元の多いデータで効率よく外れ値を探す方法として紹介している。

局所外れ値因子(LOF)は、ある点のまわりの密度を、近くの k 個の点のまわりの密度と比べる。近くの点より密度がずっと低い点を異常とする。k は20がふつうはうまくいくとし、外れ値が10%を超えるときは大きくする(ガイドの例では35)。

One-Class SVM は、Schölkopf らが新規性の検出のために提案した手法で、ふだんのデータの分布を囲む境界を学ぶ。境界の外に出た新しいデータを異常とする。ガイドは、この手法は外れ値に左右されやすく、外れ値がまざったデータの外れ値の検出はあまりうまくいかないと書いている。

オートエンコーダは、入力を小さくまとめてから組み立て直すモデルだ。ふだんのデータで学ばせると、組み立て直したときのずれ(再構成誤差)が大きいものを異常とみなせる。主成分分析(PCA)でも、同じように再構成の誤差を平均二乗誤差で測って、異常の手がかりにできる。

画像の異常検知では、2021年6月の PatchCore の論文が、傷のない部品の画像だけでモデルを作る問題を扱った。論文によると、成績のよい方法は、画像認識のモデルが出す特徴と、外れ値の検出のモデルを組み合わせている。PatchCore は傷のない画像の細かい区画ごとの特徴を集めた記録(メモリバンク)を使う。

異常検知と分類・クラスタリングの違い

異常検知(教師なし) 分類(教師あり) クラスタリング
学ぶ材料 ふだんのデータが中心で、ラベルがなくてもよい 異常と正常の正解を付けたデータ ラベルのないデータ
出すもの 異常の度合いのスコアと、しきい値で分けた正常か異常か どのクラスに入るか 似たものどうしのグループ
向く場面 異常の例が少ない、どんな異常か分からない 異常のラベルがすでにそろっている データのまとまりを知りたい

クラスタリングも異常検知に使える。たとえば k 平均法では、各クラスタの中心までの正規化した距離のうち、もっとも短いものをもとに異常を見つける方法がある。

仕事でどう関係するか

決済や返品の不正を探すとき

不正の例は全体のごく一部なので、まず不正のラベルがどれだけあるかを確かめる。ラベルがほとんどなければ教師なしの手法、ラベルがそろっていれば教師ありのモデルが候補になる。

プロンプト
添付の取引データ(金額、時刻、店舗、支払い方法)から、ふだんと違う取引を見つける方法を提案してください。
不正と確認済みの取引は全体で数十件しかありません。教師なしの方法と、確認済みの取引を使った評価の方法を分けて書いてください。

設備のセンサーの数字を見張るとき

2016年の EncDec-AD の論文は、エンジンや車両、航空機には、機械の動きと状態をとらえる多くのセンサーが付いていると書く。論文の手法はふだんの時系列を組み立て直すことを学び、再構成誤差で異常を見つける。3つの公開データと2つの実際のエンジンのデータで試し、短いもので長さ30、長いもので長さ500の時系列から異常を見つけられたと報告した。

製品の外観を検査するとき

PatchCore の論文は、傷のある部品を見つけることを大規模な工業生産の重要な要素と書いている。広く使われる評価用のデータ MVTec AD で、画像単位の AUROC(1に近いほど異常と正常をよく分けられる指標)は最高で99.6%だった。次に成績のよい方法と比べて誤りを半分より減らしたとし、少ない枚数で学ぶ場合でも競える結果だったと報告している。ただし、99.6%は MVTec AD での数字で、自社の製品の画像で同じになるとは限らない。

システムのログを見張るとき

2021年3月の LogBERT の論文は、システムを悪意のある攻撃や不具合から守るために、オンラインのシステムの異常な出来事を見つけることが欠かせないと書く。ふだんのログの並びのパターンを2つの自己教師ありの学習課題で学び、そこから外れたものを異常とする。ネットワークの異常では、scikit-learn の評価の例が、閉じたネットワークに人の手で攻撃を入れて作ったデータ KDDCup99 の一部(異常が約3%)を使っている。

注意点と限界

contamination を使うと、しきい値は異常の割合の見込みで決まる。Isolation Forest の contamination は、初期の設定(auto)では原論文と同じ方法でしきい値を決める。0より大きく0.5以下の割合を指定すると、学習データのうちその割合の数が外れ値になるように、しきい値が決まる。見込んだ割合が実際より大きければ、ふだんのデータまで異常とされる。

異常と判定する基準をゆるめると、見逃しは減りやすいが、誤検知が増えやすい。適合率と再現率の意味は分類のページで説明している。Google の講座は、誤検知のコストが高ければ偽陽性率の低いしきい値を選ぶことを勧め、見逃しのコストが高ければ真陽性率を最大にするしきい値が適している可能性があるとしている。scikit-learn の解説によると、しきい値を少し変えただけで、再現率はほとんど上がらないのに適合率が大きく下がることがある。

異常が少ないデータでは、正解率で評価しない。Google の講座は、正解率はクラスの数が偏ったデータで学ばせたモデルの評価にはふつう向かないと書く。ROC 曲線と AUC はクラスの数がつり合っているときの比較に向き、偏っているときは、適合率と再現率の曲線とその面積が、性能を比べやすい形で示せるとしている。

学習にラベルを使わなくても、評価には正解が要る。scikit-learn の例は、ラベルなしで学ばせたあとで正解のラベルを使って ROC 曲線を描いている。近くの点の数を調整したあとの結果は、4つのデータのうち2つでほぼ同じだった。住宅の価格のデータでは LOF が Isolation Forest よりかなりよく、ネットワークのデータでは Isolation Forest が少しよかった。LOF は近くの点の数 k で結果が大きく変わり、合う前処理もデータによって違う。

速さも違う。LOF はすべての点どうしの距離を計算するので、データが大きいと使えないほど時間がかかることがある。Isolation Forest は、データが多いと LOF よりずっと速く学習する傾向がある。ガイドは、次元の多いデータや、ふだんのデータの分布に何も前提を置かない外れ値の検出はとても難しいとも書いている。

よくある質問

異常検知と外れ値検出は同じものか

ほぼ同じ意味で使われる。2020年のレビュー論文は異常検知を外れ値検出や新規性検出とも呼ぶと書いている。scikit-learn は、学習データに外れ値がまざるかどうかで、外れ値の検出と新規性の検出を分けている。

なぜ教師なしの方法を使うのか

異常の例が少なく、どんな異常が起きるかも前もって分からないことがあるからだ。Google Cloud のドキュメントは、そうした場合や、ラベル付きのデータがない場合に教師なしの方法を使えるとしている。異常のラベルがそろっていれば、教師ありのモデルも使える。

どの手法から試せばよいか

表のデータなら、Isolation Forest と LOF が候補になる。scikit-learn は比べた例のデータで2つともそこそこうまくいったと書いている。データが大きいなら、LOF より学習が速い傾向がある Isolation Forest が扱いやすい。

しきい値はどう決めればよいか

誤検知と見逃しのどちらのコストが高いかで決める。異常の割合の見込みを contamination に入れる方法もあるが、見込みが外れれば判定もずれる。確認済みの異常が少しでもあれば、それを使って適合率と再現率を確かめる。

関連する用語

出典

公開
執筆
TRAIL編集部(編集方針)