序數編碼(Ordinal Encoding)是什麼?

將類別型特徵依照其固有順序轉換為整數的編碼方式,保留類別間的大小關係。|本頁含完整原理、應用場景、iPAS 考試重點與 3 個常見問答。

英文
Ordinal Encoding
主題標籤
特徵工程、類別編碼、資料預處理
考點定位
非 iPAS 核心術語
最後更新
2026/06/22
序數編碼(Ordinal Encoding)是什麼? 特徵工程類別編碼
術語快查

搜尋意圖: 如果你在找「序數編碼 是什麼」或「序數編碼 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。

TL;DR: 將類別型特徵依照其固有順序轉換為整數的編碼方式,保留類別間的大小關係。

實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。

下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。

將類別型特徵依照其固有順序轉換為整數的編碼方式,保留類別間的大小關係。

序數編碼(Ordinal Encoding)是機器學習資料預處理中用於處理類別特徵的重要方法之一。其核心概念是:當類別特徵的各個值之間存在明確的大小或順序關係時,用能夠反映此順序的整數來代替原始類別標籤,讓演算法能夠感知並利用這種排序資訊。

最典型的序數型特徵例子包括:教育程度(國小 < 國中 < 高中 < 大學 < 研究所)、產品品質評級(差 < 普通 < 良好 < 優秀)、問卷的滿意度量表(非常不滿意 < 不滿意 < 普通 < 滿意 < 非常滿意)、衣服尺寸(XS < S < M < L < XL < XXL)等。對於這類具有內在順序的特徵,序數編碼能夠有效地將其語意保留在數值表示中。

序數編碼的實作相對簡單,通常透過建立一個對應字典(Mapping Dictionary),例如 {「差」: 0, 「普通」: 1, 「良好」: 2, 「優秀」: 3},將每個類別值替換為對應的整數。在 Python 的 scikit-learn 中,OrdinalEncoder 類別提供了標準化的實作,可以透過 categories 參數指定每個特徵的類別順序,確保編碼結果與業務語意一致。

理解序數編碼與其他類別編碼方法的差異至關重要。與獨熱編碼(One-Hot Encoding)相比,序數編碼不會增加特徵維度,對記憶體和計算資源更友好,但要求類別間確實存在順序關係。若對沒有固定順序的名義型特徵(Nominal Feature,如顏色、城市名稱)使用序數編碼,會人為賦予這些類別一種不存在的大小關係,可能誤導模型學習到錯誤的規律。

標籤編碼(Label Encoding)與序數編碼在形式上非常相似,兩者都是將類別映射為整數,但語意上有重要差異。標籤編碼通常用於目標變數(Y),且不保證映射的整數順序有意義。序數編碼則專門用於輸入特徵,且映射的整數順序需要嚴格對應業務中的順序邏輯。

在模型選擇上,序數編碼後的特徵對基於樹的模型(決策樹、隨機森林、XGBoost、LightGBM)效果最為直接,因為這類模型通過閾值分裂來利用特徵的相對大小,能夠自然地處理序數型數值。對於線性模型,序數編碼隱含了類別間等距的假設(例如「差到普通」的差距 = 「普通到良好」的差距),若類別間距並不均等,這個假設可能降低模型效果,此時可能需要進一步處理或採用其他編碼方式。

在 iPAS AI 應用規劃師的考試中,序數編碼通常出現在特徵工程與資料預處理的題目中,考題可能要求考生區分序數型與名義型特徵的編碼策略,或判斷在特定場景下應選擇哪種編碼方法。熟悉序數編碼的適用條件、優缺點,以及與獨熱編碼和標籤編碼的差異,是應對這類題目的關鍵。 序數編碼(Ordinal Encoding)是機器學習特徵工程中處理類別型變數的方法之一,將具有自然排序關係的類別特徵映射為整數,保留類別之間的順序資訊。

