← M08 大數據分析 M08 大數據分析

M08.08|異常偵測

在正常中找出不正常 — 讓 AI 當你的智慧警報系統

L1-AI基礎知識-機器學習基礎 L2-AI技術應用-智慧監控
異常偵測 離群值 Isolation Forest Autoencoder 統計方法 詐欺偵測 設備監控 無監督學習
📋

本講學習重點

異常偵測問題為何難以用一般分類模型解決?
統計方法(Z-score、IQR)的適用條件和限制?
Isolation Forest 的核心原理是什麼?
Autoencoder 如何偵測異常?重建誤差是什麼?
如何決定異常偵測的判斷閾值?

異常偵測特殊性:標注資料極少(真實詐欺案例佔比<1%)、異常形態多樣未知、正常/異常的邊界模糊,適合無監督或半監督方法

統計方法:Z-score(超過 3 個標準差)、IQR(落在 Q1-1.5×IQR 到 Q3+1.5×IQR 外)、馬哈拉諾比斯距離(多變量版 Z-score)

Isolation Forest:隨機切割資料空間,異常點因孤立而需要的切割次數少(路徑短),平均路徑長度越短、異常分數越高

Autoencoder:用神經網路學習「正常模式」的壓縮表示,對新資料重建;正常資料重建誤差小,異常資料重建誤差大

One-Class SVM:在特徵空間中找到包住正常資料的最小超球面,球面外的點視為異常

閾值設定:要在偽陽性(誤報,消耗人工審查成本)和偽陰性(漏報,放走真實異常)之間取捨,業務優先考量

類別不平衡問題:詐欺/異常比例極低(如 0.1%),評估指標不能用 Accuracy,要用 Precision、Recall、AUC-PR

📌 異常偵測是識別『和正常模式不符』的資料點的任務,核心挑戰是正常資料充足但異常案例稀少且形態未知。統計方法(Z-score、IQR)簡單但只適用於單維度和正態分佈;Isolation Forest 高效且適合高維度資料;Autoencoder 能學習複雜的非線性正常模式,特別適合影像和序列資料。實際應用中,閾值的設定和評估指標的選擇(Precision-Recall 而非 Accuracy)比模型選擇更為關鍵。
異常偵測

🎙️ Podcast(中文)

0:00 / 0:00

一句話搞懂

異常偵測是在大量「正常」資料中,自動找出「和正常模式不符」的少數案例——不需要(也往往無法)事先標注所有的異常形態;從信用卡詐欺偵測、工廠設備故障預警、網路入侵偵測,到醫療影像的病灶識別,AI 系統通過學習「什麼是正常」,自動將不符合正常模式的資料標記為潛在異常,大幅降低了人工監控的成本和漏報率。


白話解說

為什麼異常偵測不能直接用分類模型

你可能會想:「詐欺偵測不就是一個二元分類問題嗎?標注正常交易和詐欺交易,然後用 XGBoost 訓練,不就好了?」這個想法方向是對的,但面臨三個根本性的挑戰:

第一:極端的類別不平衡。在台灣的信用卡詐欺資料中,詐欺交易佔比通常不到 0.1%。在一百萬筆交易中,大約只有 1,000 筆是詐欺。如果你訓練一個「全說正常」的「模型」,準確率高達 99.9%,但它對詐欺防護毫無用處。這是為什麼評估指標必須用 Precision(精確率)、Recall(召回率)和 AUC-PR,而不是 Accuracy。

第二:異常的形態是未知的、不斷演化的。詐欺犯每天都在設計新的詐欺手法,如果你只是訓練了一個「找出已知詐欺模式」的分類器,遇到全新的詐欺手法就會漏報。而且,你也不可能事先標注所有可能的異常形態。無監督的異常偵測方法的優勢在於:它不需要知道「異常長什麼樣子」,只需要學習「正常長什麼樣子」,凡是不符合正常模式的都視為潛在異常。

第三:標注成本極高。標注「這筆交易是詐欺還是正常」需要安全專家逐筆審查,每份標注可能需要 15-30 分鐘的調查。對於每天數百萬筆的交易量,全面標注是不現實的。

