『音による故障予知の教科書たたき台:6.7 Isolation Forest』LLMと一緒に書いてみた—AIが導く研究メモ

6. 故障予知のアプローチ  

6.7 Isolation Forest

Isolation Forestは、データの中で「数が少なく、周りと性質が違う点(異常)」は、ランダムに分割していくと少ない回数で区別できる、という直感に基づく異常検知アルゴリズムである。木構造(アイソレーションツリー)を多数作り、各データ点が根から葉まで到達するまでの「経路の長さ(パス長)」を平均すると、異常は短く、通常は長くなりやすいという性質をそのままスコア化して利用する。密度推定や確率モデル化を行わず、ランダム分割の結果得られるパス長だけで異常度を判定する点が特徴で、高次元・大規模データにも線形時間・低メモリで適用できるのが利点とされている。[1][2][3]

仕組みをやさしく言い換えると、次の通りである。- ランダムに特徴を1つ選び、その特徴の最小値と最大値の間からランダムにしきい値を選んで、データを二分割する。- この分割を再帰的に繰り返して二分木(アイソレーションツリー)を成長させ、点が葉に到達した深さ(パス長)を記録する。- 同じ操作を多数のツリー(フォレスト)で行い、各点の平均パス長を異常度の基礎にする(短いほど異常らしい)。異常スコアの理論式は、二分探索木における平均失敗探索長と対応づけられており、平均パス長E(h(x))を適切に正規化した指標s(x,m)=2^{-E(h(x))/c(m)}が広く紹介されている(sが1に近いほど異常らしい)。[4][2][3][5][1]

使い方の基本は、訓練データで森を作り、各点のスコアを計算して「どこから上を異常とするか」のしきい値を決める、という流れである。実装として一般的なライブラリは、- n_estimators(木の本数、既定100程度)、- max_samples(各木の学習に使うサンプル数、既定はmin(256, n_samples))、- contamination(異常の想定割合。'auto'で原論文に準じたしきい値、または0<割合≤0.5で明示設定)、- max_features(各木で使用する特徴数の割合や本数)、などを備える。max_samplesを256程度に抑える既定は、少ない標本で木を作った方が異常を素早く孤立させやすいという経験的利点に基づき、収束や計算量の点で実務に適することが解説されている。contaminationはしきい値決定に直結し、値を上げれば異常判定が増え、下げれば厳しくなるため、データと運用目的に合わせた調整が重要である。[2][6][7][5][1]

長所と向いている場面を整理する。- スケールと次元に比較的強く、大規模・高次元でも高速に動く(ランダム分割・線形時間・低メモリ)。- 正常分布の厳密なモデリングをせず、パス長だけで異常度を出せるため、分布仮定に縛られにくい。- 教師なしで使えるため、ラベルが少ない現場の初期スクリーニングに好適である。とくに、故障が稀で多様、正常は豊富という現場事情に合いやすい。[8][6][1][2]

注意点と限界も明確にしておく。- contaminationの設定に敏感で、過大・過小で誤警報/見逃しのバランスが崩れやすい('auto'起点で検証し、必要に応じて明示値へ微調整)。- 正常が複数の密なクラスターを成す場合や、異常が正常に近い「密な塊」として現れる場合には、パス長だけでは分離が難しい局面がある(手法拡張や特徴設計の工夫が必要)。- 実装によりスコア正規化や予測出力の扱いが異なることがあるため、採用ライブラリの仕様を確認する(例:H2Oは平均パス長由来のスコアでしきい値を置き、BST由来の式をそのままは用いない)。[6][9][7][1][4][2]

パラメータ設計の実務指針は次の通り。- n_estimatorsは100前後から開始し、スコアの安定度(分散)と処理時間を見て調整する。- max_samplesは既定のmin(256, n_samples)を起点に、小さすぎて木が偏らないか、逆に大きすぎて計算が重くならないかを検証する(小標本時は効果を確認)。- contaminationは検証用データでPR曲線や再現率・適合率のバランスを見ながら決め、運用の許容度に合わせて再現率寄り/適合率寄りを選ぶ。- max_featuresは1.0(全特徴)から開始し、冗長次元が多い場合は比率を下げたサブスペース学習でロバスト性を試す。[7][5][2][6]

