| Feature Type | What It's For | Processing Magic |
|---|---|---|
| 🔢 Numerical | Continuous values like age, income, scores | Normalization, scaling, embeddings, distribution analysis |
| 🏷️ Categorical | Discrete values like occupation, product type | Embeddings, one-hot encoding, vocabulary management |
| 📝 Text | Free-form text like reviews, descriptions | Tokenization, embeddings, sequence handling |
| 📅 Date | Temporal data like signup dates, transactions | Component extraction, cyclical encoding, seasonality |
| ➕ Cross Features | Feature interactions | Combined embeddings, interaction modeling |
| 🔍 Passthrough | IDs, metadata, pre-processed data | Input signatures without processing (v1.11.1+: separate or included) |
The simplest way to define features is with the FeatureType enum:
from kdp import PreprocessingModel, FeatureType
# ✨ Quick and easy feature definition
features = {
# 🔢 Numerical features - different processing strategies
"age": FeatureType.FLOAT_NORMALIZED, # 📊 [0,1] range normalization
"income": FeatureType.FLOAT_RESCALED, # 📈 Standard scaling
"transaction_count": FeatureType.FLOAT, # 🧮 Default normalization (same as FLOAT_NORMALIZED)
# 🏷️ Categorical features - automatic encoding
"occupation": FeatureType.STRING_CATEGORICAL, # 👔 Job titles, roles
"education_level": FeatureType.INTEGER_CATEGORICAL, # 🎓 Education codes
# 📝 Text and dates - specialized processing
"product_review": FeatureType.TEXT, # 💬 Customer feedback
"signup_date": FeatureType.DATE, # 📆 User registration date
# 🔍 Passthrough feature - use without any processing
"embedding_vector": FeatureType.PASSTHROUGH # 🔄 Pre-processed data passes directly to output
}
# 🏗️ Create your preprocessor
preprocessor = PreprocessingModel(
path_data="customer_data.csv",
features_specs=features
)
🔢
🏷️
📝
📅
➕
🔍
For more control, use specialized feature classes:
from kdp.features import NumericalFeature, CategoricalFeature, TextFeature, DateFeature, PassthroughFeature
import tensorflow as tf
# 🔧 Advanced feature configuration
features = {
# 💰 Numerical with advanced embedding
"income": NumericalFeature(
name="income",
feature_type=FeatureType.FLOAT_RESCALED,
embedding_size=32
),
# 🏪 Categorical with hashing
"product_id": CategoricalFeature(
name="product_id",
feature_type=FeatureType.STRING_CATEGORICAL,
max_tokens=10000,
category_encoding="hashing"
),
# 📋 Text with custom tokenization
"description": TextFeature(
name="description",
max_tokens=5000,
embedding_size=64,
sequence_length=128,
ngrams=2
),
# 🗓️ Date with cyclical encoding
"purchase_date": DateFeature(
name="purchase_date"
),
# 🧠 Passthrough feature
"embedding": PassthroughFeature(
name="embedding",
dtype=tf.float32
)
}KDP creates optimized preprocessing architectures based on your feature definitions. Here are examples of different model configurations:
<div class="advanced-architectures">
<div class="advanced-architecture-card">
<h4>✨ Tabular Attention</h4>
<p>Enhance feature interactions with tabular attention:</p>
<div class="architecture-image-container">
<img src="imgs/models/tabular_attention.png" alt="Tabular Attention" class="architecture-image"/>
</div>
</div>
<div class="advanced-architecture-card">
<h4>🔄 Transformer Blocks</h4>
<p>Process categorical features with transformer blocks:</p>
<div class="architecture-image-container">
<img src="imgs/models/transformer_blocks.png" alt="Transformer Blocks" class="architecture-image"/>
</div>
</div>
<div class="advanced-architecture-card">
<h4>🧠 Feature MoE (Mixture of Experts)</h4>
<p>Specialized feature processing with Mixture of Experts:</p>
<div class="architecture-image-container">
<img src="imgs/models/feature_moe.png" alt="Feature MoE" class="architecture-image"/>
</div>
</div>
</div>
KDP supports different output modes for your preprocessed features:
<div class="output-modes">
<div class="output-mode-card">
<h4>🔗 Concatenated Output</h4>
<div class="architecture-image-container">
<img src="imgs/models/output_mode_concat.png" alt="Concat Output Mode" class="architecture-image"/>
</div>
</div>
<div class="output-mode-card">
<h4>📦 Dictionary Output</h4>
<div class="architecture-image-container">
<img src="imgs/models/output_mode_dict.png" alt="Dict Output Mode" class="architecture-image"/>
</div>
</div>
</div>
<style> /* Base styling */ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 0; } /* Feature overview header */ .feature-overview-header { background: linear-gradient(135deg, #4a86e8 0%, #7dabf5 100%); border-radius: 10px; padding: 30px; margin: 30px 0; box-shadow: 0 4px 6px rgba(0,0,0,0.1); color: white; } .overview-title h2 { margin-top: 0; font-size: 28px; } .overview-title p { font-size: 18px; margin-bottom: 0; opacity: 0.9; } /* Features overview container */ .features-overview-container { margin: 30px 0; } /* Table styling */ .table-container { margin: 20px 0; border-radius: 10px; overflow: hidden; box-shadow: 0 4px 8px rgba(0,0,0,0.05); } .features-overview-table { width: 100%; border-collapse: collapse; } .features-overview-table th { background-color: #f0f7ff; padding: 15px; text-align: left; font-weight: 600; border-bottom: 2px solid #4a86e8; } .features-overview-table td { padding: 12px 15px; border-bottom: 1px solid #eaecef; } .features-overview-table tr:nth-child(even) { background-color: #f8f9fa; } .features-overview-table tr:hover { background-color: #f0f7ff; } /* Getting started container */ .getting-started-container { background-color: #f8f9fa; border-radius: 10px; padding: 20px; margin: 30px 0; border-left: 4px solid #4a86e8; } /* Code containers */ .code-container { background-color: #f8f9fa; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 5px rgba(0,0,0,0.1); margin: 20px 0; } .code-container pre { margin: 0; padding: 20px; } /* Benefits grid */ .benefits-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 20px; margin: 30px 0; } .benefit-card { background-color: #fff; border-radius: 10px; padding: 20px; box-shadow: 0 4px 8px rgba(0,0,0,0.05); transition: transform 0.3s ease, box-shadow 0.3s ease; display: flex; flex-direction: column; align-items: center; text-align: center; } .benefit-card:hover { transform: translateY(-5px); box-shadow: 0 8px 16px rgba(0,0,0,0.1); } .benefit-icon { font-size: 2.5em; margin-bottom: 15px; } .benefit-card h3 { margin: 0 0 10px 0; color: #4a86e8; } .benefit-card p { margin: 0; } /* Feature types grid */ .feature-types-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; margin: 30px 0; } .feature-type-card { display: flex; align-items: flex-start; background-color: #fff; border-radius: 10px; padding: 20px; box-shadow: 0 4px 8px rgba(0,0,0,0.05); transition: transform 0.3s ease, box-shadow 0.3s ease; text-decoration: none; color: #333; } .feature-type-card:hover { transform: translateY(-5px); box-shadow: 0 8px 16px rgba(0,0,0,0.1); } .feature-type-icon { font-size: 2.5em; margin-right: 15px; } .feature-type-content { flex: 1; } .feature-type-content h3 { margin: 0 0 10px 0; color: #4a86e8; } .feature-type-content p { margin: 0; font-size: 14px; } /* Advanced config container */ .advanced-config-container { background-color: #f8f9fa; border-radius: 10px; padding: 20px; margin: 30px 0; border-left: 4px solid #4a86e8; } /* Pro tips */ .pro-tips-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 20px; margin: 30px 0; } .pro-tip-card { display: flex; align-items: flex-start; background-color: #fff; border-radius: 10px; padding: 20px; box-shadow: 0 4px 8px rgba(0,0,0,0.05); transition: transform 0.3s ease, box-shadow 0.3s ease; } .pro-tip-card:hover { transform: translateY(-5px); box-shadow: 0 8px 16px rgba(0,0,0,0.1); } .pro-tip-number { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; background-color: #4a86e8; color: white; border-radius: 50%; margin-right: 15px; font-weight: bold; } .pro-tip-content { flex: 1; } .pro-tip-content h3 { margin: 0 0 5px 0; color: #4a86e8; } .pro-tip-content p { margin: 0; } /* Architecture container */ .architecture-container { margin: 30px 0; } .architecture-section { margin: 30px 0; } .architecture-section h3 { color: #4a86e8; border-bottom: 1px solid #eaecef; padding-bottom: 10px; } .architecture-image-container { text-align: center; margin: 20px 0; } .architecture-image { max-width: 100%; height: auto; border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); transition: transform 0.3s ease; } .architecture-image:hover { transform: scale(1.02); } .advanced-architectures, .output-modes { display: grid; grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); gap: 20px; margin: 20px 0; } .advanced-architecture-card, .output-mode-card { background-color: #fff; border-radius: 10px; padding: 20px; box-shadow: 0 4px 8px rgba(0,0,0,0.05); } .advanced-architecture-card h4, .output-mode-card h4 { color: #4a86e8; margin-top: 0; } /* Navigation */ .nav-container { display: flex; justify-content: space-between; margin: 40px 0; } .nav-button { display: flex; align-items: center; padding: 10px 15px; background-color: #f8f9fa; border-radius: 8px; text-decoration: none; color: #333; box-shadow: 0 2px 5px rgba(0,0,0,0.1); transition: background-color 0.3s ease, transform 0.3s ease; } .nav-button:hover { background-color: #f0f7ff; transform: translateY(-2px); } .nav-button.prev { padding-left: 10px; } .nav-button.next { padding-right: 10px; } .nav-icon { font-size: 1.2em; margin: 0 8px; } /* Responsive adjustments */ @media (max-width: 768px) { .benefits-grid, .feature-types-grid, .pro-tips-grid, .advanced-architectures, .output-modes { grid-template-columns: 1fr; } .feature-type-card { flex-direction: column; align-items: center; text-align: center; } .feature-type-icon { margin-right: 0; margin-bottom: 15px; } .pro-tip-card { flex-direction: column; align-items: center; text-align: center; } .pro-tip-number { margin-right: 0; margin-bottom: 15px; } } </style>

