2026-04-30·実装·⏱ 約 4 分
異常検知 入門 ─ 不正・故障・侵入を見つける統計と ML
クレジットカード不正・設備故障・ネットワーク侵入。異常検知のアプローチ(統計 / 距離 / 密度 / 再構成 / 分類)を実例とコードで解説します。
異常検知(Anomaly Detection) は、不正検出 ・ 設備保全 ・ サイバーセキュリティ ・ 医療診断などで核となる ML タスク。教師ありの分類問題と違い、異常ラベルが極端に少ない or 未知 という特殊性があります。
5 つのアプローチ
- 統計的手法: Z-score, Tukey の箱ひげ図
- 距離ベース: k-NN, LOF
- 密度ベース: ガウス混合 ・ KDE
- 再構成ベース: PCA, Autoencoder
- 分類ベース: 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
関連記事
- 2026-04-30実装OpenAI API 実装入門 ─ Chat / Embeddings / Function CallingOpenAI API を使ったプロダクション開発の基礎。Chat Completion・Embedding・Function Calling・ストリーミング・コスト管理まで実装パターンを網羅。
- 2026-04-30実装Vercel で AI アプリをデプロイする ─ Next.js + AI SDK 入門Vercel にデプロイする最短ルート。Next.js の AI SDK + AI Gateway で OpenAI/Claude を統合し、ストリーミングチャット UI を 1 時間で公開する手順。
- 2026-04-30実装Streamlit で 1 時間で ML デモアプリ ─ 転職に効くポートフォリオPython だけで動くインタラクティブな ML デモを Streamlit で作る方法。データ可視化・ファイルアップロード・モデル予測 UI までの最小実装。