因此,異常偵測通常採用以下三種策略之一:

  • 無監督(Unsupervised):完全不用標注資料,純粹從資料分佈中找出離群點。Isolation Forest、Autoencoder 都屬於此類。
  • 半監督(Semi-supervised):只標注正常資料,把學習到的「正常邊界」之外視為異常。One-Class SVM 屬於此類。
  • 弱監督(Weakly Supervised):有少量不完整或不確定的標注,配合業務規則使用。

統計方法:Z-score 和 IQR

最簡單的異常偵測是統計方法,直觀易懂,適合快速的基線分析。

Z-score(標準分數):把每個資料點轉換為「它距離平均值幾個標準差」的分數。如果 Z = (x - μ) / σ,通常以 Z > 3 作為判斷為異常的閾值(正態分佈中,3 個標準差外的資料約佔 0.3%)。

例如,監控伺服器的 CPU 使用率,假設歷史均值 45%、標準差 10%。某一刻 CPU 使用率突然跳到 92%,Z = (92 - 45) / 10 = 4.7,超過閾值 3,觸發異常告警。

IQR(四分位距)法:計算第 25 百分位數(Q1)和第 75 百分位數(Q3),IQR = Q3 - Q1。落在 [Q1 - 1.5 × IQR, Q3 + 1.5 × IQR] 範圍外的資料點視為異常。IQR 法的優勢是對離群值本身不敏感(因為計算 IQR 不涉及平均值,而平均值容易被極端值拉偏),比 Z-score 更穩健。

馬哈拉諾比斯距離(Mahalanobis Distance):Z-score 的多變量版本。在多個特徵同時存在的情況下,馬哈拉諾比斯距離考慮了特徵之間的相關性——例如,一個用戶「凌晨 3 點在國外刷卡 10 萬元」,單看「凌晨 3 點」或「國外消費」都可能正常,但兩者同時出現加上高金額,組合起來才顯得異常。

統計方法的限制

  1. Z-score 假設資料符合正態分佈,對高度偏斜的分佈(如交易金額)效果差。
  2. 這些方法本質上只適合低維度資料,對高維度(數百個特徵)的資料,「維度詛咒」讓距離計算失去意義。
  3. 無法學習複雜的非線性正常模式(如用戶的整體行為模式)。

Isolation Forest:用隨機切割找孤立點

Isolation Forest(孤立森林)是 2008 年提出的機器學習算法,至今仍是業界使用最廣泛的表格資料異常偵測方法之一,它的核心直觀非常優美:異常點容易被孤立,正常點難以被孤立

想像你在一個散點圖中隨機畫直線來切割空間,把資料點逐一隔離。密密麻麻聚在一起的正常點,需要很多次切割才能把它們各自孤立(因為它們周圍有很多鄰居);而孤立地存在於資料邊緣的異常點,只需要幾次切割就能被隔離出來(因為周圍沒有鄰居)。

算法步驟:

  1. 建立多棵「隔離樹(Isolation Tree)」:每棵樹隨機選擇一個特徵、隨機選擇一個切割點,把資料空間遞迴地二分,直到每個資料點都被完全隔離。
  2. 計算每個資料點在所有樹中的「平均路徑長度」:平均路徑長度越短,說明這個點越容易被孤立,異常分數越高。
  3. 根據異常分數排名,設定閾值(如最高 5% 的異常分數)來識別異常。

Isolation Forest 的優勢:

  • 時間複雜度低:訓練速度快,適合大規模資料集。
  • 無需假設分佈:不像 Z-score 假設正態分佈。
  • 適合高維度:對多特徵的表格資料效果好。
  • 超參數少:主要只有 n_estimators(樹的數量)和 contamination(預期異常比例)。
from sklearn.ensemble import IsolationForest
import numpy as np

# 假設 X 是特徵矩陣(正常資料 + 少量異常資料混合)
X = ...

# contamination 是預期的異常比例,例如 0.01 = 預期 1% 的資料是異常
model = IsolationForest(n_estimators=100, contamination=0.01, random_state=42)
model.fit(X)

# 預測:-1 = 異常,1 = 正常
predictions = model.predict(X)
anomaly_scores = model.score_samples(X)  # 分數越負,異常可能性越高

Autoencoder:用神經網路學習「正常的樣貌」

