---
title: "局部異常因子（Local Outlier Factor）"
slug: local-outlier-factor
language: zh-TW
source: https://aiterms.tw/learning/what-is-local-outlier-factor
updated_at: 2026-07-04
tags: [機器學習, 異常偵測, source:arxiv]
ipas_term: false
type: deep-dive
---

# 局部異常因子 是什麼？

> 局部異常因子是一種透過比較資料點與其鄰近樣本的局部密度差異，藉此找出潛在異常值的無監督機器學習演算法。

## 核心概念

局部異常因子是一種在資料探勘與機器學習領域廣泛使用的無監督異常偵測演算法。該演算法的核心思想在於評估資料點的局部密度，並將其與相鄰資料點的局部密度進行比較。與傳統的全局異常偵測方法不同，局部異常因子不僅考慮資料點在整個資料集中的分佈情形，更著重於資料點在其局部鄰域內的相對位置關係。這使得它在處理密度分佈不均的複雜資料集時表現優異。

在許多實際場景中，資料的分佈並非均勻。有些區域的資料點密集分佈，形成高密度叢集；而有些區域的資料點則較為稀疏，形成低密度叢集。如果使用全局視角的異常偵測方法，例如基於距離的演算法，設定一個固定的距離閾值來判斷異常，往往會面臨困難。在低密度叢集中的正常資料點，其與鄰居的距離可能大於高密度叢集中的異常點與鄰居的距離。這會導致全局方法誤將低密度叢集中的正常點標記為異常，同時漏掉隱藏在高密度叢集邊緣的局部異常點。局部異常因子透過引入局部密度的概念，成功解決了這個問題。它計算的是一個相對的密度指標，而非絕對的距離值。

## 運作原理

局部異常因子的運作原理建立在幾個關鍵的數學概念之上，包含k距離、k距離鄰域、可達距離以及局部可達密度。

首先，定義資料點的k距離。對於資料集中的任意一點，計算其與所有其他點的距離，並將這些距離從小到大排序。該點的k距離即為排序後第k個最近的距離值。這個參數k是演算法中最重要的超參數，決定了評估局部密度時所考慮的鄰居範圍。選擇適當的k值對於演算法的表現至關重要，通常需要根據資料的特性進行交叉驗證來決定。

接著，定義k距離鄰域。一個資料點的k距離鄰域包含了所有與該點距離小於或等於其k距離的資料點。需要注意的是，如果有兩個或多個點與該點的距離恰好等於k距離，則這些點都會被包含在k距離鄰域中，因此鄰域內的點數可能大於k。

然後是可達距離的概念。點A到點B的可達距離定義為點B的k距離與點A到點B的實際距離兩者之中的較大值。這種定義方式的目的是為了減少統計波動的影響，使距離計算更加平滑。如果點A在點B的k距離鄰域內，則可達距離等於點B的k距離；如果點A在點B的k距離鄰域外，則可達距離等於兩點的實際距離。這種處理方式能夠確保當兩點非常靠近時，其可達距離不會趨近於零，從而維持演算法的穩定性。

基於可達距離，可以計算出資料點的局部可達密度。一個資料點的局部可達密度定義為其k距離鄰域內所有點到該點的平均可達距離的倒數。如果一個點位於高密度區域，其周圍的點到它的可達距離都很小，因此平均可達距離小，局部可達密度大；反之，如果一個點位於低密度區域，其局部可達密度則較小。

最後，計算局部異常因子分數。一個資料點的局部異常因子定義為其k距離鄰域內所有相鄰點的局部可達密度平均值，除以該點自身的局部可達密度的商值。這個比值直觀地反映了該點與其鄰居的相對密度。如果該點的局部可達密度與鄰居相近，局部異常因子分數大約為一，表示該點是正常點；如果該點的局部可達密度遠小於鄰居，局部異常因子分數將大於一，表示該點所在的區域比其鄰居稀疏，因此該點很可能是一個局部異常值；如果局部異常因子分數小於一，則表示該點處於比周圍更密集的區域，通常也被視為正常點。

## 實際應用

局部異常因子在多個領域具有廣泛的應用，尤其適用於那些資料分佈不均勻、異常模式複雜的場景。

在金融領域，信用卡的盜刷偵測是一個經典的應用。使用者的消費行為會隨著時間、地點和消費習慣的不同而呈現多樣化的叢集分佈。有些使用者頻繁進行小額消費，形成高密度的行為叢集；而有些使用者偶爾進行大額消費，形成低密度的行為叢集。傳統的全局規則可能難以同時適應這兩種行為模式。局部異常因子可以針對每個使用者的局部行為模式進行評估，準確識別出那些與使用者自身歷史行為特徵顯著偏離的交易，例如突然在不尋常的時間點或地點發生的異常消費，從而有效提高盜刷偵測的準確度。

在資訊安全領域，網路入侵偵測也大量依賴異常偵測技術。網路流量的特徵在正常情況下會呈現某種規律的分佈，但在遭受攻擊時，例如分散式阻斷服務攻擊或未經授權的存取，流量特徵會出現異常。局部異常因子可以透過分析網路封包的大小、傳輸頻率、來源和目的位址等特徵的局部密度分佈，快速找出那些行為模式偏離正常基線的連線請求，協助系統管理員及時發現並阻斷潛在的安全威脅。

在製造業和物聯網領域，工業設備的預測性維護是一個重要的應用方向。工廠中的感測器會持續收集設備運作時的各種數據，如溫度、震動、壓力等。當設備即將發生故障或處於不穩定狀態時，其產生的數據特徵往往會與正常運作時的狀態有所不同。局部異常因子可以即時監控這些時間序列資料或多維度感測器數據，偵測出微小的局部異常狀態，實現設備故障的早期預警，從而降低無預警停機帶來的營運損失。

