---
title: "孤立森林（Isolation Forest）"
slug: isolation-forest
language: zh-TW
source: https://aiterms.tw/learning/what-is-isolation-forest
updated_at: 2026-07-04
tags: [機器學習, 異常偵測, 統計方法, source:arxiv]
ipas_term: false
type: deep-dive
---

# 孤立森林 是什麼？

> 孤立森林是一種無監督異常偵測演算法，透過隨機切割資料空間，將數量稀少且特徵獨特的資料點快速分離出來。

## 核心概念

在探討孤立森林之前，有必要先釐清傳統異常偵測演算法的思維模式。傳統方法大多採用建立正常資料模型的策略，也就是先運用統計學或機器學習技術學習出正常資料的分布範圍與特徵，然後再將那些不符合這個正常模型或是距離正常資料中心極遠的點視為異常值。這種做法的缺點在於，當資料維度極高或分布形狀極度複雜時，準確描繪出正常狀態的邊界是非常耗時且容易受到雜訊干擾的運算過程。

孤立森林提出了一種截然不同的逆向思維：與其費力去描繪正常的輪廓，不如直接把焦點放在尋找並孤立那些異常的點。這種思維的基礎建立在異常資料的兩個根本特性上：第一是數量極少，異常值在整體資料集中只佔極低的比例；第二是特徵差異顯著，異常值在某些維度的數值特徵上與絕大多數的正常資料有著明顯的不同。

基於這兩個特性，如果我們在資料空間中隨機地畫線進行切割，那些散布在邊緣、特徵獨特且數量稀少的異常點，通常只需要經過幾次的隨機切割，就會被單獨分離出來，形成一個孤立的空間。相反地，那些密集成群的正常資料點，因為彼此靠得很近，我們需要進行非常多次的隨機切割，才能夠將它們逐一分開。孤立森林正是利用這種容易被孤立的程度來衡量一個資料點是異常值的可能性。在樹狀結構中，這就體現為異常點所在的終端節點距離樹根非常近，而正常點的終端節點則深埋在樹的底層。

## 運作原理

孤立森林的底層運作機制建立在整合學習與隨機決策樹的基礎之上。整個演算法可以分為兩個主要階段：訓練階段與評分階段。

在訓練階段，演算法會從原始資料集中進行無後放回的隨機抽樣，建立多個子樣本集。這種子抽樣的機制不僅大幅降低了計算複雜度與記憶體消耗，更重要的是，它減輕了資料中潛在的遮蔽效應與集群效應，使得異常點在較小的樣本中更容易被突顯出來。接著，演算法會為每一個子樣本集建立一棵孤立樹。

建立孤立樹的過程是一個遞迴的隨機分割過程。在樹的每一個節點，演算法會隨機挑選一個資料特徵，然後在這個特徵的最小值與最大值之間，隨機產生一個分割值。資料集將根據這個分割值被劃分為左右兩個子節點：特徵值小於分割值的資料進入左子樹，大於或等於分割值的資料進入右子樹。這個隨機分割的過程會一直重複進行，直到滿足以下三個條件之一才會停止：第一，節點內只剩下一個資料點，該點已被完全孤立；第二，節點內的所有資料點在所有特徵上的數值都完全相同，無法再進行分割；第三，孤立樹生長達到了預先設定的深度限制。設定深度限制是為了避免過度生長，因為我們主要關心的是那些路徑很短的異常點，樹的深層結構對於尋找異常值沒有太多幫助，反而會消耗運算資源。

在評分階段，當所有孤立樹都建構完成後，孤立森林就可以用來評估任何一個資料點的異常程度。我們會將目標資料點依序放入每一棵孤立樹中，按照各節點的分割規則往下走，直到抵達葉節點。這時，我們記錄下該資料點在每一棵樹中所走過的路徑長度，也就是從根節點到葉節點所經過的邊數。

為了將路徑長度轉化為一個標準化的異常分數，孤立森林引入了二元搜尋樹的平均路徑長度作為基準。由於隨機分割的過程在數學上與二元搜尋樹的建構過程高度相似，我們可以計算出在給定樣本數量下，一棵隨機建構的二元搜尋樹的預期平均路徑長度。最後，演算法會將資料點在所有孤立樹中的平均路徑長度，與這個基準預期長度進行比較，並套用一個指數函數計算出最終的異常分數。

這個異常分數的範圍介於零到一之間。如果分數非常接近一，表示該資料點的平均路徑長度遠小於預期值，它極容易被孤立，因此有極高的機率是異常值。如果分數小於零點五，表示該資料點的路徑長度大於預期值，它很難被孤立，屬於正常資料。如果所有資料點的分數都集中在零點五附近，則說明這個資料集裡可能沒有明顯的異常值。

## 實際應用

