---
title: "目標編碼（Target Encoding）"
slug: target-encoding
language: zh-TW
source: https://aiterms.tw/terms/target-encoding
updated_at: 2026-06-22
tags: [特徵工程, 類別編碼, 高基數特徵, 過擬合, Kaggle]
ipas_term: false
---

# 目標編碼（Target Encoding）

將類別特徵替換為該類別對應的目標變數統計量（通常是條件平均值）的特徵工程技術。

## 完整說明

目標編碼（Target Encoding）是一種用於處理類別型特徵的編碼方法，其核心思路是將每個類別值替換為訓練集中該類別對應的目標變數（label）的統計量，最常用的是條件平均值（conditional mean）。相較於獨熱編碼，目標編碼不會產生高維稀疏特徵，特別適用於高基數（high-cardinality）類別特徵；但若不加防範，容易因資訊洩漏（target leakage）導致過擬合。

## 常見問題

### 目標編碼和獨熱編碼，什麼時候應該選哪個？

主要判斷標準是類別的基數（cardinality，不同值的數量）。基數低（< 10-20 個）的類別特徵，獨熱編碼簡單可靠，不引入洩漏風險；基數高（> 50 個，特別是 > 1000 個）時，獨熱編碼產生的稀疏矩陣會讓許多模型效率低落，目標編碼通常是更好的選擇。使用目標編碼時必須搭配 K-Fold 策略或平滑化，並在測試集評估時確保編碼只用訓練集的統計量，避免洩漏。

### CatBoost 宣稱能自動處理類別特徵，它用的是目標編碼嗎？

是的，CatBoost 內部使用了一種有序目標編碼（ordered target encoding），其做法類似於 K-Fold 目標編碼，但更精細：在建立每棵樹時，對每個樣本計算類別均值時都只使用「在隨機排列中排在該樣本前面」的訓練樣本，確保沒有資訊洩漏。這讓 CatBoost 可以直接輸入類別特徵而不需要手動前處理，這也是 CatBoost 在處理含大量類別特徵的表格資料時常有良好表現的原因之一。

### 目標編碼在時間序列場景下有什麼特別需要注意的地方？

在時間序列場景中，目標洩漏的風險更需要謹慎處理。正確做法是使用「時間點感知」的目標編碼：計算某個時間點 t 的類別編碼值時，只能使用 t 之前的歷史資料，絕對不能使用 t 之後的資料。一般 K-Fold 目標編碼若不考慮時間順序，可能會讓「未來」的目標值洩漏進特徵中，在驗證集上表現虛高但實際部署後效能大幅下滑。建議在時間序列情境下使用時間序列交叉驗證（Time Series CV）搭配擴展窗口（expanding window）策略計算目標編碼。

---

來源：https://aiterms.tw/terms/target-encoding
快查頁：https://aiterms.tw/terms/target-encoding
最後更新：2026/06/22
深度解說：https://aiterms.tw/learning/what-is-target-encoding