故障予知への落とし込みでは、特徴量設計との組み合わせが要である。RMS、短時間エネルギー、ゼロ交差率、スペクトル重心、バンドエネルギー、ピークトップNなど、時間領域・周波数領域の代表指標を整え、正規化・標準化でスケールをそろえる。その上でIsolation Forestを適用し、- 異常スコアの上位からイベント候補を抽出、- スコアの時系列トレンドで基準レンジからの逸脱を監視、- しきい値は検証データのPR指標で決定、という二段構え(前段スクリーニング→後段の詳細解析)にすると、誤警報と見逃しのバランスを取りやすい。実務チュートリアルでも、パス長に基づくスコアが「通常らしさ/異常らしさ」を連続値で返し、しきい値で最終判断する流れが示されている。[3][10][2][6]

運用時のベストプラクティスを挙げる。- データ分割は層化や時系列分割でリークを防ぎ、前処理(標準化など)は必ず訓練統計で学んで検証・本番に適用する(評価の公正性確保)。- contaminationやしきい値は固定せず、季節・負荷・ライン変更で再点検する(ドリフト対策)。- スコア上位のサンプルは、スペクトログラムやピーク表と併読して根拠を可視化し、現場説明可能性を高める。- 他手法との補完(例:Isolation Forestの候補→周波数ピーク検出や側帯域比で精査)で誤警報を抑える。[2][6][3]

理論面の補足として、平均パス長の正規化に現れるc(m)は調和数Hの近似(H(i)≈ln(i)+γ)を用いて評価され、s(x,m)=2^{-E(h(x))/c(m)}が標準的に用いられる(sが1に近いと強い異常、0.5付近は正常目安)。また、拡張手法として、特徴のサブスペース選択やクラスタを意識した派生(SCiForestなど)も報告されており、クラスター化した異常への感度改善が図られている。[5][1][4]

最後に、導入の最小手順をまとめる。1) 特徴量を作成し、欠損処理とスケーリングを訓練データ基準で実施する。2) Isolation Forestをn_estimators=100、max_samples='auto'、contamination='auto'から開始して学習する。3) 検証データでスコアを評価し、PR曲線・再現率・適合率のバランスでcontamination(またはしきい値)を調整する。4) スコア上位を人・上位解析で点検し、しきい値の妥当性を現場基準で確定する。5) 本番ではドリフト監視と定期再学習・再調整を行う。この一連は、ライブラリ仕様と原理解説に沿う標準的な適用手順である。[1][6][7][3][5][2] [1] https://en.wikipedia.org/wiki/Isolation_forest

[2] https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html

[3] https://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html

[4] https://arxiv.org/html/2403.10802v1

[5] https://www.mathworks.com/help/stats/anomaly-detection-with-isolation-forest.html

[6] https://www.digitalocean.com/community/tutorials/anomaly-detection-isolation-forest

[7] https://anderfernandez.com/en/blog/isolation-forest-in-python/

[8] https://cran.r-project.org/web/packages/isotree/vignettes/An_Introduction_to_Isolation_Forests.html

[9] https://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/if.html

[10] https://gri.jp/media/entry/466

[11] https://www.geeksforgeeks.org/machine-learning/anomaly-detection-using-isolation-forest/

[12] https://majdarbash.github.io/aws-cmls/2019-11-21-isolation-forest-algorithm/

[13] https://www.sciencedirect.com/science/article/abs/pii/S0169023X24000260

[14] https://cpp-learning.com/isolationforest/

[15] https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf

[16] https://data-analysis-stats.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92/%E7%95%B0%E5%B8%B8%E6%A4%9C%E5%87%BA%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-isolation-forest/

[17] https://docs.seldon.io/projects/alibi-detect/en/latest/od/methods/iforest.html

[18] https://ieeexplore.ieee.org/document/10763320/

[19] https://dtaianomaly.readthedocs.io/en/latest/api/anomaly_detection_algorithms/isolation_forest.html

※本ページは、AIの活用や研究に関連する原理・機器・デバイスについて学ぶために、個人的に整理・記述しているものです。内容には誤りや見落としが含まれている可能性もありますので、もしお気づきの点やご助言等ございましたら、ご連絡いただけますと幸いです。

※本ページの内容は、個人的な学習および情報整理を目的として提供しているものであり、その正確性、完全性、有用性等についていかなる保証も行いません。本ページの情報を利用したこと、または利用できなかったことによって発生した損害(直接的・間接的・特別・偶発的・結果的損害を含みますが、これらに限りません)について、当方は一切責任を負いません。ご利用は利用者ご自身の責任でお願いいたします。

おすすめの記事