Autoencoder(自動編碼器)是一種神經網路架構,它的訓練目標是「輸入什麼就輸出什麼」——把輸入資料壓縮成低維度的隱藏表示(Encoding),再從隱藏表示還原回原始維度(Decoding)。

聽起來很像在做無意義的複製,但關鍵在於中間的壓縮瓶頸:網路必須把輸入資料的本質結構壓縮進比原始維度更小的隱藏空間,然後再重建。訓練過程迫使網路學習資料中最重要的模式(正常的特徵組合),而不是簡單地記憶每個輸入。

異常偵測的原理:

  1. 只用正常資料訓練 Autoencoder:網路學會了「正常資料長什麼樣子」的壓縮表示。
  2. 計算測試資料的重建誤差(Reconstruction Error):對一個輸入,計算「Autoencoder 輸出」和「原始輸入」之間的差異(如 MSE)。
  3. 設定閾值:正常資料因為符合模型學到的模式,重建誤差很小;異常資料的模式不在訓練集中,網路不知道如何良好重建,重建誤差很大。重建誤差超過閾值的資料點被標記為異常。

Autoencoder 特別適合以下場景:

  • 高維度非結構化資料:影像(醫療影像的病灶、工廠零件的瑕疵)、音訊(設備的異常噪音)。
  • 複雜的非線性正常模式:用戶的行為序列(正常用戶的點擊和瀏覽路徑有複雜的規律,異常帳號的行為序列會有根本性的不同)。
  • 多變量時間序列異常:把一段時間窗口的多個感測器讀數輸入 Autoencoder,學習感測器之間的正常相關性,任何一個感測器偏離正常相關模式就會被偵測到。

閾值設定:異常偵測中最難的問題

無論選擇哪種算法,最終都需要設定一個閾值,決定「異常分數高到多少才視為異常」。閾值設定涉及業務的核心取捨:

偽陽性(False Positive,誤報):正常的被標記為異常。對詐欺偵測來說,正常的交易被攔截會讓用戶不滿和信任受損;對工廠設備告警來說,過多的誤報讓維修人員疲於奔命,最終「告警疲勞」讓他們忽視真實告警。

偽陰性(False Negative,漏報):真實的異常被遺漏。信用卡詐欺漏報直接導致財務損失;工廠設備故障漏報可能導致生產停線甚至安全事故。

Precision-Recall 曲線:透過在不同閾值下計算 Precision 和 Recall,畫出 PR 曲線,根據業務需求(更看重「不誤報」還是「不漏報」)選擇最合適的操作點。

在實際業務中,閾值往往不是純數據問題,而是業務策略問題:一個詐欺偵測系統的閾值設定,本質上是「我們願意用多少的用戶體驗摩擦(誤攔截正常交易)來換取多少的詐欺損失減少」的商業決策。


應用場景

場景 資料類型 適用方法 判斷機制
信用卡詐欺偵測 交易特徵表格(金額、地點、時間、商家) Isolation Forest、XGBoost(半監督) 異常分數 + 業務規則
工廠設備預測維護 IoT 感測器時間序列(溫度、振動、電流) Autoencoder(多變量時間序列)、統計控制圖 重建誤差超過閾值觸發告警
網路入侵偵測 網路封包特徵(流量大小、連接頻率、協議) Isolation Forest、One-Class SVM 結合 SIEM 系統的規則引擎
醫療影像瑕疵偵測 CT/X-ray 影像 卷積 Autoencoder 重建誤差熱圖定位異常區域
金融市場風險監控 多資產價格時間序列 LSTM Autoencoder 突然的相關性結構改變
電商假評論偵測 評論文字 + 行為特徵 文字 Autoencoder + Isolation Forest 語言模式異常 + 行為模式異常
電力網格異常用電 每日電表讀數時間序列 STL 分解後的統計方法 分解後的殘差項超過正常範圍

常見誤區

誤區 1:「異常偵測算法找到的『異常』就是真實的問題,可以直接採取行動」

這是生產環境中的高危認知。異常偵測算法標記的「異常」只是「和訓練時期的正常資料模式不符」,但「不符合正常模式」有很多種可能的解釋,並非所有都是真正的問題:

