離群值處理

識別並處理資料中的離群值(Outliers)。

使用範例

點擊下方按鈕在 Colab 中執行完整範例:

Open In Colab

範例 1:欄位特定離群值方法

---
Loader:
  load_benchmark_with_schema:
    filepath: benchmark://adult-income
    schema: benchmark://adult-income_schema

Preprocessor:
  outlier-field-specific:
    sequence:
      - outlier
    config:
      outlier:
        age: 'outlier_zscore'       # 對 age 欄位使用 Z-Score 方法
        fnlwgt: 'outlier_iqr'       # 對 fnlwgt 欄位使用 IQR 方法
        education-num: None         # 跳過此欄位的離群值處理

        # 注意:
        # - 設定為 None 的欄位:不會進行離群值處理
        # - 未列出的欄位(如 capital-gain、capital-loss、hours-per-week):
        #   會使用預設方法(outlier_iqr)

Reporter:
  save_data:
    method: save_data
    source:
      - Preprocessor
  save_schema:
    method: save_schema
    source:
      - Loader
      - Preprocessor
...

範例 2:全域離群值方法

---
Loader:
  load_benchmark_with_schema:
    filepath: 'benchmark://adult-income'
    schema: 'benchmark://adult-income_schema'

Preprocessor:
  outlier-global-simple:
    sequence:
      - outlier
    config:
      # 簡化語法:將一個全域方法套用到所有數值欄位
      outlier: 'outlier_isolationforest'

      # 可用的全域方法:
      # - 'outlier_isolationforest': Isolation Forest 演算法
      # - 'outlier_lof': Local Outlier Factor 演算法

      # 這等同於:
      # outlier:
      #   age: 'outlier_isolationforest'
      #   fnlwgt: 'outlier_isolationforest'
      #   education-num: 'outlier_isolationforest'
      #   capital-gain: 'outlier_isolationforest'
      #   capital-loss: 'outlier_isolationforest'
      #   hours-per-week: 'outlier_isolationforest'

Reporter:
  save_data:
    method: save_data
    source:
      - Preprocessor
  save_schema:
    method: save_schema
    source:
      - Loader
      - Preprocessor
...

可用的處理器

處理器說明適用類型全域處理
outlier_zscoreZ-Score 方法(|z| > 3)數值型
outlier_iqr四分位距方法(1.5 IQR)數值型
outlier_isolationforest隔離森林演算法數值型
outlier_lof局部離群因子演算法數值型

處理器詳細說明

outlier_zscore

使用 Z-Score 統計方法識別離群值。

判定標準

  • |Z-Score| > 3 視為離群值
  • Z-Score = (x - μ) / σ

範例

config:
  outlier:
    age: 'outlier_zscore'

outlier_iqr

使用四分位距(Interquartile Range)方法識別離群值。

判定標準

  • 低於 Q1 - 1.5 × IQR
  • 高於 Q3 + 1.5 × IQR
  • IQR = Q3 - Q1

範例

config:
  outlier:
    income: 'outlier_iqr'

outlier_isolationforest

使用 sklearn 的 Isolation Forest 演算法。

特性

  • 全域轉換(套用到所有數值欄位)
  • 適合多維度離群值檢測
  • 自動學習離群值模式

範例

config:
  outlier:
    age: 'outlier_isolationforest'
    # ⚠️ 會自動套用到所有數值欄位

outlier_lof

使用局部離群因子(Local Outlier Factor)演算法。

特性

  • 全域轉換(套用到所有數值欄位)
  • 基於密度的離群值檢測
  • 考慮局部資料分布

範例

config:
  outlier:
    income: 'outlier_lof'
    # ⚠️ 會自動套用到所有數值欄位

處理邏輯

一般離群值處理(Z-Score、IQR)

訓練階段(fit):
  計算統計參數(均值、標準差、四分位數)

轉換階段(transform):
  1. 識別離群值
  2. 移除包含離群值的列

還原階段(inverse_transform):
  ⚠️ 無法還原(離群值處理不可逆)

全域離群值處理(Isolation Forest、LOF)

訓練階段(fit):
  使用所有數值欄位訓練模型

轉換階段(transform):
  1. 使用模型預測離群值
  2. 移除被標記為離群值的列

還原階段(inverse_transform):
  ⚠️ 無法還原(離群值處理不可逆)

預設行為

不同資料類型的預設離群值處理:

資料類型預設處理器說明
數值型outlier_iqr使用四分位距方法
類別型不處理離群值
日期時間型outlier_iqr使用四分位距方法

系統會自動:

  1. 偵測到全域處理器
  2. 將所有數值欄位的處理器替換為該全域處理器
  3. 記錄警告訊息

注意事項

  • 不可逆性:離群值處理無法在後處理時還原
  • 資料減少:處理離群值會移除部分資料列
  • 全域覆蓋:使用全域處理器時,所有數值欄位的設定都會被覆蓋
  • 處理順序:建議在缺失值處理之後、編碼之前執行
  • 類別型資料:離群值處理不適用於類別型資料
  • 影響評估:移除過多離群值可能影響資料分布和模型效果
  • 合成資料:後處理時合成資料的範圍可能與原始資料略有差異

方法選擇建議

情況建議方法原因
單一欄位異常outlier_zscoreoutlier_iqr簡單有效,易於解釋
多維度離群值outlier_isolationforest考慮欄位間關聯性
密度基礎檢測outlier_lof適合非均勻分布資料
不確定時outlier_iqr穩健且廣泛適用