異常検知アルゴリズム
異常検知は、データの大部分から大きく逸脱するデータポイント、イベント、または観測値を特定することに焦点を当てた教師なし機械学習技術です。これらの外れ値は、不正行為、ネットワーク侵入、機器の故障、データ品質の問題などの重要なインシデントを表すことがあります。事前定義されたラベルを予測する代わりに、異常検知モデルはデータ内の正常な動作を学習し、注意が必要な逸脱をフラグ付けします。
Catalyst QuickMLにおける異常検知は、時系列と非時系列に大きく分類され、それぞれ独自のアルゴリズムと設定可能なパラメータのセットを提供しています。
Catalyst QuickMLにおける時系列データの異常検知は、時間の経過に伴う連続データポイントにおける異常なパターンや逸脱を特定することに焦点を当てています。これらの手法は時間的な依存性と季節性を考慮し、突然のスパイク、ドロップ、またはトレンドの変化を検出できるようにします。
個々の時系列異常検知アルゴリズムを探る前に、以下の画像に示す異常感度制御に使用される共通パラメータを理解することが重要です。これらのパラメータはCatalyst QuickMLのすべての時系列異常検知アルゴリズムで共通であり、異常の検出と解釈を制御するために不可欠です。ユーザーは閾値、ウィンドウサイズ、異常スコアリング方法を微調整でき、システムが正常な変動と真の異常な動作を正確に区別することを保証します。
共通パラメータ:
-
閾値(Threshold):モデルが予想される動作からの逸脱に対してどの程度敏感であるかを決定します。閾値が低いほど感度が上がり、小さな変動も異常としてフラグ付けされます。閾値が高いほど誤検知が減少します。
-
ウィンドウサイズ(Window size):分析に使用されるデータポイントのローリングウィンドウを定義します。最大24タイムステップまで適用可能です。
-
異常スコアリング方法(Anomaly scoring method):現在はZスコアをサポートしており、ポイントが平均から標準偏差の何倍離れているかを測定します。
以下は、Catalyst QuickMLでサポートされている時系列異常検知アルゴリズムと、その説明、実世界のユースケース、および主要なパラメータです。
Auto Regressor
説明:Auto Regressor(AR)モデルは、過去の観測値の線形結合に基づいて将来の値を予測します。過去の動作が現在に直接影響を与えるという仮定に基づき、係数は過去と現在の値の関係の強さを表します。QuickMLはこれをLinear Regressor、Random Forest Regressor、AdaBoost Regressor、Gradient Boosting Regressorなどの柔軟な回帰バックエンドで拡張し、線形および非線形の時間モデリングを可能にします。
数学的直感:
Yₜ = c + ∑ᵢ₌₁ᵖ φᵢ Yₜ₋ᵢ + εₜ
各要素の説明:
- Yt = 現在の値
- c = 切片(定数項)
- ϕi = 自己回帰係数
- Yt−i = ラグ付き観測値
- εt = ランダムノイズ
ユースケース:財務予測、センサードリフト検出、予測的プロセス監視に使用され、直近の履歴が次の結果に大きく影響する場合に適しています。例えば、短期的な株価トレンドの予測や温度センサーの異常な変動の検出などです。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| select_model_to_fit | 時系列のフィッティングに使用する回帰モデルを選択します。 | string | {'Linear Regressor', 'Random-Forest Regressor', 'AdaBoost Regressor', 'Gradient Boosting Regressor'} | 'Linear Regressor' |
| max_lag | 現在の値を予測するために使用する過去のタイムステップ数を定義します。 | int | [1, ∞) | 1 |
Moving Average (MA)
説明:Moving Averageモデルは、時系列内のノイズやランダムなショックのモデリングに焦点を当てています。過去の値を直接使用する代わりに、過去の予測誤差の加重合計として現在の観測値を予測します。このアプローチは短期的な変動を平滑化するのに役立ち、予想される残差パターンからの異常な逸脱を検出するのに最適です。
数学的直感:
Yₜ = μ + ∑ᵢ₌₁ᵠ θᵢ εₜ₋ᵢ + εₜ
各要素の説明:
- Yt = 現在の観測値
- μ = 系列の平均
- θi = 移動平均係数
- εt−i = 過去の予測誤差
ユースケース:株価の異常検出、製造出力の監視、短期的な需要予測に適用され、不規則な誤差パターンを特定することで一時的な異常やプロセスの不安定性を発見するのに役立ちます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| ma_lag (q) | 将来の値を予測するために使用する過去の予測誤差の数を指定します。 | int | [0, 5] | 1 |
ARIMA (AutoRegressive Integrated Moving Average)
説明:ARIMAは3つのコンポーネントを統合しています:
- AR(AutoRegressive)– 過去の値を使用
- I(Integrated)– 差分化によりトレンドと非定常性を除去
- MA(Moving Average)– 残差ノイズをモデル化
これらを組み合わせることで、ARIMAは時間的な依存性とトレンドの変化の両方を捉えます。定常時系列に非常に効果的で、確立された統計的関係に違反する逸脱を検出するのに適しています。
数学的直感:
Y′ₜ = c + ∑ᵢ₌₁ᵖ φᵢ Y′ₜ₋ᵢ + ∑ⱼ₌₁ᵠ θⱼ εₜ₋ⱼ + εₜ
Yt′は次数dを適用した後の差分系列です。
ユースケース:経済指標の監視、システムログの異常検出、生産ラインの予測に広く使用され、長期的なトレンドや周期的な安定性からの変化を検出することが重要な場面に適しています。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| ar_lag (p) | モデルに含まれるラグ観測値の数。 | int | [0, 5] | 1 |
| ma_lag (q) | 予測式におけるラグ付き予測誤差の数。 | int | [0, 5] | 1 |
| integration (d) | 定常性を達成するためにデータを差分化する回数。 | int | [0, 5] | 0 |
ARMA (AutoRegressive Moving Average)
説明:ARMAはARモデルとMAモデルの長所を組み合わせていますが、系列が定常(差分化なし)であることを前提としています。過去の観測値への依存性と誤差項の相関の両方を捉え、トレンド感度とノイズフィルタリングのバランスを提供します。
数学的直感:
Yₜ = c + ∑ᵢ₌₁ᵖ φᵢ Yₜ₋ᵢ + ∑ⱼ₌₁ᵠ θⱼ εₜ₋ⱼ + εₜ
ユースケース:ネットワーク遅延の監視、サーバーパフォーマンスの分析、安定したプロセスの異常検出に使用され、時間の経過に伴う一貫した動作により小さな逸脱が非常に重要となる場面に適しています。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| ar_lag (p) | モデルで使用されるラグ観測値の数。 | int | [0, 5] | 1 |
| ma_lag (q) | モデルにおけるラグ付き予測誤差の数。 | int | [0, 5] | 1 |
Auto ARIMA
説明:Auto ARIMAは、情報量基準(AICやBICなど)に基づいてパラメータ(p,d,q)の複数の組み合わせとオプションで季節パラメータを評価することで、ARIMAモデルの選択を自動化します。これにより、手動のパラメータチューニングなしで最適なフィッティングが可能になり、モデルが変化する時間ダイナミクスに適応することを保証します。
数学的直感:以下を最小化するパラメータを自動的に選択します:
AIC = 2k − 2ln(L)
ここで、k = パラメータの数、L = 最尤推定値です。
ユースケース:季節的な小売予測、ユーティリティ消費の異常追跡、自動化された運用監視に最適で、時系列が周期的および非周期的な不規則性の両方を示す場面に適しています。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| seasonal | モデルが季節性を考慮するかどうかを示します。 | bool | {True, False} | True |
| ar_lag (p) | 非季節ARラグパラメータ。 | int | [0, 5] | 1 |
| ma_lag (q) | 非季節MAラグパラメータ。 | int | [0, 5] | 1 |
| integration (d) | 非季節差分次数。 | int | [0, 5] | 0 |
| periodicity (s) | 季節周期の長さ(例:月次データの場合は12)。 | int | [0, ∞) | 12 |
| integration (D) | 季節差分次数。 | int | [0, 5] | 0 |
| max_order | モデルの最大合計次数(オプション)。 | int | [0, 5] | 5 |
SARIMA (Seasonal ARIMA)
説明:SARIMAは、季節的な自己回帰、差分化、移動平均コンポーネントを含めることでARIMAを拡張し、周期的な変動(例:日次、月次、年次の周期)をモデル化できるようにします。季節的な期待値に対して発生する異常の検出に優れています。
数学的直感:
Φᴾ(Bˢ) φᵖ(B) (1 − B)ᵈ (1 − Bˢ)ᴰ Yₜ = Θᵠ(Bˢ) θᵩ(B) εₜ
各要素の説明:
- s = 季節周期
- (p,d,q) = 非季節パラメータ
- (P,D,Q) = 季節パラメータ
ユースケース:エネルギー負荷の異常検出、気候監視、売上の季節性分析に適用され、予想される季節的な動作からの逸脱が潜在的な異常を示す場面に使用されます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| ar_lag (p) | 非季節AR項。 | int | [0, 5] | 1 |
| ma_lag (q) | 非季節MA項。 | int | [0, 5] | 1 |
| integration (d) | 非季節差分化。 | int | [0, 5] | 0 |
| seasonal_ar (P) | 季節AR項。 | int | [0, 5] | 1 |
| seasonal_ma (Q) | 季節MA項。 | int | [0, 5] | 1 |
| seasonal_integration (D) | 季節差分化。 | int | [0, 5] | 0 |
| periodicity (s) | 季節周期(例:月次の季節性の場合は12)。 | int | [0, ∞) | 12 |
| enforce_stationarity | モデルで定常性を強制するかどうか。 | bool | {True, False} | False |
| enforce_invertibility | モデルの可逆性を強制するかどうか。 | bool | {True, False} | False |
Exponential Smoothing
説明:Exponential Smoothingは、古い観測値に指数関数的に減少する重みを与えることで将来の値を予測します。これにより、全体的なトレンドを維持しながら最近のデータを重視します。トレンドやレベルの突然の変化に対して高い応答性を持ちます。
数学的直感:
Ŷₜ₊₁ = αYₜ + (1 − α)Ŷₜ
各要素の説明:
- Y^t+1 = 予測値
- α = 平滑化パラメータ(0–1)
- Yt = 実測値
ユースケース:在庫管理、売上トレンドの監視、マシンテレメトリに一般的に使用され、最近の動作における変化や減衰の迅速な検出が重要な場面に適しています。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| damped_trends | トレンドコンポーネントにダンピングを適用するかどうか。 | bool | {True, False} | False |
| season | 適用する季節性のタイプ。 | string | {'Add', 'Mul'} | 'Add' |
| seasonal_periods | 完全な季節サイクルにおける期間の数。 | int | [1, ∞) | 12 |
Holt-Winter’s Method
説明:Holt-Winter’s法(三重指数平滑法)は、トレンドと季節コンポーネントを追加することで指数平滑法を拡張します。レベルの変化、上昇または下降トレンド、周期的な変動に適応でき、周期的な時系列に対して堅牢な異常検出を提供します。
数学的直感:
Lₜ = α (Yₜ / Sₜ₋ₛ) + (1 − α)(Lₜ₋₁ + Tₜ₋₁)
Tₜ = β (Lₜ − Lₜ₋₁) + (1 − β)Tₜ₋₁
Sₜ = γ (Yₜ / Lₜ) + (1 − γ)Sₜ₋ₛ
Ŷₜ₊ₘ = (Lₜ + mTₜ) Sₜ₋ₛ₊ₘ
Lt = レベル、Tt = トレンド、St = 季節コンポーネント。
ユースケース:小売需要予測、リソース使用率の監視、温度異常の検出に広く使用され、正確な異常識別のために季節性とトレンドの変化の両方を捉える必要がある場面に適しています。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| smoothing_level | レベルコンポーネントの平滑化係数。 | float | [0, 1] | 0.8 |
| smoothing_trend | トレンドコンポーネントの平滑化係数。 | float | [0, 1] | 0.2 |
| damping_trend | トレンドコンポーネントのダンピングを制御します。 | bool | {True, False} | True |
| optimise | パラメータを自動的に最適化するかどうかを指定します。 | string | {'Select', 'Manual'} | 'Select' |
| exponential | 指数トレンド平滑化を使用するかどうか。 | bool | {True, False} | False |
One-Class SVM
説明:One-Class SVM(サポートベクターマシン)は、特徴空間内の大多数の(正常な)データポイントの周りに決定境界を学習します。この境界の外側に位置するポイントは異常として分類されます。高次元データセットで効果的に機能し、異常がまれで正常データと明確に区別できる場合に有効です。
数学的直感:
このアルゴリズムは、高いデータ密度の領域(正常ポイント)で正の値を取り、低密度の領域(異常)で負の値を取る関数f(x)を見つけます。以下の最適化問題を解くことを目指します:
min (1/2) ||w||² + (1 / (νn)) Σ ξᵢ − ρ
subject to:
(w · φ(xᵢ)) ≥ ρ − ξᵢ , ξᵢ ≥ 0
各要素の説明:
- ν:外れ値の上限を制御
- ξi:ソフトマージンを許容するスラック変数
- ϕ(x):データをより高い次元にマッピングするカーネル関数
ユースケース:正常な動作が明確に定義されているが異常がまれなシステムにおける不正検出、ネットワーク侵入検出、産業システムのノベルティ検出に使用されます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| kernel | 使用するカーネルタイプを指定します。指定しない場合、'rbf'が使用されます。 | string | {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'} | 'rbf' |
| degree | 多項式カーネル関数('poly')の次数。他のカーネルでは無視されます。 | int | [1, ∞) | 3 |
| gamma | 'rbf'、'poly'、'sigmoid'のカーネル係数。 | string | {'scale', 'auto'} | 'scale' |
| coef0 | カーネル関数の独立項。'poly'と'sigmoid'で重要です。 | float | [0, 1] | 0.0 |
| tol | 停止基準の許容値。 | float | [0, 1] | 1e-3 |
| nu | トレーニングエラーの割合の上限およびサポートベクターの割合の下限。 | float | (0, 1] | 0.5 |
| shrinking | 縮小ヒューリスティックを使用するかどうか。 | bool | {False, True} | True |
| max_iter | ソルバーのイテレーション回数のハードリミット。-1で制限なし。 | int | [1, ∞), {-1} | -1 |
Isolation Forest
説明:Isolation Forestは、正常なデータポイントをモデル化する代わりに、観測値を分離することで異常を識別します。特徴をランダムに選択し、ランダムな閾値に基づいてデータを分割します。異常は少数で異質であるため、分離が容易で、より少ない分割回数で済みます。ツリーの平均パス長は異常の場合に短く、正常ポイントの場合に長くなります。
数学的直感:
異常スコアは以下のように計算されます:
s(x, n) = 2^(− E(h(x)) / c(n))
各要素の説明:
- E(h(x)):観測値xの平均パス長
- c(n):二分探索木における非成功検索の平均パス長
- スコアが1に近い → 異常、0.5に近い → 正常
ユースケース:不正検出、ネットワーク侵入検出、製造欠陥検出、IoTセンサーの異常識別に一般的に使用されます。不正検出では、通常の支出行動から逸脱する疑わしい取引を発見するのに役立ちます。ネットワーク侵入検出では、セキュリティ侵害を示す可能性のある異常なアクセスパターンやトラフィックスパイクを識別します。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_estimators | アンサンブル内のベースエスティメータ(ツリー)の数。 | int | [1, ∞) | 100 |
| max_samples | 各エスティメータのトレーニングに抽出するサンプル数。 | string, int, float | [1, ∞), [0, 1], {'auto'} | 'auto' |
| contamination | データセット内の外れ値の割合。 | string, float | {'auto'}, (0, 0.5] | 'auto' |
| max_features | 各エスティメータに抽出する特徴量の数。 | int, float | [1, ∞), [0, 1] | 1.0 |
| bootstrap | トレーニングデータを復元抽出でサンプリングするかどうか。 | bool | {False, True} | False |
Local Outlier Factor (LOF)
説明:Local Outlier Factorは、データポイントの局所密度をその近傍のデータポイントの密度と比較することで異常を検出します。あるポイントがその近傍よりも大幅に低い密度を持つ場合、そのポイントは異常と見なされます。LOFは、グローバルな異常よりもローカルな異常の検出に特に効果的です。
数学的直感:
LOFは局所到達可能密度(LRD)の概念に基づいています。データポイントAのLOFスコアは以下の式で計算されます:
LOFₖ(A) = ( Σ_{B ∈ Nₖ(A)} [LRDₖ(B) / LRDₖ(A)] ) / |Nₖ(A)|
各要素の説明:
- Nk(A):Aのk近傍
- LRDk(A):Aの局所到達可能密度
- 値 ≈ 1 → 正常、> 1 → 外れ値
ユースケース:正常なパターンからの局所的な逸脱の特定が不可欠な多様なドメインで効果的に活用されています。不正検出では、同じグループ内で異なる行動を示す顧客や取引を強調し、微妙なまたは進化する不正パターンを発見するのに役立ちます。顧客セグメンテーションでは、定義されたセグメント内の外れ値プロファイル(例:異常に高価値または非アクティブな顧客)を検出し、より正確なターゲティングとリテンション戦略を実現します。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_neighbors | k近傍クエリに使用する近傍の数。 | int | [1, n_samples) | 20 |
| algorithm | 最近傍の計算に使用するアルゴリズム。 | string | {'auto', 'ball_tree', 'kd_tree', 'brute'} | 'auto' |
| leaf_size | BallTreeまたはKDTreeのリーフサイズ。速度とメモリに影響します。 | int | [1, ∞) | 20 |
| metric | 距離計算のメトリック。 | string | {'cityblock', 'cosine', 'euclidean', 'haversine', 'l1', 'l2', 'manhattan', 'nan_euclidean'} | 'minkowski' |
| p | Minkowskiメトリックのパラメータ(1=マンハッタン、2=ユークリッド)。 | float | [1, ∞) | 2 |
| contamination | データセット内の外れ値の割合。 | float, string | (0, 0.5], {'auto'} | 'auto' |
最終更新日 2026-03-05 11:43:24 +0530 IST
Yes
No
Send your feedback to us