業務變化導致的「正常異常」:一個信用卡交易異常偵測系統在疫情前訓練,疫情後用戶大量轉移到線上購物,海外刷卡大幅減少,境內線上消費暴增。如果沒有更新模型,系統會把大量完全正常的線上交易標記為異常(因為模式和訓練時不同),製造大量誤報。「異常」反映的是業務模式的改變,而非真實詐欺。

資料品質問題產生的「假異常」:感測器故障、數據傳輸錯誤、系統更新後的格式變化,都可能產生看起來「異常」的資料點,但根本原因是資料管道的問題,而非被監控的系統本身出了問題。直接把這些「異常」當真處理,只會浪費維修人力和資源。

正確的做法:異常偵測算法應該作為「第一道篩選」,把需要關注的案例從百萬分之一的比例縮小到千分之一或萬分之一,然後仍然需要人工(或後續的更精細的自動化系統)來驗證這些「候選異常」是否是真實問題。在詐欺偵測中,通常先用 Isolation Forest 快速篩選出高風險交易(佔比 1-2%),再用更精細的規則引擎或人工審查來確認;在設備監控中,觸發告警後由工程師到現場確認,而非直接停機。

誤區 2:「我有 1,000 個詐欺案例,訓練一個分類模型比無監督異常偵測更好」

這個說法部分正確,但忽略了一個根本性的問題:已知的詐欺案例只代表你已經觀察到的詐欺手法,無法代表未來的新型詐欺

在 2020 年之前,「掃碼詐欺(用假二維碼替換真二維碼)」幾乎不存在,任何在 2020 年前訓練的分類模型都不可能識別這種新型詐欺。但一個無監督的異常偵測模型,因為掃碼詐欺的金額模式、時間模式、商家類型都和正常消費模式不符,有機會捕捉到這種新型詐欺的早期案例。

實際上,業界最佳實踐往往是混合策略

  • 規則引擎:基於已知的高置信度詐欺規則(如「異地 10 分鐘內兩筆交易」),即時攔截明顯詐欺。
  • 監督學習(有標注的歷史詐欺資料):高精確率地識別已知模式的詐欺。
  • 無監督異常偵測:Isolation Forest 或 Autoencoder 作為「未知異常探測器」,發現新型詐欺手法的早期訊號。

這三層系統互補,缺一不可。純粹依賴監督學習會對新型詐欺束手無策;純粹依賴無監督異常偵測則無法達到足夠的 Precision(太多誤報)。

誤區 3:「Autoencoder 重建誤差越低說明模型越好,應該盡量降低重建誤差」

這個誤解會讓你的 Autoencoder 完全失去異常偵測能力,核心問題是過擬合(Overfitting)

如果 Autoencoder 的網路架構太深太寬(容量太大),或者訓練時間太長,網路可能學會了幾乎完美地記憶所有訓練資料,包括訓練資料中的異常值(即使訓練資料中只有少量異常,模型容量夠大的情況下也可能把它們「記住」)。這時候,重建誤差對所有資料(包括真正的異常)都很低,喪失了區分正常和異常的能力。

另一個情況是 Autoencoder 容量過大,學會了把輸入幾乎原封不動地複製到輸出(通過增加隱藏層的維度,讓「壓縮」形同虛設),這樣什麼資料都能被低誤差地重建,異常偵測失效。

正確的方法:

  • 設定適當的瓶頸(Bottleneck)大小:隱藏表示的維度應遠小於輸入維度(如輸入 100 維,隱藏層 10-20 維),強迫模型學習真正的壓縮表示,而非走捷徑。
  • 提前停止訓練(Early Stopping):在驗證集的重建誤差停止下降時停止訓練,避免過擬合。
  • 在驗證集上評估異常偵測能力(而非重建誤差):如果有少量已知的異常樣本,在驗證集上同時計算已知正常和已知異常的重建誤差分佈,確保兩者之間有足夠的分離。

小練習

練習 1:選擇合適的異常偵測方法

