iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用

Label Encoding 最常見的潛在風險是什麼?

原題 05

在進行資料前處理時,若使用 Label Encoding 將類別變數轉換為數字型態,下列何者為最常見的潛在風險?

白話

在資料前處理時,有一種方法叫 Label Encoding,它把類別資料(例如「北部」「中部」「南部」)直接換成數字(0、1、2)。

問你:這種做法最常碰到的潛在問題是什麼?

點選你的答案。

01 總結

一句話總結

Label Encoding 的最大風險是:把沒有順序的類別換成數字,讓模型誤以為類別之間有大小順序關係(虛假順序關係)。

02 情境

先感受問題:「顏色」被賦予了大小順序

嘉誠電商想用機器學習預測哪款手機殼最好賣。資料中有一欄「顏色」:

紅色、藍色、黑色、白色、金色

用 Label Encoding 轉換後變成:

紅色 → 0、藍色 → 1、黑色 → 2、白色 → 3、金色 → 4

現在問題來了:模型看到 0、1、2、3、4,會以為:

  • 金色(4)> 白色(3)> 黑色(2)
  • 黑色 = 藍色 × 2
  • 紅色 + 藍色 ≈ 黑色

但這些顏色之間根本沒有大小關係!紅色跟藍色沒有誰比誰大,但數字 0 跟 1 有大小之分。模型就這樣被「騙了」,學到了一個本來不存在的規律。

03 對照

Label Encoding 用在無序類別上的五個踩坑點

  1. 線性模型誤讀順序:線性迴歸、邏輯迴歸把特徵值的大小當成「程度」,黑色(2)= 紅色(0)的兩倍,但顏色沒有這種意義。
  2. 距離型模型誤計算距離:KNN 計算歐氏距離時,「紅色(0)到金色(4)」的距離是 4,「紅色(0)到藍色(1)」的距離是 1,但兩對顏色其實距離一樣「遠」(都是不同顏色)。
  3. 樹模型相對安全,但仍可能有問題:決策樹會自動做分裂,對順序不太敏感,但若類別太多,還是可能被順序影響分裂方式。
  4. 難以解釋模型結果:如果模型說「顏色值越大銷量越好」,這個結論毫無意義,只是編碼的產物。
  5. 容易忽略的陷阱:開發者看到「成功轉成數字」就以為前處理完成,沒意識到已經引入了錯誤的假設。
04 解法

無序類別要用 One-Hot Encoding,不用 Label Encoding

解決虛假順序問題的方法是 One-Hot Encoding(獨熱編碼):把每個類別變成一個獨立的二元欄位。

紅色 → [1, 0, 0, 0, 0]
藍色 → [0, 1, 0, 0, 0]
黑色 → [0, 0, 1, 0, 0]

每個顏色都變成「有就是 1,沒有就是 0」的欄位,模型看不到任何大小關係。

Label Encoding 真正適合的場合:有順序的類別(Ordinal Data),例如「小、中、大」或「初級、中級、高級」,這些類別本來就有大小順序,Label Encoding 是正確選擇。

這就是選項 B 講的:會引入類別之間的虛假順序關係

技術版:Label Encoding 與 One-Hot Encoding 的使用時機

sklearn 的兩種編碼方式:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np

colors = np.array(['紅色', '藍色', '黑色', '白色'])

# Label Encoding(適合有序類別)
le = LabelEncoder()
label_encoded = le.fit_transform(colors)
# [2, 0, 1, 3](依字母/漢字排序)

# One-Hot Encoding(適合無序類別)
ohe = OneHotEncoder(sparse_output=False)
ohe_encoded = ohe.fit_transform(colors.reshape(-1, 1))
# [[0,0,1,0], [1,0,0,0], [0,1,0,0], [0,0,0,1]]

決策規則:

  • 類別有自然順序(Ordinal)→ Label Encoding(或 Ordinal Encoding)
  • 類別無順序(Nominal)→ One-Hot Encoding
  • 類別數量很多(High Cardinality)→ Target Encoding 或 Embedding

One-Hot Encoding 的缺點:類別太多時,欄位數量暴增(例如城市有 1000 個,就會新增 1000 欄),造成維度爆炸(Curse of Dimensionality)。這時可用 Target Encoding(用目標變數的條件均值來編碼類別),在類別數量多時效果更好。