孤立森林因為其高效的運算能力與不依賴資料分布假設的特性，在各個領域的異常偵測任務中都有廣泛的應用。

在資訊安全與網路防護方面，孤立森林被大量運用於網路入侵偵測系統中。駭客的攻擊行為或是惡意軟體的通訊模式，在海量的正常網路流量中通常屬於罕見事件，且其封包特徵、連線頻率、傳輸資料量等指標往往與正常使用者的行為模式有顯著差異。孤立森林能夠即時處理龐大的網路日誌資料，迅速揪出這些潛藏在正常流量中的異常連線，協助資安團隊及早攔截潛在的威脅。

在金融科技領域，信用卡盜刷偵測與洗錢防制是孤立森林發揮作用的重要舞台。金融機構每天處理大量的交易紀錄，要從中找出極少數的詐欺交易是一項艱鉅的挑戰。詐欺交易在交易金額、發生時間、地理位置、甚至購買的商品種類上，經常會呈現出有別於持卡人過往習慣的異常模式。孤立森林可以在不需要事先定義所有可能的詐欺樣態的情況下，僅憑交易資料的內在結構，就有效地將這些偏離常軌的交易標示出來，供人工進一步審查，從而大幅降低銀行的財務損失。

在工業物聯網與智慧製造領域，設備的預測性維護高度仰賴異常偵測技術。工廠裡的機台與感測器無時無刻都在產生大量的溫度、壓力、震動等運作數據。當設備內部出現微小磨損或即將發生故障時，這些感測器數據的分布往往會發生難以察覺的變化。孤立森林可以透過持續監控這些多維度的感測資料，在設備發生災難性停機之前，提前捕捉到那些微小的異常訊號，讓維修人員能夠及早進行保養，避免生產線停擺造成的巨大損失。

在電子商務平台與數位行銷中，孤立森林也被用來防範惡意機器人與點擊欺詐。惡意程式會透過大量且異常快速的點擊來消耗廣告主的預算，或是透過自動化腳本進行惡意註冊與評論。這些機器人的行為軌跡在網站的存取日誌中會形成獨特的足跡。孤立森林可以透過分析使用者的瀏覽時間、點擊頻率、滑鼠移動軌跡等多維度特徵，精準地區分出真實的人類使用者與自動化的惡意程式。

## 常見誤區

儘管孤立森林是一個強大的演算法，但在實際應用中，使用者經常會陷入一些認知與操作上的誤區。

首先，最常見的誤解是認為資料需要經過嚴格的標準化或正規化處理才能使用孤立森林。這是一種將依賴距離計算的演算法思維套用到樹狀演算法上的錯誤認知。由於孤立森林在每一個節點的分割是基於單一特徵的相對大小來進行的，資料的絕對尺度或單位並不會影響特徵值的排序與隨機分割的結果。因此，與K-Means聚類或支援向量機不同，孤立森林對於特徵的尺度具有先天的不變性，在多數情況下，省略特徵縮放步驟並不會損害模型的偵測能力，反而可以節省資料預處理的時間。

其次，許多工程師會習慣性地將決策樹長到最深，試圖讓每一個節點都達到完美的純度。在孤立森林中，這是一個嚴重的錯誤。孤立森林的目標是尋找容易被孤立的點，也就是那些在樹的極淺層次就被分離出來的點。如果允許樹無限生長，那些位於資料密集區域的正常點最終也會被迫分離，這不僅會產生極深的樹狀結構，白白浪費龐大的記憶體與計算時間，更會導致異常分數的計算失去鑑別度。因此，適當地限制樹的最大深度，或是維持預設的子樣本大小限制，是確保孤立森林效能的關鍵步驟。

另一個經常被忽略的問題是孤立森林在處理局部異常值時的侷限性。標準的孤立森林在每次分割時只考慮單一維度的特徵，這使得其分割邊界永遠平行於座標軸。當異常點隱藏在兩個特徵高度相關所形成的傾斜分佈叢集之中時，平行座標軸的切割很難在不切斷正常叢集的情況下，單獨將該局部異常點孤立出來。在這種特徵之間存在強烈相依性，且異常值相對於局部鄰域呈現異常而非全域異常的情況下，標準孤立森林的表現可能會不如預期。面對這類問題，往往需要引入延伸版本如延伸孤立森林，允許在超平面上進行隨機傾斜切割，或是改用其他專注於局部密度的演算法。

最後，使用者常常誤以為孤立森林是一個完全不需要參數調整的工具。雖然孤立森林對參數相對不敏感，但子樣本的大小與樹的數量仍然會顯著影響結果的穩定性與準確度。如果子樣本過小，模型可能無法捕捉到資料的整體輪廓，導致正常點被誤判為異常；如果子樣本過大，則可能引發群聚效應，使得異常點被淹沒在正常資料中，難以被早期分割出來。因此，針對具體的資料集規模與異常比例，進行適度的參數微調，仍然是取得最佳偵測效果不可或缺的環節。