序數編碼最適合具有明確大小關係的類別特徵,例如教育程度(小學=1, 國中=2, 高中=3, 大學=4, 研究所=5)、商品評分(差=1, 尚可=2, 普通=3, 好=4, 非常好=5)、衣服尺碼(XS=1, S=2, M=3, L=4, XL=5)。在這些情況下,整數編碼正確反映了類別之間的順序關係,讓模型能從排序中學習有意義的特徵。

序數編碼與獨熱編碼(One-Hot Encoding)的選擇是特徵工程的重要決策點。獨熱編碼將每個類別轉為二元向量,適合無序類別(如國家名稱、顏色);序數編碼適合有序類別,且不增加特徵維度(高基數類別用獨熱編碼會造成維度爆炸)。然而,對於名義類別(如台北、台中、高雄),錯誤使用序數編碼會讓模型誤以為城市之間有大小關係,可能引入假的特徵資訊。

對於沒有自然順序的高基數類別特徵,目標編碼(Target Encoding)是有力替代:用每個類別對應的目標變數平均值替代類別標籤,既保留預測信號,又不增加維度。但目標編碼容易過擬合,需要搭配交叉驗證或平滑化技術使用。

在決策樹和隨機森林中,序數編碼和獨熱編碼的效果差異較小,因為樹模型本身通過分裂尋找最佳閾值,能處理任意數值特徵。但在線性模型和距離基礎算法中,序數編碼的值大小具有實際意義,必須確保排序正確反映類別的真實關係。

scikit-learn 的 OrdinalEncoder 允許用戶指定每個特徵的類別順序,確保編碼符合業務邏輯。

常見問題

什麼時候應該用序數編碼,什麼時候用獨熱編碼?

選擇編碼方式的關鍵在於判斷特徵值之間是否存在固有的順序關係。如果特徵是序數型的(Ordinal),也就是類別之間有明確的大小或等級關係(如教育程度、產品評級、溫度等級),應優先考慮序數編碼,它能保留這種排序資訊,且不增加特徵維度。如果特徵是名義型的(Nominal),類別之間只有區別而沒有大小關係(如城市名稱、顏色、職業類別),則應使用獨熱編碼,避免模型誤解數值大小代表某種優劣。對於高基數(High Cardinality)的名義型特徵(如有數百種類別的地區代碼),獨熱編碼會大幅增加維度,此時可考慮目標編碼(Target Encoding)或雜湊編碼(Hashing)。

序數編碼是否保證每個等級之間的差距相等?

序數編碼在數學表示上預設了等距假設,也就是將類別映射為 0、1、2、3 時,暗示了相鄰等級之間的差距相同。然而在現實中,這個假設未必成立。以客戶滿意度為例,從「非常不滿意」到「不滿意」的改善幅度,與從「滿意」到「非常滿意」的改善幅度在業務意義上可能並不相等。這種等距假設的問題在線性模型中尤為明顯,可能影響模型的學習效果。基於樹的模型(如決策樹、隨機森林)對此不敏感,因為它們只關注相對大小而非絕對差距。如果序數特徵的等級間距不均勻,可以考慮根據業務知識手動指定更合適的數值映射,而非一律使用連續整數。

若測試集出現訓練集中未見過的類別值,序數編碼該如何處理?

這是類別編碼在生產環境中常見的挑戰,被稱為「未知類別問題(Unseen Category Problem)」。序數編碼在遇到未知類別時,通常有幾種處理策略。第一是設定一個預設的「未知」整數值(如 -1 或其他超出已知範圍的值),讓模型知道這是一個不在訓練範圍內的新類別。第二是在資料收集和特徵設計階段預先加入「其他」這個類別,讓所有未知值都對應到這個已定義的編碼。第三是使用 scikit-learn OrdinalEncoder 的 handle_unknown 參數,設定為 'use_encoded_value' 並指定 unknown_value 來統一處理未知值。最佳做法是在特徵設計初期就考慮這個問題,而非等到部署後才被動應對。