05 陷阱

為什麼其他選項是錯的

A無法處理缺值

字面在說什麼

Label Encoding 碰到缺值(NaN)就無法處理。

為什麼不對

缺值是所有編碼方式都可能碰到的問題,不是 Label Encoding 特有的限制。通常在編碼之前就先做缺值填補(imputation)。況且 sklearn 的 LabelEncoder 碰到 NaN 會拋出錯誤,但這是實作細節,不是 Label Encoding 方法本身的「最常見風險」。

誰會選錯

想到「前處理常見問題是缺值」的人。但題目問的是 Label Encoding 特有的風險,不是所有前處理方法共同的問題。

C無法擴展至新資料

字面在說什麼

訓練時的類別編碼,遇到新資料(新類別)就無法用。

為什麼不對

「遇到訓練集沒見過的新類別值無法處理」確實是 Label Encoding 的限制,但這不是「最常見的潛在風險」。這可以透過設定 handle_unknown 參數解決,也是 One-Hot Encoding 同樣會面對的問題。「引入虛假順序關係」比這個問題更根本、更常造成模型誤導。

誰會選錯

想到「訓練集和測試集類別不一致」這個實務困難的人。這個問題確實存在,但不是 Label Encoding 最核心的缺點。

D記憶體佔用過高

字面在說什麼

Label Encoding 會讓記憶體暴增。

為什麼不對

Label Encoding 把類別換成一個整數,記憶體用量比原本的字串更少,不是更多。記憶體問題是 One-Hot Encoding 的缺點(類別多的時候會生出大量新欄位),不是 Label Encoding 的問題。

誰會選錯

把 One-Hot Encoding 的缺點(高維度、記憶體大)誤記成 Label Encoding 的缺點的人。兩種方法的問題恰好相反。

06 變形

同個考點下次怎麼變形

變形 1

教育程度(小學、國中、高中、大學)適合用 Label Encoding 還是 One-Hot Encoding?

直覺

教育程度有從低到高的順序,應該怎麼編碼?

答案

適合用 Label Encoding(或 Ordinal Encoding)。因為教育程度有自然的順序關係(小學 < 國中 < 高中 < 大學),這個順序是真實存在的,讓模型學到這個大小關係是正確的,不是虛假的。

變形 2

One-Hot Encoding 在類別數很多時有什麼問題?

直覺

One-Hot 是解決 Label Encoding 順序問題的方案,但它自己有什麼缺點?

答案

高基數(High Cardinality)問題:類別數很多時(例如城市、郵遞區號),One-Hot Encoding 會產生大量新欄位(1000 個城市 = 1000 個新欄位),引發維度爆炸,增加模型訓練時間和記憶體,也可能導致過擬合。

變形 3

決策樹對 Label Encoding 的虛假順序問題免疫嗎?

直覺

決策樹不是靠大小判斷,應該不受順序影響?

答案

相對免疫,但不是完全免疫。決策樹的分裂是找最佳切點,對於無序類別,它會用類似「顏色值 ≤ 1.5」來分裂,實際上仍把順序資訊用進去了。對於類別數不多的情況影響有限,但嚴格來說仍可能受到虛假順序的影響。

變形 4

Target Encoding 是什麼?什麼時候用?

直覺

類別太多用 One-Hot 不行,那還有什麼方案?

答案

Target Encoding 把每個類別替換成「該類別對應目標變數的平均值」。例如「紅色手機殼的平均銷量是 200 件」,就把紅色編碼成 200。這樣既能保留類別資訊,又不增加欄位數量。適合類別數多(High Cardinality)的情況,但要注意訓練集洩漏問題(需用交叉驗證方式計算)。

變形 5

Label Encoding 適合用在模型的目標變數(y)嗎?

直覺

Label Encoding 用在特徵(X)上有問題,那用在預測目標(y)上呢?

答案

適合。分類問題的目標變數(例如「貓/狗/鳥」→ 0/1/2)用 Label Encoding 沒問題,因為模型的任務是預測哪個類別,不是計算類別的大小關係。sklearn 的多分類模型(如 RandomForestClassifier)接受整數標籤。

07 延伸

想再往下看,這 5 個

出處

iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用 第 5 題

查看官方原文 PDF