以下四個業務場景各需要一個異常偵測系統,請為每個場景推薦最合適的方法,並說明理由:

  1. 電商退貨異常偵測:每天有 50 萬筆退貨申請,想找出「可能是詐騙性退貨」(如同一地址大量退貨後的轉售、偽造損壞理由)。有 500 筆歷史確認詐騙退貨的標注資料。

  2. 半導體晶圓品質檢測:生產線末端對每片晶圓拍一張顯微影像(512×512 像素),想偵測晶圓表面的細微瑕疵(刮痕、粉塵污染等)。瑕疵形態多樣,無法事先枚舉所有類型。

  3. 醫院 ICU 病患生命徵象監控:同時監控 50 位 ICU 病患的 8 個生命徵象指標(心跳、血壓、血氧等),每秒更新一次,需要在 30 秒內發出告警。絕大多數時候所有指標都在正常範圍,偶爾某個病患的指標組合會出現預示危機的異常模式。

  4. 雲端服務日誌異常偵測:每分鐘產生 1000 萬條系統日誌(文字格式,如 "ERROR: connection timeout to database after 30s"),想偵測前所未見的新型錯誤模式。

練習 2:設計信用卡詐欺偵測評估

一個信用卡詐欺偵測系統在測試集上的結果如下:

  • 測試集:100,000 筆交易,其中 200 筆是真實詐欺(詐欺率 0.2%)
  • 模型預測為詐欺:500 筆
  • 其中正確預測為詐欺(True Positive):150 筆
  • 錯誤預測為詐欺(False Positive):350 筆
  • 未被偵測到的詐欺(False Negative):50 筆
  1. 計算模型的 Accuracy、Precision、Recall(召回率)和 F1-Score。
  2. 說明為什麼 Accuracy 不適合評估這個模型。
  3. 在 Precision 和 Recall 之間,信用卡詐欺偵測應該優先哪個?為什麼?你的答案會如何影響閾值的設定?
