Ordinal and target encoding
2.1.7· AI-ML › Data Preprocessing & Feature Engineering
Overview
Jab aapke paas categorical features with inherent ordering hon ya high-cardinality categories hon, tab one-hot encoding wasteful ya harmful bhi ban jaati hai. Ordinal encoding order ko preserve karta hai categories ko integers mein map karke, jabki target encoding categories ko target variable se derive kiye gaye statistics se replace karta hai—dono compact, powerful techniques hain jab sahi tarike se apply ki jayein.
Ordinal Encoding
Ek feature ke liye jisme categories hain aur , hum define karte hain:
WHY: Linear models aur tree-based models ko "do steps apart" interpret karte hain, jo ordinal structure se match karta hai.
WHAT: Aap manually order specify karte ho (ya domain knowledge se infer karte ho), phir har category ko uske rank se replace karte ho.
HOW:
- Natural order wale features identify karo (education level, satisfaction rating, sizes S/M/L/XL)
- Ordering explicitly define karo
- Har category ko uske integer rank se map karo
- Original values replace karo
jahan har ek categorical value hai aur upar define ki gayi mapping function hai.
First principles se derivation:
- Goal: Ordinal categories ko numerically represent karo unka relative ordering preserve karte hue
- Constraint: Numeric representation yeh satisfy kare:
- Simplest solution: 1 se consecutive integers assign karo
- Result: sabse minimal bijective function hai jo order preserve karta hai aur smallest range use karta hai
Dataset:
Education: [High School, Bachelor, Master, PhD, Bachelor, High School]
Step 1: Order define karo
High School < Bachelor < Master < PhD
Step 2: Mapping create karo
High School → 1
Bachelor → 2
Master → 3
PhD → 4
Yeh mapping kyun? Kyunki education level ki clear progression hai—har step ke liye previous step complete karna zaroori hai.
Step 3: Encoding apply karo
Result: [1, 2, 3, 4, 2, 1]
Yeh kaam kyun karta hai? Ek linear model jo jaisi coefficients seekhta hai, woh sahi interpret karega ki PhD (4) Bachelor (2) se zyada contribute karta hai, aur difference proportional hai.
Example 2: T-shirt Size
Size: [M, L, S, XL, M, S]
Step 1: Order define karo
S < M < L < XL
Step 2: Mapping create karo
S → 1
M → 2
L → 3
XL → 4
1 se start kyun? 0 ya 1 se start karna order-preservation ke liye matter nahi karta, lekin 1-indexing conventional hai aur un models ke saath potential issues avoid karta hai jo 0 ko specially treat karte hain.
Step 3: Apply karo
Result: [2, 3, 1, 4, 2, 1]
Yeh step kyun? Har original category ko mapping dictionary mein lookup kiya jaata hai aur uske integer rank se replace kiya jaata hai.
Target Encoding