## 與相關技術的比較

在異常偵測的領域中，存在著許多不同流派的演算法。了解孤立森林與這些技術的差異，有助於在面對特定問題時選擇最合適的工具。

與基於密度的局部異常因子演算法相比，兩者的設計哲學有著根本的差異。局部異常因子演算法的核心概念是透過計算資料點周圍的局部密度，並將其與鄰近點的密度進行比較，找出那些處於相對稀疏區域的點。這種方法在偵測局部異常值時表現優異，能夠發現那些雖然在整體資料中不突出，但相對於其周圍小群體顯得格格不入的異常點。然而，局部異常因子需要計算兩兩資料點之間的距離，時間複雜度呈二次方成長，這使得它在面對大規模資料集時顯得力不從心。相對而言，孤立森林的時間複雜度為線性對數級別，且不需要計算距離，因此在處理海量資料時展現出極大的效能優勢。

單類別支援向量機是另一種廣泛使用的異常偵測方法。它將資料映射到高維特徵空間，試圖尋找一個能夠盡量將所有正常資料包圍起來的超球面邊界，落在邊界之外的點即被視為異常。單類別支援向量機在處理高維資料與非線性邊界時具有強大的數學基礎，但它的訓練過程涉及複雜的二次規劃問題求解，計算成本極高。此外，單類別支援向量機對於核心函數的選擇以及參數的設定非常敏感，調校過程通常相當繁瑣。孤立森林則沒有這些運算上的瓶頸，其建構過程充滿隨機性且高度可平行化，參數調整也相對簡單直觀。

在深度學習領域，自編碼器常被用於異常偵測。自編碼器透過編碼器將資料壓縮為低維表示，再透過解碼器嘗試將其還原。由於模型主要學習正常資料的模式，當輸入異常資料時，其重建誤差通常會顯著偏高。自編碼器特別適合處理影像、語音等具有複雜內部結構的高維非結構化資料，並且有能力捕捉複雜的非線性關係。但這項技術的代價是需要大量的運算資源與漫長的訓練時間，且模型容易變得難以解釋。孤立森林在處理表格型或數值型資料時，通常能夠以極低的運算成本達到與自編碼器相匹敵甚至更好的效果，且由於其基於決策樹的特性，我們可以透過追蹤特定資料點的分割路徑，獲得一定程度的決策可解釋性。

最後，與基於統計模型的方法相比，統計方法通常假設資料服從某種特定的機率分布，如果資料的真實分布偏離了這個假設，偵測結果就會大打折扣。孤立森林是一種無母數的方法，它不需要對資料的分布做任何預先的假設，因此對於那些分布形狀未知或是混合了多種分布的複雜真實世界資料，具有更強的適應性與穩健性。這種靈活性使得孤立森林成為許多資料科學家在面對未知資料集時，進行初步異常偵測的常用方法之一。

## 常見問題

### 孤立森林在處理高維度資料時會遇到維度災難嗎？

孤立森林在設計上對於高維度資料具有一定的抵抗力，因為它在每次節點分割時，只會隨機挑選一個維度特徵進行評估，這降低了計算負擔。然而，當資料維度極高且包含大量與異常偵測無關的雜訊特徵時，隨機挑選機制會導致樹經常選中這些無用維度，進而降低異常分數的鑑別力。在這種情況下，通常需要先透過特徵萃取或降維技術過濾雜訊，再將處理後的特徵輸入模型。

### 如何為孤立森林挑選合適的超參數配置？

孤立森林主要有兩個核心超參數需要調整：子樣本大小與孤立樹的數量。對於孤立樹的數量，通常設定在一百棵即可達到穩定的異常分數收斂，過多的樹只會徒增運算時間。子樣本大小則是一個關鍵參數，這個相對微小的數字有助於突顯異常點並減輕遮蔽效應。只有當資料集極其龐大或異常點特徵非常隱蔽時，才需要考慮增加子樣本大小。建議使用網格搜尋配合交叉驗證進行微調。

### 孤立森林產出的異常分數應該如何設定閾值來切分正常與異常資料？

孤立森林輸出的異常分數是一個介於零到一之間的連續數值，演算法本身不會直接給出絕對的二元分類結果。分數越接近一代表異常機率越高。在實務操作中，設定閾值需要根據業務場景對假警報率與漏報率的容忍度來決定。一種常見做法是根據先驗知識，估計資料中可能存在的異常比例，然後將分數排序取分位數作為閾值，或繪製接收者操作特徵曲線尋找最佳決策邊界。

---

深度解說頁：https://aiterms.tw/learning/what-is-isolation-forest
快查頁：https://aiterms.tw/terms/isolation-forest
最後更新：2026/07/04