高基數特徵 是什麼?
High Cardinality:高基數特徵 的完整解釋
高基數特徵(High Cardinality)指某個類別型特徵包含大量不同取值的情況,例如用戶 ID、商品 SKU、地理位置等可能有數萬至數百萬種取值,直接進行 One-Hot 編碼會導致維度爆炸,需
核心概念
「基數(Cardinality)」在資料庫和統計學中指一個集合中不重複元素的數目。特徵的基數即該特徵列中唯一取值的數量:
- 低基數:性別(男/女)、月份(1–12)、評分等級(1–5)
- 中等基數:縣市(22 縣市)、職業類別(數十種)
- 高基數:用戶 ID(數百萬)、商品 SKU、URL、IP 地址、自然語言詞彙
沒有硬性門檻定義「多少算高」,通常超過數百種取值且佔特徵空間主要部分的類別特徵即可視為高基數。
運作原理
為何高基數是問題?
傳統的 One-Hot 編碼為每個類別建立一個二元維度。若特徵有 N 種取值,One-Hot 後的向量長度為 N。N = 1,000,000(百萬商品)時,One-Hot 向量將有一百萬個維度,且幾乎全為零(極度稀疏),導致:
- 記憶體用量暴增
- 訓練時間顯著拉長
- 許多取值出現次數極少(長尾分布),統計信號不足
- 線性模型難以從中學習有效的權重
主要處理策略
- 目標編碼(Target Encoding)
用該類別對應的目標變數(如轉換率)的統計量(均值、中位數)替換原始類別值。例如,將「城市」特徵替換為該城市用戶的平均購買金額。優點:捕捉類別與目標的直接關係;缺點:容易過擬合(需搭配 Leave-One-Out 或交叉驗證計算)。
- 嵌入向量(Embedding)
為每個類別學習一個低維稠密向量表示(如 32 維),類似 NLP 中的詞嵌入。深度學習模型(如神經網路推薦系統)普遍採用此方法,能捕捉類別之間的語意相似性。Embedding 本身作為模型參數,與下游任務聯合訓練。
- 頻率編碼(Frequency / Count Encoding)
用類別在訓練集中出現的次數或頻率替換原始值。低頻類別(長尾)對應較小的數值,有助於模型學習「罕見類別」和「常見類別」的差異。
- 特徵雜湊(Feature Hashing / Hashing Trick)
使用雜湊函數將所有類別值映射至固定長度的向量(如 2¹⁸ 維),避免維度隨基數線性成長。代價是可能發生雜湊碰撞(不同類別映射到同一維度),但在實際應用中影響通常較小。
- 低頻合併(Rare Category Grouping)
將出現次數低於閾值的類別統一歸為一個「其他(Other)」類別,減少有效基數。適合在目標編碼或 One-Hot 前進行前處理。
實際應用
廣告點擊率(CTR)預測
廣告場景中,廣告 ID、用戶 ID、應用 ID 均為高基數特徵,且資料量龐大。DeepFM、Wide & Deep 等模型透過 Embedding 將高基數特徵壓縮至低維空間,再進行特徵交叉學習。
電商推薦系統
商品 SKU(可達百萬級)和用戶 ID 是推薦系統中最典型的高基數特徵。協作過濾和深度推薦模型均依賴 Embedding 技術將 SKU 和用戶映射至相同的潛在空間,計算相似度進行推薦。
自然語言處理
詞彙表本身就是高基數類別特徵,詞嵌入(Word Embedding)即高基數特徵的嵌入處理方案,是 NLP 中最成功的特徵工程實踐之一。
常見誤區
誤區一:直接 One-Hot 就好,現代硬體撐得住
儘管 GPU 記憶體持續增大,在百萬級基數特徵上進行 One-Hot 仍然是低效的選擇:稀疏矩陣的 batch 訓練效率遠低於稠密 Embedding,且 One-Hot 無法捕捉類別間的語意關係,而 Embedding 能學習到「iPhone 15 和 iPhone 14 相似」這類語意資訊。
誤區二:目標編碼不會過擬合
若使用全部訓練資料計算每個類別的目標均值,模型在訓練集上看到的已是「含有標籤資訊的特徵」,會導致嚴重的資料洩漏(Data Leakage)。MUST 使用 Leave-One-Out 計算或在交叉驗證的每個 Fold 內分別計算,確保編碼過程不洩漏驗證集標籤。
誤區三:特徵雜湊碰撞嚴重影響效能
在實際大規模應用(如搜尋廣告系統)中,使用 2¹⁸ 至 2²² 的雜湊空間通常已能將碰撞率控制在可接受範圍內,且被碰撞合併的類別對最終效能影響有限。Google、Facebook 等公司的生產系統廣泛採用 Feature Hashing。
與相關技術的比較
| 處理方法 | 維度數 | 訓練成本 | 捕捉類別相似性 | 資料洩漏風險 | 適用場景 |
|---|---|---|---|---|---|
| One-Hot | 等於基數 N | 高(稀疏) | 否 | 無 | 低基數(< 50) |
| 目標編碼 | 1 | 低 | 間接(透過目標) | 高(需防範) | 監督任務、中高基數 |
| Embedding | 自訂(16–512) | 中 | 是(語意) | 無 | 深度學習、超高基數 |
| 頻率編碼 | 1 | 低 | 否 | 低 | 快速基線、高基數 |
| Feature Hashing | 固定(自訂) | 低 | 否(碰撞) | 無 | 大規模線上系統 |