異常検知(Anomaly Detection / Outlier Detection)── データの中から「普段と違う」点を見つける技術。不正検知・故障予測・ 障害対応・データ品質まで応用範囲は広い。本シリーズでは古典統計手法から Isolation Forest・LOF・オートエンコーダまで、現場で本当に使われる手法を1つずつ扱います。
異常検知が答えるべき3つの問い
- 1何を異常とみなすか:絶対値の高低 / 普段との乖離 / 関係性の崩壊 / 前兆パターン
- 2どう検出するか:統計的手法 / 機械学習 / ルールベース / ハイブリッド
- 3誰がいつ対処するか:自動アクション / オペレーター通知 / 経営判断 ── 検出の先のフローまで設計
1. 3σ rule(最も古く、最も誤用される手法)
「平均 ± 3標準偏差を外れたら異常」。正規分布であれば、99.7%のデータが ±3σ に収まることを前提にしています。実装は最も簡単。
import numpy as np
def detect_3sigma(values: np.ndarray) -> np.ndarray: """True/False 配列を返す(True が異常)""" mu, sigma = values.mean(), values.std() return np.abs(values - mu) > 3 * sigma実データの多くは正規分布ではありません。売上・滞在時間・課金額のように 裾が重い分布(log-normal や Pareto)では、3σ rule は明らかに正常な値も異常と判定してしまう。さらに、外れ値自体が平均と分散を引っ張る(masking)ため、本物の異常が見逃される。
2. IQR ベース(Tukey's fence)
より実践的なのが IQR(Interquartile Range) ベースの手法。Q1(25%点)と Q3(75%点)の幅 = IQR を使い、Q1 - 1.5×IQR 未満 / Q3 + 1.5×IQR 以上を異常とする。外れ値の影響を受けないため安定。
def detect_iqr(values: np.ndarray, k: float = 1.5) -> np.ndarray: q1, q3 = np.percentile(values, [25, 75]) iqr = q3 - q1 lower, upper = q1 - k * iqr, q3 + k * iqr return (values < lower) | (values > upper)k=1.5 が標準ですが、保守的に拾いたければ k=3.0(外れ値スコア)に上げる。 EP.05 のボックスプロットの「」表示はこれを使っています。
3. Modified Z-score(MAD ベース)
3σ の改良版。標準偏差の代わりに MAD(Median Absolute Deviation) を使うことで、外れ値の影響を受けにくくする。
def detect_modified_z(values: np.ndarray, threshold: float = 3.5) -> np.ndarray: median = np.median(values) mad = np.median(np.abs(values - median)) if mad == 0: return np.zeros(len(values), dtype=bool) modified_z = 0.6745 * (values - median) / mad return np.abs(modified_z) > threshold古典手法の使い分け
| 手法 | 前提 | 強み | 弱み |
|---|---|---|---|
| 3σ | 正規分布 | 実装最易 | 裾の重い分布で破綻 |
| IQR | 対称分布 | 安定、ボックスプロットと一致 | 強い歪みでも限界あり |
| Modified Z | 対称分布、外れ値多めOK | MAD でロバスト | 計算コストやや増 |
| % タイル | なし | 実装最易、定義明快 | 「外れ値」の理論的保証なし |
本シリーズのロードマップ
| EP | テーマ |
|---|---|
| 01 | 古典手法(本記事) |
| 02 | Z-score / Modified Z-score の使い分け |
| 03 | Isolation Forest と LOF(教師なし機械学習) |
| 04 | 時系列の異常検知:STL分解 / Prophet |
| 05 | 多変量異常検知:PCA / Mahalanobis 距離 |
| 06 | オートエンコーダによる異常検知 |
| 07 | ストリーミング異常検知(リアルタイム) |
| 08 | 異常検知の評価指標(ラベルなし / ありのケース) |
| 09 | ビジネス活用:不正検知・故障予測・SRE |
| 10 | 異常検知パイプラインの構築・運用 |
次回予告
EP.02 では Z-score の改良版を深掘り。Modified Z-score だけでなく、 Z-score、業務文脈での閾値設計を扱います。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。