Feature engineering is where most ML value is created. A simple model with great features beats a complex model with poor features. This is the work that actually moves metrics - transforming raw data into signals that models can learn from.
Where It Is Used
Every ML system relies on feature engineering:
- Fraud detection: Velocity features, behavioral patterns, network signals
- Recommendations: User preferences, item popularity, interaction history
- Credit scoring: Payment history aggregations, debt ratios, stability indicators
- Demand forecasting: Seasonality, trends, promotional effects
- Churn prediction: Engagement trends, support interactions, usage patterns
The best ML teams spend 60-80% of their time on features, not models.
Typical Data You Will See
Raw data before feature engineering:
| Source | Format | Examples |
|---|---|---|
| Transactional | Event logs | Purchases, clicks, logins |
| User profiles | Key-value | Demographics, preferences, settings |
| Time series | Sequential | Prices, sensor readings, metrics |
| Text | Unstructured | Reviews, messages, descriptions |
| Categorical | Codes | Product categories, regions, device types |
Feature engineering transforms this into model-ready format: - Numeric features scaled appropriately - Categorical features encoded - Missing values handled - Temporal patterns extracted - Interactions captured
What You Do in Practice
- Understand the business problem - What signal would help predict the target?
- Explore the raw data - What is available, what is the quality, what is missing?
- Define the prediction point - What information is available at prediction time?
- Extract base features - Direct mappings from raw data
- Create aggregations - Sums, counts, averages over time windows
- Build ratio features - Current vs historical, entity vs population
- Encode categoricals - Choose encoding based on cardinality and model
- Handle missing values - Imputation or indicator features
- Validate feature quality - Check distributions, correlations, leakage
- Test in production - Ensure features compute the same way in serving
Baseline First
Start with the simplest feature set that captures the problem:
- Direct mappings: Numeric columns as-is, one-hot encoded categoricals
- Basic aggregations: Count, sum, mean of key events
- Recency features: Days since last event
- Simple ratios: This period vs last period
This baseline: - Establishes performance floor quickly - Identifies data quality issues early - Provides interpretable starting point - Enables fast iteration
Add complexity only when baseline performance plateaus.
Common Patterns and When to Choose
Numeric Transformations
| Pattern | When to Use | Example |
|---|---|---|
| Standardization | Linear models, neural networks | (x - mean) / std |
| Min-max scaling | Bounded features, neural networks | (x - min) / (max - min) |
| Log transform | Right-skewed distributions | log(x + 1) |
| Binning | Non-linear relationships | Age groups: 18-25, 26-35, ... |
| Winsorization | Outlier handling | Cap at 1st and 99th percentile |
Categorical Encoding
| Pattern | When to Use | Cardinality |
|---|---|---|
| One-hot encoding | Tree models, low cardinality | < 20 categories |
| Target encoding | High cardinality, tabular models | 20-1000 categories |
| Frequency encoding | High cardinality, simple | Any |
| Embedding | Neural networks, very high cardinality | 1000+ categories |
| Hash encoding | Memory constraints, unknown categories | Any |
Temporal Features
| Pattern | Example | Use Case |
|---|---|---|
| Rolling aggregations | Sum of purchases in last 30 days | Trend detection |
| Time since event | Days since last login | Recency signals |
| Cyclical encoding | sin/cos of hour, day of week | Periodic patterns |
| Lag features | Value 1, 7, 30 days ago | Time series |
| Trend features | Slope over time window | Direction of change |
Interaction Features
| Pattern | Example | When Useful |
|---|---|---|
| Multiplication | Feature A * Feature B | Known interactions |
| Ratio | Feature A / Feature B | Relative comparisons |
| Difference | Feature A - Feature B | Changes, deltas |
| Polynomial | Feature A^2, A^3 | Non-linear relationships |
Feature Engineering Patterns
Aggregation framework:
For each entity (user, product, session):
For each event type (purchase, click, view):
For each time window (1d, 7d, 30d, 90d):
Compute: count, sum, mean, max, min, std
Behavioral signals: - Consistency: std of activity across time periods - Trend: comparison of recent vs historical behavior - Diversity: count of unique categories interacted with - Intensity: activity rate per time unit
Text features: - Length: character count, word count - Patterns: regex matches, keyword presence - Embeddings: TF-IDF, sentence transformers
Missing value strategies: - Impute with median/mode for random missingness - Impute with domain-specific value (e.g., 0 for count features) - Create binary indicator: is_feature_missing - Leave as-is for tree models that handle missing values
Evaluation and Metrics
Feature quality metrics:
| Metric | What It Measures | Target |
|---|---|---|
| Coverage | % of rows with non-null value | > 80% for critical features |
| Cardinality | Unique values | Appropriate for encoding choice |
| Correlation with target | Predictive power | Higher is better, but check for leakage |
| Stability | Distribution consistency over time | Low drift |
| Compute cost | Time/resources to generate | Within latency budget |
Pitfalls: - Feature leakage: Using information from after prediction time - Target leakage: Feature that encodes the label directly or indirectly - Distribution shift: Feature computed differently in training vs serving - High cardinality surprises: New categories in production
Failure Modes and Debugging Checklist
- [ ] Leakage: Feature has impossibly high correlation with target
- [ ] Training-serving skew: Different code paths for training and inference
- [ ] Stale features: Online features not updated, serving outdated values
- [ ] NULL explosion: Upstream data issue causes mass missing values
- [ ] Type mismatch: Integer overflow, string encoding issues
- [ ] Time zone bugs: Aggregation windows computed in wrong timezone
- [ ] Off-by-one errors: Time windows include future data
- [ ] Join fanout: One-to-many join inflates feature values
Production Checklist
Feature development: - [ ] Feature definition documented - [ ] Unit tests for feature logic - [ ] Tested on holdout data - [ ] Checked for leakage - [ ] Compute cost acceptable
Feature deployment: - [ ] Same logic in training and serving - [ ] Monitoring for feature drift - [ ] Alerting for NULL rates - [ ] Backfill strategy defined - [ ] Versioning in place
Feature maintenance: - [ ] Regular quality audits - [ ] Deprecation process for unused features - [ ] Documentation updated - [ ] Dependencies tracked
Tools and Stack
| Category | Tools |
|---|---|
| Feature computation | pandas, Polars, Spark, dbt |
| Feature stores | Feast, Tecton, Vertex AI Feature Store |
| Validation | Great Expectations, Pandera |
| Visualization | matplotlib, seaborn, Plotly |
| Experiment tracking | MLflow, Weights & Biases |
Example Mini-Case
Scenario: Improve churn prediction model for subscription service.
Current state: Model uses 12 features (demographics, plan type, tenure). AUC 0.68.
Feature engineering sprint: 1. Engagement features: Sessions last 7/30/90 days, feature usage counts 2. Trend features: Sessions this week vs 4-week average 3. Support signals: Tickets opened, resolution time, sentiment 4. Payment features: Failed payments, payment method changes 5. Recency features: Days since last login, last feature use
Result: 45 new features. After selection, 23 features in final model. AUC improved to 0.79.
Key insight: Trend features (engagement declining) were most predictive, not static features.
Related Pages
- Index: ML Field Guide
- Binary Classification in Production
- Feature Stores in Practice
- Data Quality Monitoring
Further Reading
- Feature Engineering for Machine Learning - Alice Zheng
- scikit-learn Preprocessing Guide
- Feast Documentation
- Great Expectations Documentation
Try it live
Everything above runs in your browser — open Feature Engineering: Building Predictive Models and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.
▶ Open Feature Engineering: Building Predictive Models simulation