統計ロードマップ
2026-04-30·実装·⏱ 約 4

異常検知 入門 ─ 不正・故障・侵入を見つける統計と ML

クレジットカード不正・設備故障・ネットワーク侵入。異常検知のアプローチ(統計 / 距離 / 密度 / 再構成 / 分類)を実例とコードで解説します。

異常検知(Anomaly Detection) は、不正検出 ・ 設備保全 ・ サイバーセキュリティ ・ 医療診断などで核となる ML タスク。教師ありの分類問題と違い、異常ラベルが極端に少ない or 未知 という特殊性があります。

5 つのアプローチ

  1. 統計的手法: Z-score, Tukey の箱ひげ図
  2. 距離ベース: k-NN, LOF
  3. 密度ベース: ガウス混合 ・ KDE
  4. 再構成ベース: PCA, Autoencoder
  5. 分類ベース: Isolation Forest, One-Class SVM

1. 統計的手法 ─ シンプルで強い

Z-score 法
import numpy as np

def z_score_anomaly(x, threshold=3):
    z = np.abs((x - x.mean()) / x.std())
    return z > threshold

# データの 0.27% が異常としてフラグ(threshold=3 の場合)

2. Isolation Forest ─ 実務の定番

ランダムに分岐していく木を多数作り、少ない分割で孤立するデータ点が異常 という直感。高速・高次元データでも動く。

scikit-learn で Isolation Forest
from sklearn.ensemble import IsolationForest

clf = IsolationForest(contamination=0.01, random_state=42)
clf.fit(X_train)

pred = clf.predict(X_test)  # 1 = 正常, -1 = 異常
scores = clf.score_samples(X_test)  # 連続スコア

3. Autoencoder ─ 再構成誤差で検出

正常データだけで訓練 した Autoencoder は、正常を上手く再構成できるが、異常は誤差が大きくなる ─ この差を異常スコアに。

PyTorch で簡易 Autoencoder
import torch.nn as nn

class AE(nn.Module):
    def __init__(self, dim):
        super().__init__()
        self.enc = nn.Sequential(nn.Linear(dim, 32), nn.ReLU(), nn.Linear(32, 8))
        self.dec = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, dim))

    def forward(self, x):
        return self.dec(self.enc(x))

# 学習: 正常データで MSE 最小化
# 推論: x と reconstruct の MSE が大きいほど異常

4. 時系列の異常検知

  • Prophet: トレンド + 季節性 + 残差で点異常を検出
  • LSTM Autoencoder: 系列再構成の誤差
  • Matrix Profile: 部分系列の最近傍距離
  • ARIMA + 残差検定: 古典統計手法

評価が難しい

正常 99.9% ・ 異常 0.1% のような極端な不均衡が普通。Accuracy は 99.9% でも全部正常と予測すれば達成可能 なので無意味。

  • Precision-Recall 曲線 / AUC: クラス不均衡に強い
  • F1 / F2 スコア: Recall を重視するなら F2
  • Confusion Matrix: 偽陽性 ・ 偽陰性のコストを別々に評価

実務シナリオ

  • クレジットカード不正検出: トランザクションのリアルタイム判定
  • 設備保全: センサー値で故障予兆検知
  • ネットワーク侵入検知: トラフィックパターンの異常
  • 医療診断補助: X 線・MRI の病変領域検出
  • ログ監視: SaaS の障害早期発見

学習リソース

  • [scikit-learn 入門](/blog/sklearn-introduction)
  • [統計検定 2 級 教科書](/textbook/grade-2)
  • [MLOps 基礎](/blog/mlops-basics)
  • [Pandas Tips](/blog/pandas-tips-for-ml)
Related Articles

関連記事