Ek categorical feature aur target ke liye, category ka target encoding hai:
WHY: High-cardinality features (bahut saari unique categories) one-hot encoding se explode ho jaati hain. Target encoding information compress karta hai predictive signal preserve karte hue.
WHAT: Har category ke liye target variable ka mean (ya median, ya koi bhi statistic) calculate karo, phir categories ko un statistics se replace karo.
HOW:
- Data ko train/validation mein split karo
- Train set mein har category ke liye mean target value compute karo
- Categories ko unke means se replace karo
- Unseen categories handle karo (global mean ya special value)
- Crucial: Leakage avoid karne ke liye cross-validation ya separate encoding data use karo
jahan training set mein category ka count hai.
Smoothed Target Encoding (rare categories par overfitting rokta hai):
jahan:
- = category ke liye mean target
- = target ka global mean
- = category ka count
- = smoothing parameter (e.g., 10-100)
First principles se derivation:
Goal: Ek aisa single numerical feature banao jo target ke saath correlation maximize kare overfitting prevent karte hue.
Raw mean ki problem: Agar category sirf ek baar ke saath appear hoti hai, toh hum use 100 encode karenge—lekin yeh shayad noise hai, signal nahi.
Solution: Global mean ki taraf Bayesian smoothing.
Starting point: Hum category mean aur global mean ka weighted average chahte hain.
kya hona chahiye? Yeh mein hamara confidence reflect karna chahiye. High → high confidence → . Low → low confidence → .
Natural choice: jahan smoothing strength control karta hai.
Substituting:
Simplifying:
Yeh global mean par "pseudo-observations" add karne ke equivalent hai—ek classic empirical Bayes technique.
Training data:
City | Price (k$)
-------|----------
NYC | 500
NYC | 600
NYC | 550
Seattle | 400
Seattle | 450
Portland | 300
Step 1: Har city ka mean price compute karo
NYC: (500 + 600 + 550) / 3 = 550
Seattle: (400 + 450) / 2 = 425
Portland: 300 / 1 = 300
Yeh step kyun? Hum har category ke liye ek representative statistic paane ke liye saare training examples aggregate kar rahe hain.
Step 2: Categories ko means se replace karo
City | Price | Encoded
----------|-------|--------
NYC | 500 | 550
NYC | 600 | 550
NYC | 550 | 550
Seattle | 400 | 425
Seattle | 450 | 425
Portland | 300 | 300
Yeh kaam kyun karta hai? Model ab ek numerical feature dekhta hai jo directly target se correlate karta hai. NYC ki high encoding (550) model ko batati hai "yeh city expensive hai."
Step 3: Test time par nayi city handle karo
Test: [Boston, NYC, Seattle]
Boston unseen hai. Global mean use karo = (550×3 + 425×2 + 300×1) / 6 = 475
Result: [475, 550, 425]
Unseen ke liye global mean kyun? Bina data ke yeh hamara best guess hai. Better alternatives: validation set statistics use karo ya imputation ke liye alag model train karo.
Example 4: Smoothed Target Encoding
Maano Portland sirf ek baar appear hoti hai. Raw encoding = 300 noise ho sakta hai.
, global mean = 475 ke saath smoothing apply karo:
Yeh step kyun? Hum extreme value (300) ko population mean (475) ki taraf shrink kar rahe hain kyunki hamara confidence low hai (sirf 1 observation).
NYC ke liye 3 observations ke saath:
Yeh 550 ke itna close kyun hai? Kyunki 3 observations se zyada confidence milta hai, toh global mean ke liye vs 0.77 category mean ke liye.
Galat approach:
# Compute target encoding on ENTIRE dataset
encoding = df.groupby('city')['price'].mean()
df['city_encoded'] = df['city'].map(encoding)
# Then split train/testYeh sahi kyun lagta hai: Yeh simple hai—ek baar compute karo, har jagah apply karo.
Yeh catastrophically galat kyun hai: Test set ki target values encoding mein leak ho gayi. Tumhara model future information dekhta hai. Validation accuracy inflated hogi; real-world performance giregi.
Fix:
# Compute encoding ONLY on training data
encoding = train.groupby('city')['price'].mean()
train['city_encoded'] = train['city'].map(encoding)
test['city_encoded'] = test['city'].map(encoding).fillna(encoding.mean())Yeh kaam kyun karta hai: Encoding test targets dekhe bina compute ki jaati hai. Unseen categories ko global mean milta hai.
Aur bhi better: k-fold target encoding use karo jahan har fold doosre folds ke statistics se encode hota hai.
Mistake 2: Rare categories ke liye smoothing na karna
Galat: Raw mean use karo chahe category mein 1-2 samples hi hon.
Yeh sahi kyun lagta hai: "Woh us category ka true mean hai!"
Yeh galat kyun hai: Chhote samples ke saath, mean noisy hota hai. ke saath 1 sample wali category sirf ek outlier ho sakta hai.
Fix: Smoothing apply karo (upar ka formula). Rare categories global mean ki taraf pull hoti hain.
Yeh kaam kyun karta hai: Yeh bias-variance tradeoff hai. Hum slight bias accept karte hain (global mean ki taraf shrinking) taaki variance dramatically reduce ho (noise se wild swings).
Mistake 3: Nominal categories ke liye ordinal encoding use karna
Galat: [Red, Blue, Green] ko [1, 2, 3] encode karo jab koi natural order na ho.
Yeh sahi kyun lagta hai: "Yeh sirf numbers hain, model figure out kar lega."
Yeh galat kyun hai: Linear models seekhenge ki Blue (2) Red (1) aur Green (3) ke "beech" hai, jo nonsense hai. Tumne false ordinal structure inject kar di hai.
Fix: One-hot encoding, target encoding, ya embeddings use karo—lekin nominal ke liye kabhi ordinal mat use karo.
When to Use Which
| Feature Type | Cardinality | Encoding Choice |
|---|---|---|
| Ordinal (satisfaction) | Any | Ordinal |
| Nominal (city) | >50 | Target |
| Nominal (color) | <10 | One-hot |
| Nominal (user ID) | >10k | Target or Hash |
Recall
Ek 12-saal ke bachche ko samjhate hue socho:
"Maano tum ice cream flavors ko 'yuck' se 'yummy' tak rate kar rahe ho. Agar 'yuck' 1 hai, 'okay' 2 hai, 'good' 3 hai, aur 'yummy' 4 hai, toh tumne abhi ordinal encoding kar li! Numbers tumhari pasand ke order se match karte hain.
Ab socho tumhare paas 100 different ice cream shops ki list hai, aur tum predict karna chahte ho ki log kitna pay karenge. 100 columns banane ki jagah (har shop ke liye ek), tum kuch clever karte ho: har shop ka naam us shop par logon ne average mein kitna pay kiya se replace karo. Expensive shops ko high numbers milte hain, cheap shops ko low numbers. Yahi target encoding hai—tum jo pehle hua tha use ek useful number banane ke liye use kar rahe ho."
TEAPOT for target encoding pitfalls:
- Test leakage (test ko training stats mein encode mat karo)
- Extreme smoothing rare categories ke liye zaroori hai
- Avoid for ordinal features (overkill)
- Predict mode: unseen categories handle karo
- Overfitting risk without CV
- Tree models love it (compact, informative)
Connections
- One-hot Encoding - Low-cardinality nominal features ke liye alternative
- Feature Scaling - Distance-based models ke liye ordinal/target encoded features ko scale karna pad sakta hai
- Cross-Validation - Target encoding leakage rokne ke liye essential
- Bayesian Methods - Smoothed target encoding empirical Bayes hai
- Curse of Dimensionality - Target encoding high-cardinality features ke liye isko mitigate karta hai
- Overfitting - Target encoding bina proper CV/smoothing ke overfit kar sakta hai
- Tree-based Models - Ordinal encoding ko splits ke through naturally handle karte hain
#flashcards/ai-ml
Ordinal encoding kya hai? :: Categorical values ko integers mein mapping karna ek specified order ke according, categories ke beech ordinal relationship preserve karte hue (e.g., Poor=1, Fair=2, Good=3).
Ordinal encoding kab use karni chahiye? :: Jab categorical features ki inherent ordering ho (education level, satisfaction ratings, sizes S/M/L/XL) aur tum chahte ho ki model us order ko respect kare.
Target encoding kya hai?
Target encoding high-cardinality features ke liye kyun useful hai? :: Yeh one-hot encoding ki dimensionality explosion avoid karta hai (500 cities → 500 columns) jabki predictive signal preserve karta hai target statistics use karke (500 cities → 1 column with mean target per city).
Smoothed target encoding ka formula kya hai?
Target encoding mein smoothing kyun important hai?
Target encoding mein sabse bada pitfall kya hai?
Target encoding mein target leakage kaise rokein?
Nominal categories ke liye ordinal encoding kyun nahi use karni chahiye?
Smoothed target encoding ki derivation ka basis kya hai?
Test time par target encoding mein unseen categories kaise handle karein?
Ordinal vs target encoding use cases compare karo :: Ordinal: inherent order (ratings, sizes, education). Target: predictive patterns wale high-cardinality nominal (cities, user IDs, product SKUs). One-hot: low-cardinality nominal (colors, gender).