## 常見誤區

在應用局部異常因子時，研究人員和工程師經常會遇到一些誤區。

首先是對於參數k的選擇過於隨意。參數k代表了評估局部密度時參考的鄰居數量，它直接決定了演算法的敏感度。如果k值設定得太小，演算法會對資料中的隨機雜訊過於敏感，容易產生大量的誤報，將正常的波動誤認為是異常；如果k值設定得太大，演算法的局部特性會被削弱，退化為全局異常偵測，從而無法有效識別出隱藏在局部區域中的異常值。選擇合適的k值需要深入了解資料的分佈特性，通常建議嘗試一個區間內的多個k值，並綜合評估結果來找出最佳設定。

其次是忽略資料的預處理步驟。局部異常因子是一種基於距離的演算法，這意味著它對資料的尺度非常敏感。如果資料集中的各個特徵具有不同的量級或單位，例如一個特徵的範圍是一到十，另一個特徵的範圍是一千到一萬，那麼計算出的距離將被數值範圍較大的特徵所主導，從而掩蓋了其他特徵的變異。因此，在應用演算法之前，必須對資料進行標準化或正規化處理，確保每個特徵對距離計算的貢獻是均衡的。

另一個常見的誤區是過度依賴單一的異常分數閾值。局部異常因子會為每個資料點輸出一個分數，分數越高表示異常的機率越大。然而，在實際應用中，很難找到一個適用於所有資料的固定閾值。異常和正常的界線往往是模糊的，且會隨著業務場景的變化而改變。將所有分數大於某個值的點直接判定為異常，可能會導致較高的誤報率或漏報率。更合理的做法是結合具體的領域知識和業務需求，將局部異常因子分數作為一個特徵，與其他指標或規則系統結合使用，或者將分數排序後，調查排名最靠前的若干個可疑樣本。

## 與相關技術的比較

局部異常因子與其他常見的異常偵測技術在原理和適用場景上存在顯著的差異。

與基於統計模型的全局異常偵測方法相比，例如高斯混合模型或單類支持向量機，局部異常因子的主要優勢在於它不需要對資料的潛在分佈做出嚴格的假設。統計模型通常假設資料服從某種特定的機率分佈，當資料的實際分佈過於複雜或不符合假設時，模型的效果會大幅下降。局部異常因子僅依賴於資料點之間的相對距離和局部密度，因此具有更強的適應性，適合處理分佈形狀不規則或包含多個不同密度叢集的複雜資料集。

與基於隔離機制的演算法相比，例如孤立森林，兩者的著眼點不同。孤立森林透過隨機選擇特徵和分割值來建構決策樹，那些路徑長度較短的資料點被視為異常。孤立森林在處理高維度資料和大規模資料集時具有計算效率高的優點，但它本質上也是一種全局視角的方法，對於識別低密度叢集中的正常點和高密度叢集邊緣的局部異常點，有時不如局部異常因子精準。局部異常因子能夠提供更細緻的局部密度資訊，但在計算複雜度上較高，尤其是在面對極大規模的資料集時，計算所有點之間的距離矩陣會耗費大量的運算資源。

與基於深度學習的自動編碼器相比，兩者在處理複雜非線性關係的能力上有所不同。自動編碼器透過神經網路學習資料的低維表示，並利用重建誤差來判斷異常。自動編碼器在處理影像或時間序列等高維度結構化資料時具有強大的特徵提取能力，但需要大量的資料進行訓練，且模型的解釋性較差。局部異常因子則是一種傳統的機器學習演算法，邏輯相對清晰直觀，不需要龐大的訓練資料集即可運作，且計算出的異常分數具有明確的物理意義，有助於分析人員理解異常發生的原因。在選擇演算法時，需要根據資料的維度、規模、分佈特性以及對模型可解釋性的要求來進行綜合考量。

## 常見問題

### 局部異常因子演算法中的 k 值應該如何選擇？

k 值的選擇對局部異常因子的效能影響顯著。它代表了計算局部密度時考慮的鄰居數量。通常，k 值的下限不應小於資料集中最小群集的樣本數量，以避免將小群集整體誤判為異常。k 值的上限則不應超過資料集中最大群集的樣本數量，以免局部特性被過度平滑化。在實務操作上，研究人員經常會選擇一個範圍，計算每個 k 值下的異常分數，然後取最大值作為最終分數，這樣可以提高對於不同密度分佈的穩健度。

### 局部異常因子在處理高維度資料時會面臨什麼問題？

當應用於高維度資料時，局部異常因子會遇到維度災難的挑戰。隨著特徵維度的增加，資料點在空間中的分佈會變得極度稀疏，任何兩點之間的距離差異會逐漸縮小，這使得鄰域和密度的概念變得模糊，導致演算法難以有效區分正常點與異常點。此外，高維度空間中距離計算的運算成本會急遽上升。為了解決這個問題，實務上通常會在執行局部異常因子之前，先使用降維技術提取關鍵特徵，或是採用特徵選擇方法。

### 為什麼局部異常因子演算法的計算複雜度較高？有什麼優化方式？

局部異常因子需要計算資料集中每一個資料點與其他所有點之間的距離，以找出最近鄰居。對於包含 n 個樣本的資料集，其基本的時間複雜度與 n 的平方成正比。當資料量達到數十萬甚至百萬級別時，這種計算將耗費大量的時間與系統記憶體。為了降低計算複雜度，工程師通常會引入空間索引資料結構，例如 kd 樹或球樹，來加速近鄰搜尋的過程。這些資料結構可以在對數時間內找到最近鄰居，提升演算法執行效率。

---

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