查看答案 **練習 1:選擇合適的異常偵測方法** 1. **電商詐騙退貨偵測**:推薦**混合方法(半監督 + 業務規則)**。 - 有 500 筆標注的詐欺退貨樣本,可以作為訓練正類別(詐欺)的有限監督訊號。 - 建議:XGBoost 或 LightGBM 的二元分類器(利用 500 筆標注資料)+ Isolation Forest(偵測未知的新型詐騙模式)+ 業務規則(如同一地址 30 天內超過 10 筆退貨,直接標記)的三層組合。 - 因為有部分標注資料,純無監督方法(Isolation Forest 單獨使用)會浪費這些有價值的監督訊號。混合策略是業界最佳實踐。 2. **半導體晶圓影像瑕疵偵測**:推薦**卷積 Autoencoder(Convolutional Autoencoder)**。 - 理由:瑕疵形態多樣(刮痕、粉塵、製程缺陷各有不同形態),且無法事先枚舉,這是典型的「只知道正常,不知道異常長什麼樣」的場景,最適合 Autoencoder。 - 只用良品晶圓影像訓練卷積 Autoencoder,良品的重建誤差低;有瑕疵的晶圓因為影像的局部區域和正常模式不符,重建誤差高,且重建誤差的熱力圖可以直接定位瑕疵位置(可解釋性好)。 - 業界實際案例:台積電等半導體廠商廣泛使用類似架構做自動光學檢測(AOI)。 3. **ICU 生命徵象監控**:推薦**多變量時間序列 Autoencoder(LSTM Autoencoder)或統計控制圖(CUSUM)**。 - 每秒更新的 8 個指標需要同時分析其組合模式(例如,心跳加快同時血壓下降的組合比單一指標的異常更有臨床意義)。LSTM Autoencoder 能學習多個指標之間的時間依賴性和正常相關性。 - 延遲要求(30 秒內告警)要求模型在每個新的時間步都能即時產生異常分數,LSTM Autoencoder 可以做到滑動窗口的即時推論。 - 也可以配合基於每個指標個別的統計控制圖(如 CUSUM,設計用於偵測均值的持續偏移),兩者互補:CUSUM 偵測單一指標的系統性偏移,LSTM Autoencoder 偵測多指標的組合模式異常。 4. **雲端服務日誌異常偵測**:推薦**文字嵌入 + Isolation Forest,或 BERT 微調的語言模型異常偵測**。 - 首先把日誌文字轉換為嵌入向量(如 TF-IDF、sentence-transformers 或專為日誌設計的 LogBERT),再用 Isolation Forest 在嵌入空間中找離群的日誌模式。 - 「前所未見的新型錯誤模式」是典型的無監督場景,不能用監督分類。 - 日誌的文字嵌入讓語義相似的錯誤訊息在向量空間中彼此靠近,一個全新的錯誤類型在嵌入空間中孤立地存在,恰好是 Isolation Forest 擅長偵測的類型。 --- **練習 2:信用卡詐欺偵測評估計算** 已知: - 總計:100,000 筆 - 真實詐欺(Positive):200 筆 - 真實正常(Negative):99,800 筆 - 預測詐欺:500 筆(TP=150, FP=350) - 預測正常:99,500 筆(FN=50, TN=99,450) **(1)計算各指標** **Accuracy(準確率)**: = (TP + TN) / 總數 = (150 + 99,450) / 100,000 = 99,600 / 100,000 = **99.6%** **Precision(精確率)**: = TP / (TP + FP) = 150 / (150 + 350) = 150 / 500 = **30%** 「模型預測為詐欺的交易中,真正是詐欺的比例只有 30%,另外 70% 是誤報。」 **Recall(召回率 / 敏感性)**: = TP / (TP + FN) = 150 / (150 + 50) = 150 / 200 = **75%** 「在所有真實詐欺中,模型成功識別了 75%,有 25%(50 筆)漏掉了。」 **F1-Score**: = 2 × (Precision × Recall) / (Precision + Recall) = 2 × (0.30 × 0.75) / (0.30 + 0.75) = 2 × 0.225 / 1.05 = **42.9%** **(2)為什麼 Accuracy 不適合評估** Accuracy 99.6% 看起來非常高,但這個數字沒有意義:即使一個「永遠預測正常」的笨模型,也能達到 99.8% 的 Accuracy(因為 99,800 / 100,000 = 99.8%),而且這個笨模型對詐欺防護**完全沒有用**。 在極端不平衡的類別分佈下(詐欺只佔 0.2%),Accuracy 主要反映的是多數類別(正常交易)的表現,少數類別(詐欺)的偵測能力對 Accuracy 幾乎沒有影響。這就是為什麼必須用 Precision、Recall 和 AUC-PR 等能反映少數類別表現的指標。 **(3)Precision vs. Recall 的優先選擇** **對信用卡詐欺偵測,Recall(召回率)通常更重要**,但實際上需要兩者都考量: 漏報詐欺(低 Recall)意味著讓真實詐欺交易通過,造成直接的財務損失(銀行賠付或用戶損失),且聲譽損失難以挽回。 誤報(低 Precision)意味著攔截正常交易,造成用戶體驗摩擦(被要求二次驗證、交易被拒),影響用戶信任和留存率。如果誤報率太高,用戶可能轉到競爭對手的卡。 **閾值影響**:提高 Recall(減少漏報)需要**降低判斷為詐欺的閾值**——即使模型只有 60% 的把握認為是詐欺,也標記為詐欺;這會讓更多正常交易被誤報(Precision 下降)。反之,提高 Precision(減少誤報)需要**提高閾值**,只在非常高置信度時才攔截,但會漏掉更多真實詐欺(Recall 下降)。 業界通常的做法是:設定最低可接受的 Recall 要求(如「至少要抓到 80% 的詐欺」),在此前提下找讓 Precision 最高(誤報最少)的閾值,作為最終部署參數。不同業者的容忍度不同,視卡片定位(高端信用卡更重視用戶體驗)和詐欺金額分佈而定。

關鍵字自我檢核

✅ 異常偵測 ✅ Anomaly Detection ✅ 離群值 ✅ Outlier ✅ Isolation Forest ✅ 孤立森林 ✅ Autoencoder ✅ 自動編碼器 ✅ Z-score ✅ IQR ✅ 四分位距 ✅ One-Class SVM ✅ Local Outlier Factor ✅ LOF ✅ 無監督學習 ✅ Unsupervised Learning ✅ 詐欺偵測 ✅ Fraud Detection ✅ 半監督學習 ✅ Semi-supervised Learning ✅ 時間序列異常 ✅ Time Series Anomaly ✅ 重建誤差 ✅ Reconstruction Error