Encoding Ordinal Categorical Data: Teaching Machine Learning the Meaning Behind Rankings
Summary
This article details Ordinal Encoding, a crucial preprocessing step for machine learning models that converts categorical data with inherent rankings (e.g., "Poor", "Average", "Good") into numerical values while preserving their natural order. Machine learning algorithms require numerical inputs for operations like distance calculations and gradient descent, making encoding essential. Unlike One-Hot Encoding, which is suitable for nominal data without order, Ordinal Encoding assigns integers (e.g., 0, 1, 2) that reflect the true hierarchy. The Scikit-Learn `OrdinalEncoder` is demonstrated, with a critical warning to always manually specify the `categories` parameter (e.g., `[['Poor','Average','Good']]`) to prevent incorrect alphabetical sorting. The process involves splitting data into train and test sets *before* fitting the encoder on training data to avoid data leakage. It also distinguishes `OrdinalEncoder` for input features from `LabelEncoder`, which is specifically for one-dimensional target variables.
Key takeaway
For Machine Learning Engineers or Data Scientists preparing datasets with categorical features, correctly applying Ordinal Encoding is vital. If your data contains ordered categories like "Poor" or "Good," explicitly define their hierarchy within Scikit-Learn's `OrdinalEncoder` to prevent misinterpretation by your model. Always perform a train-test split *before* fitting any encoder to avoid data leakage, and reserve `LabelEncoder` strictly for target variables. This precision ensures your models learn from accurate, ordered information, improving reliability.
Key insights
Ordinal Encoding preserves meaningful rankings in categorical data, crucial for effective machine learning.
Principles
- Machine learning algorithms require numerical inputs.
- Data representation significantly impacts model performance.
- Preserve inherent order in ordinal categorical features.
Method
Split data into train/test sets. Initialize `OrdinalEncoder` with explicit category order. Fit the encoder *only* on training data. Transform both training and test data.
In practice
- Manually define category order in `OrdinalEncoder`.
- Apply `OrdinalEncoder` to input features.
- Use `LabelEncoder` for target variables only.
Topics
- Ordinal Encoding
- Categorical Data
- Feature Engineering
- Scikit-Learn
- Data Leakage
- LabelEncoder
Best for: Machine Learning Engineer, Data Scientist, AI Student
Related on AIssential
See Counsel's argued verdicts on the open AI decisions leaders are weighing →
Editorial summary, takeaway, and curation by AIssential. Original article published by Machine Learning on Medium.