Skip to content

Latest commit

 

History

History
722 lines (612 loc) · 17.6 KB

File metadata and controls

722 lines (612 loc) · 17.6 KB

🛠️ Feature Types Overview

Making Data ML-Ready

KDP makes feature processing intuitive and powerful by transforming your raw data into the optimal format for machine learning.

💪 Feature Types at a Glance

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)

🚀 Getting Started

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
)

⭐ Why Strong Feature Types Matter

🎯

Optimized Processing

Each feature type gets specialized handling for better ML performance

🐛

Reduced Errors

Catch type mismatches early in development, not during training

📝

Clearer Code

Self-documenting feature definitions make your code more maintainable

Enhanced Performance

Type-specific optimizations improve preprocessing speed

📚 Feature Type Documentation

🔢

Handle continuous values with advanced normalization and distribution-aware processing

🏷️

Process discrete categories with smart embedding techniques and vocabulary management

📝

Work with free-form text using tokenization, embeddings, and sequence handling

📅

Extract temporal patterns from dates with component extraction and cyclical encoding

Model feature interactions with combined embeddings and interaction modeling

🔍

Include unmodified data or pre-computed features directly in your model

👨‍💻 Advanced Feature Configuration

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
    )
}

💡 Pro Tips for Feature Definition

1

Start Simple

Begin with basic FeatureType definitions

2

Add Complexity Gradually

Refactor to specialized feature classes when needed

3

Combine Approaches

Mix distribution-aware, attention, embeddings for best results

4

Check Distributions

Review your data distribution before choosing feature types

5

Experiment with Types

Sometimes a different encoding provides better results

6

Consider Passthrough

Use passthrough features for pre-processed data or custom vectors

📊 Model Architecture Diagrams

KDP creates optimized preprocessing architectures based on your feature definitions. Here are examples of different model configurations:

🔄 Basic Feature Combinations

When combining numerical and categorical features:

Numeric and Categorical Features

🌟 All Feature Types Combined

KDP can handle all feature types in a single model:

All Feature Types Combined

🔋 Advanced 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>

📤 Output Modes

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>